小白学逆向7.19笔记
BUUCTF题目
新年快乐
下载之后是一个.exe文件,运行

要求输入什么东西
使用万能去壳去壳

去壳后拖入IDA,F5查看伪代码
int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax char v4; // [esp+12h] [ebp-3Ah] __int16 v5; // [esp+20h] [ebp-2Ch] __int16 v6; // [esp+22h] [ebp-2Ah] sub_401910(); strcpy(&v4, "HappyNewYear!"); v5 = 0; memset(&v6, 0, 0x1Eu); printf("please input the true flag:"); scanf("%s", &v5); if ( !strncmp((const char *)&v5, &v4, strlen(&v4)) ) result = puts("this is true flag!"); else result = puts("wrong!"); return result; }
得到falg为HappyNewYear!
内涵的软件
运行.exe文件,得到

查壳发现没有加壳,为32位文件,用IDA打开

发现_main跳到了_main_0函数

观察_main_0,发现字符串DBAPP{49d3c93df25caad81232130f3d2ebfad}
试一试,发现flag就是flag{49d3c93df25caad81232130f3d2ebfad}。
[BJDCTF 2nd]guessgame
运行程序,得到
对文件查壳,发现未加壳,放入IDA。shift+f12查找字符串,则得到falgBJD{S1mple_ReV3r5e_W1th_0D_0r_IDA}

helloword
下载得到apk文件

用apl改之理打开,很容易得到flag{7631a988259a00816deda84afb29430a}
xor
查壳,什么信息都没有

直接放入IDA64,f5反编译得到伪代码
int __cdecl main(int argc, const char **argv, const char **envp) { char *v3; // rsi int result; // eax signed int i; // [rsp+2Ch] [rbp-124h] char v6[264]; // [rsp+40h] [rbp-110h] __int64 v7; // [rsp+148h] [rbp-8h] memset(v6, 0, 0x100uLL); v3 = (char *)256; printf("Input your flag:\n", 0LL); get_line(v6, 0x100u); if ( strlen(v6) != 33 ) //flag为33位 goto LABEL_12; for ( i = 1; i < 33; ++i ) v6[i] ^= v6[i - 1]; //输入的字符串从第二位开始,后一位与前一位异或 v3 = global; if ( !strncmp(v6, global, 0x21uLL) ) //计算完的值和在global储存放的字符串进行比较 printf("Success", v3); else LABEL_12: printf("Failed", v3); result = __stack_chk_guard; if ( __stack_chk_guard == v7 ) result = 0; return result; }
因此,在global的字符串是执行过上述算法的字符串,所以将global反过来处理就得到了falg
则flag{QianQiuWanDai_YiTongJiangHu}

浙公网安备 33010602011771号