-
-
[原创] 第一题:神秘来信
-
发表于: 2019-6-21 11:50 2154
-
使用IDA查看main函数,F5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 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直播授课
赞赏
他的文章
- [原创] 第九题:绝地逃生 3090
- [原创] 第二题:沉睡的敦煌 2966
- [原创] 第三题:金字塔的诅咒 3104
- [原创] 第四题:达芬奇密码 3862
- [原创] 第六题:消失的岛屿 3036
赞赏
雪币:
留言: