安卓逆向之_过掉签名校验


一、验证APP是否有签名校验

  1.原版与修改版对比:

   a).正常版本

正常打开的图片



   a).修改APP源码重新编译打包

修改AndroidManifest.xml

修改过后的apk运行闪退



  2.原版apk拖入到jadx-gui分析源码:

   a).分析代码

通过搜索关键词未找到相关退出代码



   b).分析代码后并未发现校验签名并作出退出的操作,s所以猜想在so层,打开IDA 拖入so库分析

静态注册的JNI函数



   发现了关键点代码.看他这个方法名静态注册找到对应的java的Native函数Java_com_bug_bt_MainActivity_bug(int a1, int a2);但是java层并未传参,第一个是JNIenv 第二个参数是 jobject

发现exit(0)



   跳转到汇编窗口,看arm语句,看到了跳转到exit的语句,直接干掉或者,把上面的判断条件修改一下

汇编窗口



   分析到关键点,准备修改寄存器的值

修改arm汇编代码



   关键点代码,修改BEQ为BNE

找到对应的BEQ代码双击调到16进制窗口

对应的16进制代码



   那么BNE的代码是多少呢?

BNE代码为02 D1



   修改02 D0 为 02 D1保存替换原so文件回编译安装文件

修改十六进制代码保存



   输出保存文件.

输出文件保存



   输出的文件直接替换掉apk内的so文件回编译.

替换so文件



   替换文件后点击编译.

编译apk



   安装apk包校验是否去掉了签名验证.

安装apk包校验是否去掉了签名验证



   校验后发现还是停止运行,此时分析java层代码,来到入口页面的onCreate方法,因为这个方法是页面中最早执行方法,所以分析下.找到了一处比较可以的代码,传入了签名

找到了一出比较可以的代码,传入了签名



   修改smali代码,注释后,编译安装到模拟器.

重新安装后发现没有问题.


在浏览的同时希望给予作者打赏,来支持作者的服务器维护费用.一分也是爱~