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