2017年1月19日星期四

ANDROID 逆向实例(五)- 360 QhCrackMe

分析一个从看雪上拿过来的 apk。

看名字像是某次数字出的题目?不过毕竟年代久远,比较简单。

baksmail 反编译,就两个需要注意的文件 MainActivity.smali 和 MainActivity$1.smali 其实就是一个 MainActivity 类了,先进入程序看下是什么样的 CrackMe。


大概就长这样,可以看出来程序因为是有一个隐藏的方法,把用户输入的三个内容进行比较是否正确,看看 smali 文件先。没什么太多东西,不贴代码了,主要就是注册了一个 Native 函数 verify,然后把 verify 和 OnClick 绑定。

只有 libqihoo.so 所以也不用去区分是哪个 so 文件里的方法,IDA 看一下。


静态看不了,动态调试一下看看。


动态调试没问题了,不用关系代码是怎么还原的,反正,还原了就好,F5 。


看到这个 860 就知道了,对应的是 RegisterNatives 的偏移 0x35C,所以此时这个 &unk_78068004 肯定保存的就是动态注册 verify 时需要的指针。(为什么可以看之前的逆向笔记)跟进看到。


三个地址,分别指向的是动态注册的:函数名、函数类型、函数代码,前面两个不看了,直接看第三个指针指向的 0x78061FF4。


这里 F5 的时候出现一个 sp 不平的问题,怎么解决这个问题呢,定位到指针不平的地址,然后通过 Alt + k 快捷键,将不平的地方配平就可以 F5 了。


最后的 verify 函数就是这样了,里面掉用了一些其他的函数,这些函数也没做特殊的处理,至此 verify 原型已经出来了,有兴趣的可以继续往下分析。