-
-
[原创]无线安全挑战赛:第三题
-
发表于:
2015-1-25 21:19
5128
-
拿到apk照旧反编译下,这时候会看到就一个文件,应该是加壳了,解压目录看一下,在lib下面有三个so,其中libmobisecy.so这个是一个压缩的dex,解压反编译看下,里面一堆的RuntimeException。再看下so吧,ida加载一看,好家伙,那么多方法,不忍直视。那就只能内存dump了,请神器DjDroid,这玩意还是第一次玩,还好之前分析过xposed原理写过一些xposed插件,赶紧clone一下代码运行一下吧。
直接运行,安装说明发了一个广播,程序就退出了,哇擦!什么情况,DjDroid是基于xposed框架的,理论来说没有通用的办法去反的才对,难道是针对DjDroid做了对抗,既然这样那就换个名字吧,然后修改日志格式,再修改广播格式,边改边调试,折腾半天还是不行,分析一下DjDroid的广播才发现是DjDroid hook了application的oncreate方法,而这个应用的oncreate方法刚好是native!好吧,那就改一下吧,改成hook attach就可以了,顺利dump出dex,这个时候的dex没法用jd来看,需要在dn的smail文件中把testdex2jarcrash除掉再回编译才行,这样就能看到完整的dex了。
上张目录树:
分析一下流程,主页按钮点击,开启一个定时任务,在timer里面执行验证,然后把结果通过hand传回到主线程。
问题来了,结果有0,1,2,3哪个才是正确的路径呢?
还是要看主页的TextView显示的字符串是什么才行,可是代码里面只有资源ID怎么看啊,再次感谢万能xposed的,修改DjDroid,增加一个广播命令,通过当前的进程的context获取字符串打印出来。
分析发现0分支才是验证通过的路径,那么反推解密的路径吧。
解密的部分一堆的干扰,sha1、crc32、aes、base64一堆,出题人一定是故意的!尤其是那个aes,运行出的结果还是good……整个人都不好了。
直接看真正验证的部分吧:
哇擦!这算是一个二原方程吗?根据条件写个小循环,直接可以得到前面两个字符就是s5,继续看
我去,这是什么,自定义注解!好吧,这里你也藏东西,去smail找一个找找吧,第一个是7e,第二个是1p,都出来了?s57e1p赶紧对着莫尔斯码的map试一试,不对!?为什么?难道后面两个注解出问题了,好吧,好吧,再次使用xposed反射调用一下,让他自己吐出来
对的啊,没有错啊,再看一下莫尔斯码的转换函数,哇擦使用空格隔开的啊,那你为什么要有一个sos的例子不加空格来误导群众啊!
哎!还是太年轻!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)