首页
社区
课程
招聘
[原创]2015移动安全挑战赛解题思路
发表于: 2015-1-25 20:34 2135

[原创]2015移动安全挑战赛解题思路

2015-1-25 20:34
2135

[*]第一题
利用dex2jar直接反汇编classes.dex。分析得到的java代码可知,此题的逻辑是:
将用户输入的字符的ASCII码作为下标,去内置的长字符串中取出相应的字符,组成字符串后与内置的目标字符串比较。

那么解题方法就是逆之而行,获取目标字符串中每个字符在长字符串中的位置,找到其对应的字符即可。为581026。

[*]第二题
这题开始采用ndk开发,主要实现代码已经不在Java代码而是在.so文件里了。
用ida打开libcrackme.so文件,分析Java_com_yaotong_crackme_MainActivity_securityCheck函数,发现检测的逻辑其实就在这里,而目标字符串就在静态地址*0x628c处,内容是“wojiushidaan”,尝试将其作为答案输入发现不对,所以猜测是在运行时程序动态改了内存的值,去JNI_Onload函数看了下确实调了一系列的函数。
懒得具体分析函数内容了直接上gdb,break在Java_com_yaotong_crackme_MainActivity_securityCheck的检测循环之前,查一下/proc目录下.so文件加载的地址,加上0x628c的位移,打出对应的值,“aiyou,bucuoo”就是答案。

[*]第三题
dex2jar获得的java代码没用;尝试了gdb attach进程,崩溃,应该是做了反ptrace。
使用了zjDroid进行了脱壳,并将dex文件dump出来进行分析。

先使用dex2jar尝试反汇编,显示成功,但查看java代码时会发现核心的代码没有反汇编出来,没有办法,只能利用smali,直接看汇编。

从crackme.a3.Main入手,查看其onCreate函数,由于程序对于输入内容的检测一定发生在点击按钮之后,所以特别关注Button的setOnClickListener函数。
可知混淆后的d类其实就是OnClickListener类,查看其OnClick函数,可知其主要功能是在点击按钮后获取EditText的内容,并将其传给handler a类。
在a.a()中,其设置了一个Timer,定时执行b。
查看b.run(),其中调用了e.a()方法,这个方法主要是做转换:将输入的电码转化成字母。查看代码逻辑,可知需要调整输入,使函数不执行到sendEmptyMessage方法。
此处有较多的陷阱,比较浅显的陷阱是”sos“常量,若输入”sos“对应的电码将会执行到sendEmptyMessage方法。
藏得比较深的陷阱是使用AES加密的一段字符串,编写等价Java代码解出后获得”good“,可惜这也只是烟雾弹。
真正的检测条件是:
        inputString.subString(0,2).hashCode()=0xe22 且 前两位的ASCII码相加为0xa8
设前两位为xy,则其hashCode为
        31x+y=0xe22
再加上
        x+y=0xa8
可解得前两位为”s5“

之后分别去取了e和f类的annotation,查看代码可知是7e,1p。

所以答案字符串即为”s57e1p“,之后再查看e类中的对应关系将其对应的电码输入即可。答案是”... _____ ____. . ..___ .__.“。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//