参加了集团公司的网络攻防大赛后,有道逆向里面的jungle.exe这个题,很有意思。于是想挑战一下。
首先查壳,丢到exeinfope里面一看,发现是asp的壳。
于是用手头的asp脱壳工具尝试脱壳,发现都不行,不是不支持就是报错!没办法,只能老实手工脱壳了。
根据ESP定律+IAT修复+重定向表修复后,脱壳的程序可以正常运行。
用OD载入后,开始单步跟踪
到用户输入界面,我随便输入了个字符串:111111111(9个1)单步跟入到下图,发现了flag字样
这个应该是flag的头,于是继续跟进,发现确实在核对输入数据与flag{比较,这块就过不去了
于是果断的从来,输入数据为 flag{111111111,来到了下图的地方,在0x16的位置比较0x7D 也就是'}'符号
由于C语言的字符串下标是从0开始的,也就是字符串第23个字符处必须是}
于是构造字符串:flag{11111111111111111} 继续跟进,接下来是在0x7、0xc、0x11处核对字符 '-' (即:0x2D)
于是字符串就变成了flag{11-1111-1111-1111},继续跟进,发现了一个字符串:01E3421C=dump_SCY.01E3421C (ASCII "c7218260ef2b966ab0454e07c55cf4e9")
感觉像是MD5的字符串,于是用python解了一下,得到: oh,结之前的flag应该就是flag{oh-1111-1111-1111}
再次输入后,继续跟进发现过去了,开始进行第二段的比较得到了下图的错误:
于是反复跟比较算法也没有找到任何有效的数据,结合本题的提示是md5段字节爆破,估计是这块需要进行爆破处理了。
于是继续python大法,得到字符串:flag{oh-aa30-1111-1111}
继续输入后,单步跟进,此时发现一个字符串:堆栈地址=001DFC30, (ASCII "YTkxYQ==") eax=786B5459
看起来像B64编码,于是尝试解码,得到第三组的flag值:a91a 。
想起之前用od也看过字符串,于是找到第四组的字符串:NGZicA== ,解码为:4fbp
那么最终的flag就是:flag{oh-aa30-a91a-4fbp} 输入后验证: