-
-
[原创] 第一题:神秘来信
-
发表于: 2019-6-21 11:50 2024
-
使用IDA查看main函数,F5
int __cdecl main(int argc, const char **argv, const char **envp) { int v3; // esi unsigned int v4; // kr00_4 int result; // eax unsigned int v6; // ecx unsigned __int8 v9; // [esp+10h] [ebp-3Ch] unsigned __int8 v10; // [esp+11h] [ebp-3Bh] unsigned __int8 v11; // [esp+12h] [ebp-3Ah] char v12; // [esp+13h] [ebp-39h] char v13; // [esp+14h] [ebp-38h] char v14; // [esp+15h] [ebp-37h] CPPEH_RECORD ms_exc; // [esp+34h] [ebp-18h] v3 = 0; sub_401410(&unk_41C6F8); sub_4013D0((const char *)&unk_41C708, &v9); v4 = strlen((const char *)&v9); if ( v4 >= 7 || v14 != 51 || v13 != 53 || v12 != 51 || v11 + v10 + v9 != 149 ) { sub_401410("error\n"); result = 0; } else { v6 = 0; if ( v4 ) { do v3 = *(&v9 + v6++) + 16 * v3 - 48; while ( v6 < v4 ); } ms_exc.registration.TryLevel = 0; result = sub_401410("error!\n"); } return result; }
这个反编译结果有点问题,不过仍然可以看出程序接受6字符的输入。且后3字符为353。
由于v11 + v10 + v9 == 149,猜想6字符均为数字。于是打算编程暴力破解。需要暴力尝试21次。
尝试运行发现若v11 + v10 + v9 == 149会在输出后进入死循环。于是patch修改去掉死循环,让程序正常退出。
暴力破解最终获得注册码401353
反思以上猜想,若前3个字符不全为数字,由于可打印字符ascii码大于等于32,需要暴力枚举次数1485次。这个数量的暴力破解也可以接受。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
- [原创] 第九题:绝地逃生 2934
- [原创] 第二题:沉睡的敦煌 2809
- [原创] 第三题:金字塔的诅咒 2904
- [原创] 第四题:达芬奇密码 3684
- [原创] 第六题:消失的岛屿 2883
看原图
赞赏
雪币:
留言: