【reverse】2021 极客大挑战(部分)
1、调试
0x1
什么?得安装linux虚拟机?像我这种直接用ubuntu系统的根本不虚!
0x2
尝试直接运行,未果
拖入ida中分析,先看main
上来就比较字符串,然后返回,v4是栈里的变量,初始化为0,必然不等于后面的字符串
看看汇编,发现了端倪
如果不相等就去loc_14A0这个函数,发现这个函数直接退出了,没啥用
我们看看如果想等跳转的函数loc_14551。怎么说都比上面退出的函数正常吧。
0x3
到这里我们想直接调用到loc_1455这个函数其实也可以,改汇编的jnz为jz就可以了
保存为ts1,退出,运行,一气呵成!
get flag
2、Re1
0x1
逆向人必备技能了属于是
0x2
拖入ida中分析
int __cdecl main(int argc, const char **argv, const char **envp)
{
char v4[256]; // [rsp+20h] [rbp-60h] BYREF
char Str[40]; // [rsp+120h] [rbp+A0h] BYREF
int v6; // [rsp+148h] [rbp+C8h]
char v7; // [rsp+14Ch] [rbp+CCh]
char v8[58]; // [rsp+150h] [rbp+D0h]
char v9[2]; // [rsp+18Ah] [rbp+10Ah] BYREF
int v10; // [rsp+198h] [rbp+118h]
int i; // [rsp+19Ch] [rbp+11Ch]
_main(argc, argv, envp);
v8[0] = 21;
v8[1] = 113;
v8[2] = 44;
v8[3] = 4;
v8[4] = 37;
v8[5] = 113;
v8[6] = 40;
v8[7] = 16;
v8[8] = 21;
v8[9] = 44;
v8[10] = 121;
v8[11] = 40;
v8[12] = 34;
v8[13] = 45;
v8[14] = 18;
v8[15] = 38;
v8[16] = 25;
v8[17] = 45;
v8[18] = 6;
v8