2017 陕西省网络安全大赛 The Marauders Map 150
混淆掉了一些函数名,耐心,耐心,耐心
Java层的混淆手动恢复一下即可

readSec.checkRegCode()函数两个参数分别是输入的注册码,还有一个通过另一个类来获取,具体是操作数据库,初步判断没有密码

这个值可以使用数据库查看工具来查看

那么接下来就是native层的计算了
native层混淆掉了各种系统函数,简单修复下参数类型,如下图所示
逐个函数分析,首先是sub_10F4()
依旧各种看不懂,不过最下面的if分支很眼熟,强行猜测这是GetStringUnicodeChars()
经常分析的应该是很容易看出来,如果看不出来,再次跟进去,比如第一个
第二个
依次处理

这个就可以看出来是GetStringUnicodeChars()函数了
明显的,上层函数识别的不完整,不过没关系,我们双击下个函数进去后,上层函数自然就会修复了,就像这样,由于前面修复了部分函数的命名,所以最后返回的函数名也修复了
从结构上来看,这个sub_1220()函数应该是关键的计算函数
分析一圈,就中间两个计算最重要,大概的意思就是把一个字节的数据拆成前后各4位,然后再各种计算,逆着写代码太费劲,直接遍历可见字符,不管那么多了,一个字节最大0xFF,强行遍历到0xFF
输出
刚开始发现怪怪的,因为输出的是flag{need your blessing}
后来发现表搞错了

暴力大法好
Last updated