BUU Re childRe 和 [SWPU2019]ReverseMe

发布时间 2023-07-15 23:51:13作者: zydt10

childRe

 
 
符号生成规则:
C++函数符号生成规则:
private: char * __thiscall R0Pxx::My_Aut0_PWN(unsigned char *)
得到?My_Aut0_PWN@ROPxx@@AAEPADPAE@Z
 
二叉树:
下面给出实操(如何利用这个对应关系):
 
以及列表下标的应用:
主要是index
a=list("1234567890-=!@#$%^&*()_+qwertyuiop[]QWERTYUIOP{}asdfghjkl;'ASDFG")
b=list("(_@4620!08!6_0*0442!@186%%0@3=66!!974*3234=&0^3&1@=&0908!6_0*&")
c=list("55565653255552225565565555243466334653663544426565555525555222")
flag=''
for i in range(62):
    flag+=chr(a.index(b[i])+a.index(c[i])*23)
print(flag)

 

 

[SWPU2019]ReverseMe

 
如果静态很难的话可以考虑用动调直接逆
主要还是这题的静态分析很难,有很多莫名其妙的函数进行了很多莫名其妙的操作,动态调试一下
汇编分析

 
ecx=[0x62, 0x66, 0x61, 0x64, 0x6E, 0x03, 0x01, 0x00, 0x08, 0x6E,
   0x72, 0x65, 0x77, 0x62, 0x66, 0x61, 0x64, 0x6E, 0x03, 0x01,
   0x00, 0x08, 0x6E, 0x72, 0x65, 0x77, 0x62, 0x66, 0x61, 0x64,
   0x6E, 0x03, 0x00]#转移的input与key异或的结果
edx=[0xE4, 0x6A, 0x5F, 0xAE, 0xF6, 0xD4, 0xAF, 0x19, 0xEA, 0x19, 
  0x19, 0xC3, 0x1D, 0xC3, 0x11, 0xD1, 0x0D, 0xFF, 0x34, 0x04, 
  0x7A, 0xF1, 0x15, 0x42, 0x26, 0x2D, 0x29, 0x76, 0xE7, 0x19, 
  0xBA, 0x2B,0x00]#某某又与(转移的input与key异或的结果)异或的结果
eax=[ 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,]#大数字码表
key="SWPU_2019_CTF"
flag=''
#大数字码表==某某又与(转移的input与key异或的结果)异或的结果
#则win
 
'''
先要求出某某
某某=edx^ecx
eax^某某=input与key异或的结果
结果^key=input(flag)
'''
for i in range(len(eax)):
    flag+=chr((edx[i]^ecx[i])^eax[i]^ord(key[i%len(key)]))
print(flag)

 

这题中我用到的分析的新的方法主要有: 汇编设标记行,打好注释备注 跳转IP与寄存器的值 来回切换
在关键数据,例如读入或者是某个运算后的存储结果的地方打硬件断点或者内存断点,看看下一刻是什么时候用到它