Papago 导航破解过程
一.必要知识
对汇编语言有所了解.我其实也没用过arm汇编,.但是因为有80x86的经验.对于arm指令看10分钟也就会了.
对android程序编写有一定了解。掌握程序加载执行流程。
对函数调用流程有所了解.因为papago主体用的是gnu c++写的,所以symbol表比较清楚。很容易对照判别。而且对于arm elf程序函数的参数传递和寻址要有一定了解才能更好的破解。有破解经验更好
二.实用工具。
本来最好是在linux下。符合android环境。但是我破解多半是windows程序……linux大半不用破解……所以这里用的都是windows工具
1.不用说 IDA PRO…大名鼎鼎。我们都用它。
2.Ultraedit。恩。还行吧。任何一个hex editor都可以。
3.Baksmali 反编译dex
4.Gdb和strace备用
5.电脑和人脑
三.破解过程
1.初步分析
由于android出来不久,相应的加密加壳程序基本不存在。所以相对来说比较方便静态反编译。但是同样。动态跟踪程序也太少。Android gdb也不支持调试没有-g编译的代码。所以主要以静态反编译破解分析为主。
加密原理,按照dopod惯例,绑定IMEI.所以从IMEI函数入手。
首先把下载的dopod navigator.apk用winrar等直接解压缩。可以看到class.dex和libpapago.so,libpapago.so高达 2M。而class.dex 不到100k。确定是以JNI为主体的结构。那么加密判断是在java中呢还是c中,还不确定。
拿出baksmali.进行分析。反编译class.dex,得到编译文件。开始分析。
Sorry。我这台电脑没有保存smali文件。就不细说了。看activity和JNI class可以看到。IMEI是由java获取。 (BTW..那个函数居然叫JNIGetIMEI,我还以为是java从JNI得到IMEI。纳闷半天,还以为papago这么厉害能从native c或得IMEI,后来才发现是java从telephony类获取IME保存到C中),找遍了整个class.dex,再也没发现任何IMEI相关的判断。所以。基本判断主体是在libpapago中。