安卓逆向 | 分析调试与so调用实战

本文通过实例讲解如何分析调试安卓应用,特别是针对SO库的调用。在抓包未获取到登录接口数据后,作者通过反编译APK,使用jadx和jeb进行代码搜索和调试,定位到SO中的加密算法。在尝试直接调用SO失败后,利用IDA进行汇编代码分析,理解JNI和SO交互,最终成功复现签名算法并绕过问题。
摘要由CSDN通过智能技术生成

声明:本教程仅用于学习交流,有任何侵权问题请联系本人删除

使用fiddler抓取某app登录接口的时候,没有看到任何相关的数据包,猜测app做了防抓包或者不走http协议,尝试proxyDroid、小黄鸟还是不行,最后使用Packet Capture成功抓到数据。看了下登陆接口提交的参数,不知道sign值是怎么来的,所以目标很明确,就是需要逆向分析sign的生成算法。

image.png

将apk文件拖到jadx中进行反编译,ctrl+shift+f 搜索关键词sign出来很多信息但没找到有用的,试试搜索"sign",仔细查看发现图示可疑位置,点进去看看。

image.png

看到图示内容,可以确定找对了地方,sign值是getSign方法执行后的结果,getSign方法中调用了SignManager类getSign方法,传入了三个参数,第一个参数不确定其值,第二个参数是token值,前面抓包发现这个值是空的,第三个值是时间戳,右击getSign跳到方法声明的地方。

image.png

加载so、通过native关键字定义了需要调用的方法getSign,也就是说,它这里调用的是so层的加密算法,so是什么?简单来说,它是c/c++编译后的产物。既然目标app能调用,那我们也可以。在搞之前,还有个参数不确定。这里就用jeb调试一下看看。

image.png

将apk拖到jeb中进行反编译,dex反编译成smali,我们可以调试这个smali代码, ctrl+f 搜索"sign", 找到getSign方法,ctrl+b下断点。

image.png

image.png

确保手机已root并且可调试,如果没有开启调试,到网上去下载相应的mprop, 使用adb推送到手机里,通过如下方法可以临时设置调试状态,这个方法是修改内存种得值,重启手机后恢复不可调试状态。如果你想要永久设置,到网上找相应的教程。然后可以通过adb连接手机,确保jeb可以识别到就行。

image.png

点击附加调试,选择需要调试的进程包名附加进程。

image.png

手机上输入账号密码点击登陆触发断点

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值