使用到的apk:
链接:https://pan.baidu.com/s/1ctCc0gaXArQ4y-D9e91EtA?pwd=8hk9
提取码:8hk9
--来自百度网盘超级会员V1的分享
检查Java层是否有校验,尝试在java层解决失败。
Step 1: 查找java层常用的关键字。
通过android killer 查找
1. signatures (1个结果)
2. getPackageManager (2个结果,1个与上面重叠)
3.getPackageInfo (2个结果,1 个与上面重叠)
4.killProcess (没有) 证明在java结束程序逻辑不在java层。
Step 2 查看函数逻辑
看到该函数还是存在一个比较,如果相同就退出函数,如果不相同往下走,如果相同跳出函数。
Step 3 这里我们尝试下改变if-eq为if-ne能否成功过签名校验。
改代码,保存。记得保存,不然没效果。 然后重新打包,安装。
Step 4 重新安装后,问题未解决,打开还是闪退。
查看函数引用,只有Oncreate方法调用了这个函数。
通过 jeb3查看java代码逻辑,调用了一个native方法。 下面分析so层的文件。
如何过So校验:
Step 1: 打开IDA,将so库拖进去分析。
检查是否存在JNIOnload.判断动态调用还是静态调用。
经过检查发现没有jnionload, 存在java_开头的静态调用函数。
Step 2: 分析函数逻辑
先执行了一个getHashCode的函数,点进去看看执行了啥。
进到函数里面看到了熟悉的签名常见方法:
然后还找到函数推出的元凶,exit
Step 3: 修改代码,跳过检测。
往上两行,先做了个比较,如果相等就不往下执行exit。 不相等就执行,这时候只要修改前面的判断就行。让其跳到loc_D12执行。
Arm中的判断如下,将BEQ改成BNE。
So 中0xD0A上的数值是 0x D0 02
右键patch,将BEQ改成BNE,可以看到机器码从02 D0 ->02 D1.
使用010 edit打开so文件,找到地址 0xD0A 将02 d0 改成02 d1, 保存。
Step 4: 重新打包安装,成功打开,搞定。
本文含有隐藏内容,请 开通VIP 后查看