兄弟们最近被我带的对逆向萌生兴趣,但是遇到加壳的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文件
2.2安装我们的apk和BlackDex32
2.3打开BlackDex,且选择需要脱壳App
2.4等待脱壳完毕
2.5脱壳完毕,我们需要把dex拿到桌面,且进行观察
代码量比较少,所以出来的基本都是cookie开头,有些我们拖出来能看到cookie和hook开头的。实际情况我们仅仅需要cookie开头的即可。
2.6按照规则修改dex名字
我们打开一个比较大的app之后(别的App;用来和Demo做对比),发现它的dex名字和构成如下:
所以也需要把我们自己的改成classes、classes2、......
2.6将修改后的dex替换原包dex
打开方式用zip打开或者将其后缀修改为.zip,然后进行覆盖替换;然后把再次改回apk格式
2.7修改之后直接查看源代码
找到我们编写的代码路径:
指令被抽取,我们转为看smali指令部分。
这里有smali部分是有的,说明jadx的解析能力不强。我们转到GDA看看
在相关内部类中找到核心代码。即脱壳完成。
3、注意事项
jadx虽然查看代码比较友好,但是其反编译能力一般。 GDA的反编译能力强一些建议结合查看。dex的指令被抽取需要修复Dex文件,如果具有能力,有ELF文件结构基础可以使用010自行修改。 或者使用其他工具修复dex结构。
逆向虽有趣,切勿用于非法用途!