加好了我们的日志代码之后,下面我们就回编译执行,在这个过程可能会遇到samil语法错误,这个就对应指定的文件修改就可以了,我们得到回编译的apk之后,可以在反编译一下,看看他的java代码:
我们看到了,我们添加的代码,在每个方法之后打印信息。
下面我们运行程序,同时开启我们的log的tag:adb logcat -s JW
看到我们打印的日志了,我们发现打印了三个log,这里需要注意的是,这里虽然打印了三个log,但是都是在不同的进程中,所以说一个进程中的log的话,只打印了一个,所以我们判断,问题出现在vr.h这个方法
我们查看这个方法源码:
果然,这个方法做了签名验证,不正确的话,直接退出程序。那么我们现在要想正常的运行程序的话,很简单了,直接注释这行代码:vr.h(this)
然后回编译,在运行,果然不报错了,这里就不在演示了:
好了,上面就通过注入代码,来跟踪问题,这个方法是很常用,也是很实在的。
第二、静态分析Native代码
下面继续来介绍一下,如何使用IDA来静态分析native代码,这里一定要熟悉汇编指令,不然看起来很费劲的。
我们在反编译之后,看到他的onCreate方法中有一个加载so的代码
看看这个代码:
获取密码的方法,是native的,我们就来看看那个getDbPassword方法,用IDA打开libpsProcess.so文件: