srm-50(学汇编到自闭后做的水题 )
- 拿到exe文件先查壳
无壳 - 丢入IDA中
首先这里是winmain(),关于这个先普及一下知识
因此相关代码与DialogFunc相关
以上定义是我在做完此题后问的度娘,在做时并不清楚这些。
我们可以直接shift+F12查找字符串address进入DialogFunc中
进入后进行F5反编译后发现
我猜测第一个if应该是与E-Mail有关,随后在输入框中输入
因此密码应该与第二个if有关,写脚本得flag(此处编译器我是用的Dev C++5.11,经过我的测试,如果用VC++6.0或VC++2010这种写法会有问题,可能原因应该是VC编译器对全局变量有一些优化,导致变量地址不连续或改变)
#include<bits/stdc++.h>
using namespace std;
char v11[4]; // [esp+108h] [ebp-240h]
char v12; // [esp+10Ch] [ebp-23Ch]
char v13; // [esp+10Dh] [ebp-23Bh]
char v14; // [esp+10Eh] [ebp-23Ah]
char v15; // [esp+10Fh] [ebp-239h]
char v16; // [esp+110h] [ebp-238h]
char v17; // [esp+111h] [ebp-237h]
char v18; // [esp+112h] [ebp-236h]
char v19; // [esp+113h] [ebp-235h]
char v20; // [esp+114h] [ebp-234h]
char v21; // [esp+115h] [ebp-233h]
char v22; // [esp+116h] [ebp-232h]
char v23; // [esp+117h] [ebp-231h]
int main()
{
v11[0] = 'C';
v23 = 'X';
v11[1] = 'Z';
v22 = 155-'Z';
v11[2] = '9';
v21 = 155-'9';
v11[3] = 'd';
v20 = '7';
v12 = 'm';
v19 = 'G';
v13 = 'q';
v18 = 170-'q';
v14 = '4';
v17 = 'g';
v15 = 'c';
v16 = '8';
cout<<*(&v11)<<endl;
return 0;
}
flag即为
CZ9dmq4c8g9G7bAX