划重点:关注公众号,后台回复crackme,获得本题apk~题目来源:2016华山杯Android逆向题题目:软件包2.zip,要求进行验证登陆知识点:ZIP伪加密、IDA动态调试so、Android Killer使用解题过程:拿到zip压缩包直接解压失败,根据zip伪加密原理如下,压缩文件数据区和目录区有关全局方式标记位,偶数表示无加密,奇数表示加密,理论如下所示。
对比发现待分析的zip包为zip伪加密。修改504B0102后边的第五第六个字节为偶数。总共有两处,说明zip下很多文件,只有两个文件做了伪加密,修改如下所示。
解压后的文件缺个apktool.yml,拷贝一个进去用apktool回编后再签名,但安装apk运行后提示权限不够,将apk拉入AK分析,如下所示,我们直接修改Smali跳过isExit检查。
然后我们看验证部分代码,如下所示,由Java层传入用户输入到Native层,由so对密码进行验证并输出结果,所以下面我们需要使用IDA对Android的so进行动态调试。
因为libgeneratekey.so存放在armeabi目录下,所以需要使用32位的IDA工具以及对应的android_server进行Androi的so动态调试。跟踪代码如下所示,encodePS获取密码,在执行完encodePS后,其返回值即密码存放在R0内,所以在执行完encodePS后的下一条指令上设置断点。
开始调试后,程序断在执行完encodePS后的下一条指令上,可以看到寄存器R0值。
点击寄存器R0指向的箭头,可以看到如下信息,即[stack]:FFD5EF68指向的内容是“lxienietIeAehfyih”
在手机上进行密码验证,验证ok。










关注公众号,后台回复crackme,获得本题apk。
欢迎扫码关注,一起学习