当我在x86上对应用程序进行逆向工程时,我可以在调试时获得x86汇编代码,例如:将EIP / RIP指向的操作码反汇编为x86汇编。但是对于android应用程序,我总是需要提前使用某种源来使调试有用。我的问题是,我可以获得我实时调试的程序的java / smali代码,而不是对apk进行反汇编吗?换句话说,调试器可以反汇编"动态的代码就像它在x86上可以做的一样?
我想要的原因是因为当我使用APK的反汇编代码时,我只获得程序的静态反汇编代码,但如果方法被挂钩怎么办?
答案 0 :(得分:0)
我已经反转了一段时间,我从来没有遇到过Smali字节码的实时调试工具。但是,当您拥有一些复杂的目标时,在我们的工具集中同时进行静态和动态分析非常有用。我就是这样做的,它可能会帮到你。
String encrypt(String key, String data);
使用Xposed,我们可以执行以下操作来转储密钥:public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if (!lpparam.packageName.equals("com.target.app")) {
return;
}
findAndHookMethod("com.target.app.CryptoClass", lpparam.classLoader, "encrypt", String.class, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Log.i("TargetApp_Hook", "Secret Key: " + param.args[0].toString());
}
});
你可以使用Xposed在方法之前和之后挂钩,替换方法,避免方法调用,直接使用你的代码调用方法等等!还有一个名为Frida的工具,它允许您同时挂钩Java代码以及本机代码,它易于使用,并且所有内容都通过其自定义Javascript API进行包装。但是,我发现Xposed更稳定。