DDCTF2019reverse1_final逆向教程

0x1,首先查壳:

DDCTF2019reverse1_final逆向教程

是个常见的压缩壳,用手动脱壳即可。

0x2,OD调试程序:

1,最重要的是跳到函数加密的位置,根据这个压缩壳的特点,知道前面是一直的循环,让你找不到程序入口的位置,这里只使用F4跳到鼠标位置就好:

一步步到向下到想要的位置

DDCTF2019reverse1_final逆向教程

 

这个位置是调用的位置,我们F7,进入看看;

2,在一步步走

DDCTF2019reverse1_final逆向教程

再次调用位置;

3,其实我们已经知道程序入口,手动脱壳

DDCTF2019reverse1_final逆向教程

 

然后放在IAD中;

4,DDCTF2019reverse1_final逆向教程

情况很明朗了,进入加密函数;

5, DDCTF2019reverse1_final逆向教程

进入加密 DDCTF2019reverse1_final逆向教程

看来是替换加密;

而下面的字符串应该是密码表;

6,我们知道加密后的密文在main函数中是DDCTF{reverseME},那么们可以来加密函数倒推,有这个密码表的地址减去一个常数,就好是,现在我们由密文反推即可;

data = [0x403052,0x403052,0x403053,0x403042,0x403050,0x40301B,0x403024,0x403031,0x403020,0x403031,0x403024,0x403023,0x403031,0x403049,0x403051,0x403019]
flag = ""
for x in range(len(data)):
    flag+=chr(data[x]-0x402ff8)
print "DDCTF{"+flag+"}"