逆向学习笔记: APK过签名包So校验 (一)

发布于:2023-02-16 ⋅ 阅读:(697) ⋅ 点赞:(0)

使用到的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 后查看