兄弟們最近被我帶的對逆向萌生興趣,但是遇到加殼的App就無從下手了。今天寫的簡單的Demo來講一下脫殼工具的使用。(切勿用于非法用途,本人文章僅供學習和參考)
1、準備工具
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, "驗證失?。。?!", Toast.LENGTH_SHORT).show();
}
}
});
}
}
2、開始脫殼
2.1關鍵信息查看
我們先把apk拖到jadx看,發現有關鍵詞“qihoo”相關的,且發現包名相關目錄下僅有一個R文件
image.png
2.2安裝我們的apk和BlackDex32
image.png
2.3打開BlackDex,且選擇需要脫殼App
image.png
2.4等待脫殼完畢
image.png
image.png
2.5脫殼完畢,我們需要把dex拿到桌面,且進行觀察
代碼量比較少,所以出來的基本都是cookie開頭,有些我們拖出來能看到cookie和hook開頭的。實際情況我們僅僅需要cookie開頭的即可。
image.png
2.6按照規則修改dex名字
我們打開一個比較大的app之后(別的App;用來和Demo做對比),發現它的dex名字和構成如下:
image.png
所以也需要把我們自己的改成classes、classes2、......
image.png
2.6將修改后的dex替換原包dex
打開方式用zip打開或者將其后綴修改為.zip,然后進行覆蓋替換;然后把再次改回apk格式
image.png
image.png
2.7修改之后直接查看源代碼
image.png
找到我們編寫的代碼路徑:
image.png
指令被抽取,我們轉為看smali指令部分。
image.png
這里有smali部分是有的,說明jadx的解析能力不強。我們轉到GDA看看
image.png
在相關內部類中找到核心代碼。即脫殼完成。
3、注意事項
jadx雖然查看代碼比較友好,但是其反編譯能力一般。 GDA的反編譯能力強一些建議結合查看。dex的指令被抽取需要修復Dex文件,如果具有能力,有ELF文件結構基礎可以使用010自行修改。 或者使用其他工具修復dex結構。
逆向雖有趣,切勿用于非法用途!