一个CTFCM的追码
本帖最后由 ollydebug 于 2015-7-4 22:25 编辑以前都是爆破,这次弄个追码。由于本人菜鸟,有错误还请大家多多包涵。废话少说,这个是CM截图。
丢到OD里,ESP定律脱壳。字符串搜索定位到关键处。输入ollydebug,F8到这里后,发现输入的Flag长度必须小于30大于0。
继续向下F8,其中还有一些花指令,没有大碍,只要不用IDAF5的话。到这里发现循环检测Flag开头是否为TSCTF{,如图。
所以Flag改为TSCTF{ollydebug,继续F8。结果发现有判断右括号在不在指定位置,如图。
所以Flag再次调整为TSCTF{ollydebugollydebugolly},然后继续向下跟踪。这时发现这段反汇编代码反复检测在指定位置有没有下划线。而下划线明显是分割程序呀。
于是改成TSCTF{ol_ydebu_ol_yde_ugolly},然后又是跟踪,到这里发现他获取第一段。
然后计算MD5。
然后与真码的MD5作比较。
真码的MD5为dcfed125d6507dc8c473c49fd8ad891d,在CMD5里查到了,是YQ。
所以应改为TSCTF{YQ_ydebu_ol_yde_ugolly},继续向下跟。到了这里,发现一堆常量赋值。
这段数据现在看起来没什么用,但其实非常重要,一会再说。下面反汇编代码显示了第二段内容。
继续向下跟,这两个call分别弄出了第一段和第二段的MD5。
然后在这个call里,进行关键运算。
F7进去,F8跟到这里,发现先取两组MD5对应的字符,一个一个取,假如两组MD5是12345,67890,那么取的就是1和6,2和7,以此类推。然后相减,然后与刚才那组数据进行对比(早知这样直接下硬件访问断点了{:1_925:})。
这样我们可以你退到正确内容的MD5,为cda99cf90480d165fdd7119d76ce6aa6,在CMD5里查找到了,是w4nts。
那我们吧Flag改为TSCTF{YQ_w4nts_ol_yde_ugolly},然后继续向下跟。然后在这里又以相同的形式出现了第四段数据。
然后又push进去第四段数据进行运算。
跟进这个call里,发现了base64算法。
是用来计算计算第四段内容的base64码,也是通过push。
然后就是对比啦。
其实对比的base64码在前面就能看到了:MzR0。
然后逆运算得到正确数据:34t。
所以将Flag再次改为TSCTF{YQ_w4nts_ol_34t_ugolly},然后又是无脑的跟踪,来到了这个地方。
先进去第一个call,然后发现他是拿第三段内容进行xor循环解密xor文件,然后通过第二个call放出BMP文件,因为BMP文件的开头为BM,所以第三段的内容为T0。所以将Flag改为TSCTF{YQ_w4nts_T0_34t_ugolly}。然后咱们来看看弄出的BMP文件。
这样就知道了第五段正确内容:LTlt17。那么正确Flag为:TSCTF{YQ_w4nts_T0_34t_LTlt17}。咱们可以再往后F8,就可以发现它是计算整个Flag的MD5然后在和真正Flag的MD5作比较。
真正Flag的MD5为:f8c1c3fe8421451965fc3487ed2366e8,但是我们在CMD5是解不开的。
所以我们输入刚才得到的正确Flag,得到:You shall get the flag!
另外告诉大家这里是正确位置。
好了,这个CM也就分析完了。
为啥没人回复 感谢分享,学习了,楼主顺便把这个CM也放出吧 这个在CM区好像看过,记得XOR那一步的时候就心情没分析下去了。。。 http://www.52pojie.cn/thread-369576-1-1.html
@ollydebug 帮你找了下,好像这个cm是这个朋友写的,也有分析了 蚯蚓翔龙 发表于 2015-7-5 09:10
http://www.52pojie.cn/thread-369576-1-1.html
@ollydebug 帮你找了下,好像这个cm是这个朋友写的,也有 ...
感觉分析的没我好,主要图太少了 http://www.52pojie.cn/thread-369576-1-1.html 支持一下,感谢分享。 不知道是什么意思啊我也是哎
页:
[1]