Reverse:动态调试篇

最近在刷re题,发现一道新的逆向技巧,就是利用ida进行动态调试来看程序整题运行方式,这个方法主要是针对那些代码量庞大的工程,所以这里来记录下,看题吧

1.[SWPU2019]ReverseMe ##:

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int v3; // eax
  int v4; // eax
  int v6; // [esp+0h] [ebp-C4h]
  char v7[16]; // [esp+84h] [ebp-40h] BYREF

  v3 = sub_402DA0();
  sub_403050(v3);
  sub_4037B0(v6);
  strcpy(v7, "SWPU_2019_CTF");
  v4 = sub_402DA0();
  sub_403050(v4);
  sub_40ADBE("pause");
  return 0;
}

主程序里的每个子函数代码量非常大根本摸不清它在干了什么,这时我们可以动态调试一下,这里算是对动态调试入个门吧

![4QS@U{(S}94[)6]2CAOYL_M.png][1]

这里是一个对大小的检测,call sub_eb37b0应该是一个输入函数,然后cmp一下输入的内容是不是为0x20,如果是0x20就执行 jz short loc_EB28EE,这里我们输入32个2
ACMI@C~6_HX{FABKT}`HY@G.png

这里应该是复制字符串的一个操作
![CV8ZCYEC86$K]YCRJ7H`CX2.png][3]

这里应该是个我们输入的一个字符串与SWPU_2019_CTF进行异或
异或得到:61 65 62 67 6D 00 02 03 0B 6D 71 66 74

Z$Z<code>BM@SQPJI</code>G52B_%(ODM.png

这里是我们在一个函数里又进行了一次异或运算,把我们之前异或的结果拿过来又和这里面ecx固定的值进行了一次异或

key:[0x86,0x0C,0x3E,0xCA,0x98,0xD7,0xAE,0x19,
   0xE2,0x77,0x6B,0xA6,0x6A,0xA1,0x77,0xB0,
   0x69,0x91,0x37,0x05,0x7A,0xF9,0x7B,0x30,
   0x43,0x5A,0x4B,0x10,0x86,0x7D,0xD4,0x28]

![8%9)IJ_(593K{F]_1ONFTQN.png][4]

这里又将上面异或的结果,拿来又一次的异或,这里的key

key:B3 37 0F F8 BC BC AE 5D BA 5A 4D 86 44 97 62 D3 4F BA 24 16 0B 9F 72 1A 65 68 6D 26 BA 6B C8 67

拿就正常了,正常的逻辑出来了,第一输入的字符串先于已有的字符串进行异或,得出结果再与第一个key进行异或,得出结果再和第二个key进行异或,我们写脚本直接跟它反过来即可,先让第二个key和第一个key进行异或,然后再与原有的字符串进行异或,得出flag

exp:

key2=[0xB3,0x37,0x0F,0xF8,0xBC,0xBC,0xAE,0x5D,
        0xBA,0x5A,0x4D,0x86,0x44,0x97,0x62,0xD3,
        0x4F,0xBA,0x24,0x16,0x0B,0x9F,0x72,0x1A,
        0x65,0x68,0x6D,0x26,0xBA,0x6B,0xC8,0x67]

str="SWPU_2019_CTF"

key1=[0x86,0x0C,0x3E,0xCA,0x98,0xD7,0xAE,0x19,
   0xE2,0x77,0x6B,0xA6,0x6A,0xA1,0x77,0xB0,
   0x69,0x91,0x37,0x05,0x7A,0xF9,0x7B,0x30,
   0x43,0x5A,0x4B,0x10,0x86,0x7D,0xD4,0x28]

re=[0]*32

for i in range(32):
    re[i]=key2[i]^key1[i]

flag=""
for i in range(len(str)):
    #print (str[i])
    
    print (str[i%len(str)])
for i in range(32):
    flag+=chr(re[i]^ord(str[i%len(str)]))

print(flag)

总结:此题学到动态调试去做逆向题,感觉到了汇编的用处,这道题适合动态调试入门

本文链接:

http://azly.top/index.php/archives/14/
1 + 2 =
快来做第一个评论的人吧~