关注一款app很久了,这款app为了防止别人逆向破解拉取数据做了很多工作:
防止别人修改apk包,执行关键动作时对dex文件进行md5验证;
防止用户调用接口批量拉数据,对返回的web网页里个人信息进行加密,只有用户点击webview相关控件后,才js调用java代码通过jni调用底层native代码解密后,弹出toast显示个人信息;
我按照逆向工程一贯的思路:
1. 先apk转化jar,查看jar代码,被混淆了,
2. 混淆只是最低级层次的防护,费点时间,主要逻辑点还是能看出来的,理清逻辑后开始反编译,smali文件插入自己的代码,重新打包运行,发现有些关键动作无法执行,失败;
3. 仔细研究才发现做了包校验;又接着看混淆后的代码,发现其网页解密是通过jni调用底层so文件,于是自己写一个android的demo,尝试调研so中解密方法,返回空串,失败;
4. ida 打开so文件,查看arm汇编代码,发现解密方法里也有包校验,于是修改so文件,绕过包校验,重新尝试调用,成功
所用工具:
anti-android:集成了dex2jar,jad,apktool
jd-gui
arm汇编查看机器码: http://bbs.pediy.com/showthread.php?p=1156571
ida pro
Winhex