猿人学爬虫比赛第十题:《js混淆 重放攻击对抗》
地址: http://match.yuanrenxue.com/match/10
开无痕,开控制台, debugger 右键选择 :never pause here ,先这样瞧一瞧
又是无限debugger,后面给页面卡蹦了,电脑内存卡满。
处理方法要么不debug要么用js-hook掉吧。然后从堆栈进去找m,拼代码。
不好意思,后面我就不看了,实在浪费时间。
猿人学爬虫比赛第十一题:《app so文件协议破解》
地址: http://match.yuanrenxue.com/match/11
我不知道这题是让干什么的,先下载下来安装一下。
先把网断了看看,输入数据是否能返回结果,如果是本地生成的,要到源码找找答案。
直接把模拟器wifi断开之后,查询返回的是网络异常。那么就抓包看一看接口。
但是我用charles试了后,没有拦截到数据。该接口并没有走http协议,那么换工具,用HttpAnalyzerStdV7。
换了之后还是没数据,我感觉被坑了。
应该是之前比赛时从接口提交验证,现在赛后改成了本地生成,但是网络异常检测还是存在的,
那么需要从app本身入手了,准备反编译下查看源码。
简单测试了一下,没壳
那就把apk直接解压下,发现只有一个dex,挺好的,用 dex2jar 反编译dex成jar包
然后用jd-gui打开,在MainActivity找到代码。
这里是输入数字和提交答案部分。根据代码可知
query是输入数字获取查询值的方法,然后该接口有sign签名,sign根据输入的数字生成。
接着往下看了下,submit和上面的query一样
下面代码是根据response进行验证的部分。正确的时候是0,错误或者异常是-1。
system.loadLibrary():用来装载动态链接库
private native String getSign(long paramLong);
可以确定方法名 getSign(long)
正常情况是需要慢慢找,继续分析下源码。我们根据题目要求,直接找so文件就可以。
有两个nativa.so ,没关系是和cpu相关的,我这里直接把第一个拖到IDA中。
然后在IDA VIEW中全局搜字符串getsign,搜到了一处 0006CF4D 。
按x找到一处引用
点击JNI_Onload,转成伪代码之后,
就到这里了
其实当知道了在哪个so文件中,可以使用其他方式来获取sign值,比如xposed和unidbg。