normal26(UnDecorateSymbolName 函数学习)

无壳

查看main函数

密码长度31

丢串数据看看

跑一遍之后发现是输入换序之后存放到v5的空间里

输入一个顺序串找出被打乱的顺序

下面的outputstring

有个匹配,写个脚本

1
2
3
4
5
6
7
8
9
10
11
s = '1234567890-=!@#$%^&*()_+qwertyuiop[]QWERTYUIOP{}asdfghjkl;'
s1 = '(_@4620!08!6_0*0442!@186%%0@3=66!!974*3234=&0^3&1@=&0908!6_0*&'
s2= '55565653255552225565565555243466334653663544426565555525555222'
output= ""
for i in range(62):
for j in range(32,127):
a = j % 23
b = int(j / 23)
if(s[a] == s1[i]and s[b] == s2[i]):
output += chr(j)
print (output)

private: char * __thiscall R0Pxx::My_Aut0_PWN(unsigned char *)

得出结果

然后解一下这一串字符

应该是把各种指令整理成修饰字符

UnDecorateSymbolName function (dbghelp.h) - Win32 apps |微软文档 (microsoft.com)

(2条消息) c, c++函数名编译符号修饰符说明_IT超人的博客-CSDN博客_c++ 编译符号

一开始的函数修饰是以?开始的

所以先是?My_Aut0_PWN

thiscall类型插入@

?My_Aut0_PWN@R0Pxx

然后接他的私有标识

?My_Aut0_PWN@R0Pxx@@AAE

然后是引数类型,分别为char和 unsignedchar

?My_Aut0_PWN@R0Pxx@@AAEPADPAE

然后把顺序换回来就行

Z0@tRAEyuP@xAAA?M_A0_WNPx@@EPDP