本帖最后由 零度x 于 2014-8-25 18:16 编辑
刚学安卓逆向几天,就拿了个叫考试宝典安卓版下手试试了
首先安装下APK,用adb install xxx.apk,然后来到模拟器可以看到已经安装好了,运行它 他会提示你选择要考试的科目,这里我选择的是执业护士考试 这里会发现它在sdcard的ks_data目录下生成了一个xxx.db数据库,这个XX是根据不同科目生成出来的,我们先用SQLite Expert打开这个DB看看 核心内容在这个Test里面,可以发现里面有个ID不同,还有个51是相同的,这个51估计是科目的标示,后面的数据都是加密过的,基本可以确定是题目了, 我想到的办法首先是根据安卓的SQLITE操作函数来下断,看看是不是限制了读取的题目数量可以用 query rawQuery 这3个函数试试,这里我用的是NetBeans调试,直接ctrl+shift+f来搜索,这里我只截一个函数的图 ---------------------------------- 然后对这些函数逐个下断点,然后调试发现openDatabase和rawQuery都能断下来,关键还是rawQuery函数,经过反复调试和回溯,最后发现调用rawQuery去取题目的时候,是直接根据那个数据库的ID去取的比如15000003,控制数量用的是一个JSON的LENGTH来确定,然后我就反复追这个JSON,最后怎么也没追出来,后来想了一下,发现打开题目的时候断网是不让打开的,就想着抓包看看,百度一下,下了个tcpdump,然后用adb push c:/tcpdump /data/local/tcpdump穿到安卓上去然后修改下权限chmod 777 /data/local/tcpdump然后再打开题目的时候用/data/local/tcpdump -p -vv -s 0 -w /sdcard/capture.pcap进行抓包,抓完后按ctrl+c结束抓包然后用adb pull sdcard/capture.pcap c:/把抓到的数据拷贝到本机的C盘用wireshark打开看看,直接过http,发现会从服务器请求一个JSON,这是返回的数据
我这里是直接复制下来的 有些中文没复制出来 消息提示是试用版有题目限制,这里状态是 100,暂时不知道含义,后来发现它有个7天体验的注册码,就去领了个看看,然后抓包,这是注册版的抓包
可以发现题目的ID全从服务器返回的。。。真是无语了 这里暂时想到的和谐办法大概有2个 第一个是修改APK里访问JSON的代码,因为已经有体验码得到正确的包了,所以可以固定返回,因为它访问JSON的时候每个章节不同,请求的JSON地址是不同的,所以包应该是固定的,应该可以和他一样恶心,逐个伪造,或者更恶心点,直接定位到请求JSON的代码,等它返回后活生生的直接拷贝给它,这样只适合自己用来学习的一个科目的哥们,因为太多太恶心了, 第二个方法是,既然他有7天体验码,我看了下应该没领取限制,也不需要登录什么的,我大概看了下它有个POST的请求是发送手机修改什么的包,这样7天到了后系应该下那个发送手机型号的包估计能继续使用。。。 还有个方法估计能提取它全部的题目,因为它这个数据库就根据一个ID来验证,可以定位下它用ID来访问数据的代码,然后加个WHILE让它循环读取解密,然后再给它保存了 因为它这个打开题目的时候不是单纯请求服务器看注册没有,他尼玛需要返回题目的ID。。,所以暂时我是想不到很好的解决方法 好了 因为也没学几天暂时研究到这里玩其他的去了:)
|