逆向工程 RE50 wp

此处附上下载链接RE50.exe


首先先打开它运行一下

这里写图片描述

然后再放到PEiD exeinfo(反正都看看就对了 = =)中看看

这里写图片描述

win 32位

这里写图片描述

C++编写

随便输了一下 发现并没有什么结果 (゚⊿゚)ツ

拖到IDA32里看看
这里写图片描述

F5反编译找伪代码(要是没了F5该怎么办啊 啧啧|・ω・`)
这里写图片描述

扫描二维码关注公众号,回复: 3207814 查看本文章

看到主函数中的if判断语句 如果条件满足 则执行wrong 所以要使条件不满足
我们继续往sub_401000中看
(一开始的时候去put里看了一下 哇 看得我眼花缭乱)

这里写图片描述

又到了非常无聊的分析代码的时刻(叹气

bool __thiscall sub_401000(char *this)
{
int v1; // eax
bool result; // al
char v3; // dl
char v4[48]; // [esp+0h] [ebp-40h] //v4 v5 v6是一个连续的数组
int v5; // [esp+30h] [ebp-10h]
int v6; // [esp+34h] [ebp-Ch]
char v7; // [esp+38h] [ebp-8h]
v1 = *this;
v5 = 33687816;
v6 = 151191814;
v7 = 0;
if ( v4[v1] != 2
 || v4[this[1]] != 8
 || v4[this[2]] != 9
 || v4[this[3]] != 3
 || v4[this[4]] != 9
 || (v3 = v4[this[7]], v4[this[5]] != v3)
 || v4[this[6]] != 9 )
{
 result = 0;
}
else
{
 result = v3 == 8;
}
return result;
}

这段代码中的If语句里面的语言是或 如果这些或都满足 那么就执行result=0 返回0值 则在上一屏中的代码中的If就是非0(非0为1 非1为0) 所以将会执行wrong

由此得出 若想执行上一屏else那句 就需要使它的值为真值 也就是要result==v3==8 (๑`꒳´๑)

于是我们通过分析可以知道

v4[v1] == 2
v4[this[1]] == 8
v4[this[2]] == 9
v4[this[3]] == 3
v4[this[4]] == 9
v4[this[7]] == v4[this[5]] == v3
v4[this[6]] == 9

v4[] ={8,9,2,2,6,1,3,9} //注意存储的顺序

由数组元素下标和数组元素值的对应关系可以推出this[]数组的值 即flag为
20767070或20161010或30767070或30161010等共16种

因此flag不唯一 (ꐦಠ ಠ)

猜你喜欢

转载自blog.csdn.net/Retrovich/article/details/82716280