最近在跟着网上的教程学习android逆向,就用教程里的demo,跟着教程研究一下demo中的签名验证,操练起来~。

反编译之,可以看出签名验证check函数写在libJniTest.so中:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

安卓逆向从入门到嗝屁之突破签名验证 随笔 第1张

 IDA打开libJniTest.so,找到check函数,双击查看check方法:

安卓逆向从入门到嗝屁之突破签名验证 随笔 第2张

安卓逆向从入门到嗝屁之突破签名验证 随笔 第3张

 

看到中文乱码。通过alt+a设置编码

安卓逆向从入门到嗝屁之突破签名验证 随笔 第4张

获取签名后判断,不正确则执行loc_F62,程序退出:

安卓逆向从入门到嗝屁之突破签名验证 随笔 第5张

 

转换为图形视图,会更直观:

安卓逆向从入门到嗝屁之突破签名验证 随笔 第6张

 

判断签名,签名正确通过BNE跳转到左侧视图 ,em...有必要查一波BNE跳转指令:

安卓逆向从入门到嗝屁之突破签名验证 随笔 第7张

所以要想让程序在签名错误的情况下执行,就需要让R0=0的情况下跳转,所以可以使用BEQ指令:

安卓逆向从入门到嗝屁之突破签名验证 随笔 第8张

可以查看到BEQ的十六进制为D0,所以我们十六进制编辑BNE的D1,改为D0:

安卓逆向从入门到嗝屁之突破签名验证 随笔 第9张

安卓逆向从入门到嗝屁之突破签名验证 随笔 第10张

可以看到指令已经被修改为BEQ:

安卓逆向从入门到嗝屁之突破签名验证 随笔 第11张

 

保存修改,重新编译apk文件即可。

PS:1,F5无法查看源代码除了程序有静态分析保护外,建议使用32位IDA,64位无法使用F5;2,重新编译报错可能是apktool的问题。

  over~

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄