二进制炸弹bomb 计算机组成原理作业实战
分析
https://blog.csdn.net/CXY_YZ/article/details/115585852
反汇编:
点击查看代码
int __cdecl phase_2(char *s) { int i; // ebx int result; // eax int v3[6]; // [esp+10h] [ebp-18h] BYREF read_six_numbers(s, (int)v3); if ( v3[0] != 1 ) explode_bomb(); for ( i = 1; i <= 5; ++i ) { result = v3[i - 1] * (i + 1); if ( v3[i] != result ) explode_bomb(); } return result; } int __cdecl phase_3(char *s) { int result; // eax char v2; // bl int v3; // [esp+Ch] [ebp-Ch] BYREF char v4; // [esp+13h] [ebp-5h] BYREF int v5; // [esp+14h] [ebp-4h] BYREF if ( sscanf(s, "%d %c %d", &v3, &v4, &v5) <= 2 ) explode_bomb(); result = v3; switch ( v3 ) { case 0: v2 = 113; if ( v5 != 777 ) explode_bomb(); return result; case 1: v2 = 98; if ( v5 != 214 ) explode_bomb(); return result; case 2: v2 = 98; if ( v5 != 755 ) explode_bomb(); return result; case 3: v2 = 107; if ( v5 != 251 ) explode_bomb(); return result; case 4: v2 = 111; if ( v5 != 160 ) explode_bomb(); return result; case 5: v2 = 116; if ( v5 != 458 ) explode_bomb(); return result; case 6: v2 = 118; if ( v5 != 780 ) explode_bomb(); return result; case 7: v2 = 98; if ( v5 != 524 ) explode_bomb(); return result; default: explode_bomb(); } if ( v2 != v4 ) explode_bomb(); return result; } int __cdecl func4(int a1) { int v1; // esi if ( a1 <= 1 ) return 1; v1 = func4(a1 - 1); return v1 + func4(a1 - 2); } int __cdecl phase_4(char *s) { int result; // eax int v2; // [esp+14h] [ebp-4h] BYREF if ( sscanf(s, "%d", &v2) != 1 || v2 <= 0 ) explode_bomb(); result = func4(v2); if ( result != 55 ) explode_bomb(); return result; } int __cdecl phase_5(int a1) { int i; // edx int result; // eax char v3[8]; // [esp+10h] [ebp-8h] BYREF if ( string_length(a1) != 6 ) explode_bomb(); for ( i = 0; i <= 5; ++i ) v3[i] = array_123[*(_BYTE *)(i + a1) & 0xF]; v3[6] = 0; result = strings_not_equal(v3, "giants"); if ( result ) explode_bomb(); return result; } int __cdecl phase_5(_BYTE *a1) { int v1; // ecx int i; // edx int result; // eax int v4; // ecx char v5[8]; // [esp+10h] [ebp-8h] BYREF if ( string_length(a1) != 6 ) explode_bomb(v1); for ( i = 0; i <= 5; ++i ) v5[i] = array_123[a1[i] & 0xF]; v5[6] = 0; result = strings_not_equal(v5, "giants"); if ( result ) explode_bomb(v4); return result; } int __cdecl phase_6(char *s) { int v1; // ecx int i; // edi int j; // ebx int k; // edi _DWORD *v5; // esi int m; // ebx int v7; // esi int n; // edi int v9; // eax int v10; // esi int ii; // edi int result; // eax int v13; // [esp+24h] [ebp-34h] int v14[6]; // [esp+28h] [ebp-30h] int v15[6]; // [esp+40h] [ebp-18h] BYREF read_six_numbers(s, (int)v15); for ( i = 0; i <= 5; ++i ) { if ( (unsigned int)(v15[i] - 1) > 5 ) explode_bomb(v1); for ( j = i + 1; j <= 5; ++j ) { if ( v15[i] == v15[j] ) explode_bomb(v1); } } for ( k = 0; k <= 5; ++k ) { v5 = &node1; for ( m = 1; m < v15[k]; ++m ) v5 = (_DWORD *)v5[2]; v14[k] = (int)v5; } v7 = v14[0]; v13 = v14[0]; for ( n = 1; n <= 5; ++n ) { v9 = v14[n]; *(_DWORD *)(v7 + 8) = v9; v7 = v9; } *(_DWORD *)(v9 + 8) = 0; v10 = v13; for ( ii = 0; ii <= 4; ++ii ) { result = *(_DWORD *)v10; if ( *(_DWORD *)v10 < **(_DWORD **)(v10 + 8) ) explode_bomb(v15); v10 = *(_DWORD *)(v10 + 8); } return result; } void phase_defused() { char v0; // [esp+14h] [ebp-54h] BYREF char v1[80]; // [esp+18h] [ebp-50h] BYREF if ( num_input_strings == 6 ) { if ( sscanf(s, "%d %s", &v0, v1) == 2 && !strings_not_equal(v1, "austinpowers") ) { printf("Curses, you've found the secret phase!\n"); printf("But finding it and solving it are quite different...\n"); secret_phase(); } printf("Congratulations! You've defused the bomb!\n"); } } int __cdecl fun7(_DWORD *a1, int a2) { if ( !a1 ) return -1; if ( a2 < *a1 ) return 2 * fun7(a1[1], a2); if ( a2 == *a1 ) return 0; return 2 * fun7(a1[2], a2) + 1; } void secret_phase() { const char *line; // eax int v1; // ecx int v2; // ebx int v3; // ecx line = (const char *)read_line(); v2 = __strtol_internal(line, 0, 10, 0); if ( (unsigned int)(v2 - 1) > 0x3E8 ) explode_bomb(v1); if ( fun7(&n1, v2) != 7 ) explode_bomb(v3); printf("Wow! You've defused the secret stage!\n"); phase_defused(); }
本文作者:Nolca
本文链接:https://www.cnblogs.com/nolca/p/16940125.html
版权声明:本作品采用 收益分享revenue sharing 许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步