兄弟們最近被我?guī)У膶δ嫦蛎壬d趣蚌卤,但是遇到加殼的App就無從下手了意荤。今天寫的簡單的Demo來講一下脫殼工具的使用。(切勿用于非法用途涛浙,本人文章僅供學(xué)習(xí)和參考)
1、準(zhǔn)備工具
a摄欲、需要脫殼的apk
b轿亮、BlackDex32 (需要可以私信)
c、jadx/GDA (自行百度找)
我們使用自己編寫的作為demo胸墙,源代碼如下:
public class MainActivity extends AppCompatActivity {
private EditText editText;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.ed_main);
button = findViewById(R.id.btn_main);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String trim = editText.getText().toString().trim();
if (TextUtils.isEmpty(trim)) {
Toast.makeText(MainActivity.this, "不能為空", Toast.LENGTH_SHORT).show();
return;
}
if (trim.equals("NS你個小辣雞")) {
Toast.makeText(MainActivity.this, "驗證成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(MainActivity.this, "驗證失斘易ⅰ!3儆纭但骨!", Toast.LENGTH_SHORT).show();
}
}
});
}
}
2、開始脫殼
2.1關(guān)鍵信息查看
我們先把apk拖到j(luò)adx看智袭,發(fā)現(xiàn)有關(guān)鍵詞“qihoo”相關(guān)的奔缠,且發(fā)現(xiàn)包名相關(guān)目錄下僅有一個R文件
2.2安裝我們的apk和BlackDex32
2.3打開BlackDex,且選擇需要脫殼App
2.4等待脫殼完畢
2.5脫殼完畢补履,我們需要把dex拿到桌面添坊,且進行觀察
代碼量比較少,所以出來的基本都是cookie開頭箫锤,有些我們拖出來能看到cookie和hook開頭的贬蛙。實際情況我們僅僅需要cookie開頭的即可。
2.6按照規(guī)則修改dex名字
我們打開一個比較大的app之后(別的App谚攒;用來和Demo做對比)阳准,發(fā)現(xiàn)它的dex名字和構(gòu)成如下:
所以也需要把我們自己的改成classes、classes2馏臭、......
2.6將修改后的dex替換原包dex
打開方式用zip打開或者將其后綴修改為.zip野蝇,然后進行覆蓋替換讼稚;然后把再次改回apk格式
2.7修改之后直接查看源代碼
找到我們編寫的代碼路徑:
指令被抽取,我們轉(zhuǎn)為看smali指令部分绕沈。
這里有smali部分是有的锐想,說明jadx的解析能力不強。我們轉(zhuǎn)到GDA看看
在相關(guān)內(nèi)部類中找到核心代碼乍狐。即脫殼完成赠摇。
3、注意事項
jadx雖然查看代碼比較友好浅蚪,但是其反編譯能力一般藕帜。 GDA的反編譯能力強一些建議結(jié)合查看。dex的指令被抽取需要修復(fù)Dex文件惜傲,如果具有能力洽故,有ELF文件結(jié)構(gòu)基礎(chǔ)可以使用010自行修改。 或者使用其他工具修復(fù)dex結(jié)構(gòu)盗誊。
逆向雖有趣时甚,切勿用于非法用途!