首页
社区
课程
招聘
[原创]看雪2018国庆CTF 叹息之墙
发表于: 2018-10-7 14:09 7411

[原创]看雪2018国庆CTF 叹息之墙

2018-10-7 14:09
7411

看雪大佬太强了,菜鸡误入结果一个国庆都飞掉了。。。

题目之所以叫叹息之墙似乎是因为这个题目在IDA里面看起来是这样的:

太吓人了。。。

首先执行程序:

输入数字,然后程序内部会对数字进行运算处理,从而检查输入是否正确。不过其中最坑的地方在于不超过9个数字。这样似乎输入的限制就有、、小了。。。

逆向第一步自然是分析逻辑。。。但是这个程序这么大,实在是难以分析的样子。不过调试了几下之后发现了几个规律:

对于第三点,我们可以看到,程序中大部分的混淆逻辑都是这个样子的

还有一种是使用add/sub的混淆

这两种运算本质上并没有做什么有意义的事情,但是如果出现strlen,__aullrem这类函数的话,很有可能就是一个重要的内容,于是这边用idapython标记了一下当前的程序中用到这些函数的地方:

顺着这几个地方,找到了输入进行处理的逻辑

这里出现了第一个全局变量GlobalIndex,这个变量会将通过了程序验证的数字存放在这个整数数组中。r顺着这个变量,找到了第二个全局变量

吐槽一下,这个变量其实有好几个地方都有引用,但是似乎不是所有的地方都执行了一遍。。。
这个TargetMagic是一个存放了351个整数的变量。观察上面的这段逻辑,我做出一个猜测:这个地方可能在操作一个64bit的数字,因为这个地方用了adc汇编(好像没有啥道理?只是直觉)
整体的逻辑大概是这样的:

大概就猜测到这个地方,好像就没有思路了。。。于是我们检查一下有没有什么可疑的字符串:

找到这个地方又有了新的线索:这一段显然是用于判断输入逻辑的,不过我们发现跟踪进去并不方便,因为这个程序本身被切分成了跳转模块和执行模块,这个跳转模块和执行模块之间的关系还特别复杂,存在很多用于混淆视听的需要跳转模块。。所以我这里决定用IDAPython再次辅助检查程序。通过使用idapython找到当前模块中的跳转和入口的对应关系,然后进行程序流的逆向追踪,然后大致就写了一个忙放辅助的脚本

emmmm..里面也有一些变量命名有点奇怪。。不过最后还是成功的找到了几个关键的调试逻辑

通过脚本分析可以发现,这个地方的逻辑会最终影响是否跳转到“成功”逻辑上,因此这个地方显然是一个关键的函数逻辑,其中这个SRCDST分别对应字符串eux2nak4。不过这个地方其本身是作为一个整数存在的。这段逻辑翻译一下的话就是:

于是现在的关键变成了这个GroupMul函数。我们跟踪进去,会发现两个关键的比较逻辑:

这个关键逻辑处,会将当前我们传入的sum处理,之后会处理SRC变量,翻译一下就是:

然后是第二段

这一段则是处理关键的返回值的。

将上面两段汇编合并一下,就能够得到一个这样的函数:

调试中发现,第二段判断逻辑似乎不是每一次都会进入的,于是必然是有一个判断的逻辑在。顺着跳转的魔数返回寻找,能够找到这样的两段:

这两段代码正好决定了此时的程序会不会进入第二段影响返回值(这里设为A)的判断逻辑。通过调试发现,这里是在检查sum的最低位是否为1。那么此时整个判断逻辑就能够重现了:

至此,整个程序逻辑大概为:

有了整体逻辑,那么此时我们的目标就很明确了:

如果仔细思考上述逻辑的话,会发现其实这个运算过程就是SRC的sum次方模0xFFA1CF8F,于是还能进一步化简为:

这个时候,SRC的运算相当于是一个群

因此我们第一个目标就很明确了

于是尝试爆破:

这里考虑到,TargetMagic中的数字最大也为0xfeb053fc,若9次都取到这个数字也不会超过0x900000000,所以这里爆破次数仅为
[0,0x900000000]
然后能够得到这几个数字:

不过之后就很麻烦了,如果要从这么多的数字里面找到几个数字,相加正好又是我们目标值中的其中一个,实在是太复杂了。瞎摆弄的时候,突然发现如下规律

无意中对数组进行了排序(原先目的忘记了),突然发现第一个数字是后几个数字的倍数,于是想到

会不会是整个数组都是由这个数字生成的呢?

于是试着找了一下,总共有270个数字是由其生成的。发现这个思路可行,于是写了个脚本,找到了其中所有的生成元:

于是这个题目突然之间转变成了如下的形式

将这几个数字设为变量a,b,c,d....然后进行一个多项式求解,等式的右边就是之前爆破出来的幂次。哪一个幂次能找到合适的解,就利用这个解反推出我们选取的TargetMagic

于是这里使用Z3进行计算:

之后能够发现,在幂次为0x453995a4d的时候,能够得到一个解:

我们找到其中每一个下标,最后翻出其位置并且排序(题目要求),就能够得到最终的答案.
17x27x60x97x133x161x243x292x309X
完结撒花!

 

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 2
支持
分享
最新回复 (2)
雪    币: 2095
活跃值: (344)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢大佬,大佬解释得很清晰
2018-10-9 23:11
0
雪    币: 4825
活跃值: (3549)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
3
小弟来晚了,大佬受小弟一拜
2021-5-20 21:00
0
游客
登录 | 注册 方可回帖
返回
//