无壳,32位
先进入ida,可以看到start函数,重要的就是4010F0()和if判断里的401050()
先进入4010F0
其中的一个函数,表示的是获取字符串长度(遇到null字符就返回i)
后面就是将字符写入byte_403078这个数组
接下来看401050(),可以看到获取长度后,执行了一个401000,然后让数组从末尾开始和v4异或并存入目标数组,然后再让这一个字符和前一个字符异或,都存入目标数组,最后进行字符串相符判断。
我们来看一下这个401000,直接看函数太看明白是什么,直接看汇编
xor ax,dx就是将这个eax的值后16位都变成0
rol eax,4将eax的值循环左移4位
shr ax,1将ax算数右移一位(在二进制中这个操作就是除以2),保留符号
所以ax中的值变成了0000 0000 0000 0100 (4)
所以这个函数的返回值就是4
然后就可以写EXP了
text = [0x0D, 0x26, 0x49, 0x45, 0x2A, 0x17, 0x78, 0x44, 0x2B, 0x6C, 0x5D, 0x5E, 0x45, 0x12, 0x2F, 0x17, 0x2B, 0x44,
0x6F, 0x6E, 0x56, 0x9, 0x5F, 0x45, 0x47, 0x73, 0x26, 0xA, 0xD, 0x13, 0x17, 0x48, 0x42, 0x1, 0x40, 0x4D, 0xC,
0x2, 0x69][::-1]
flag = ''
v4 = 0x4
for i in range(len(text)):
flag += chr(text[i] ^ v4)
v4 = ord(flag[i])
print('flag{'+flag[::-1]+'}')
得到结果flag{[email protected]}
标签:0000,text,IgniteMe,FlareOn4,flag,v4,0x45,ax From: https://www.cnblogs.com/yee-l/p/18304682