1.准备工作完成后,在JNI_OnLoad函数第一行设置断点,然后F8往下执行,会发现调试将在D03140C8这个位置崩掉
2.在新IDA窗口中分析该so文件,找到这个崩掉的位置的这个方法,进去查看该函数干了什么事情
(1)
(2)
(3) 进去后,能F5查看伪代码就查看伪代码,虽然看不是很懂C/C++代码,大致可猜测他是检测是否被调试,从内容中没看到它在执行除了检测调试之外的其他代码,那么大可放心把进入这个函数的入口给干掉.
3.把进入AD的这个BLX指令干掉
(1)
(2)
(3) 干掉之后,F9 安全通过
4.在smali中得知校验密码调用的是greywolf(Landroid/content/Context;Ljava/lang/String;)V方法,有两个参数
接下来就是取正确密码了,先取消勾选的三项,进入bc方法,在bc方法设置个断点
(1)
(2)
5.java调用so层的方法,有默认的两个参数,一个是JNIEnv *env, 一个是jobject obj, greywolf有两个参数,一个是Context(R2),一个是String(R3),那么String正常就是存在R3这个寄存器中,接下来就是追踪R3这个寄存器的走向
6.到了下一个跳转的位置,在静态分析中,继续跟进,
(1)
(2) 通过dh函数一路进去,可发现这是一个签名校验的方法
(3)由于很多地方都调用到了dh这个方法,把每个调用到dh的地方都干掉不太现实,那么久直接修改dh的返回值,让它直接返回true(true为1)
7. 通过F5可发现,这是一个解密函数,
(1)
(2)
8. 可以看到,此函数返回的是"hello5.1"
9.偷一下懒,暂不去考虑其他的,拿这个字符串去输一下,可以发现秘密是正确的