Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* This file has been generated by the Hex-Rays decompiler.
- Copyright (c) 2007-2014 Hex-Rays <info@hex-rays.com>
- Detected compiler: GNU C++
- */
- #include <defs.h>
- //-------------------------------------------------------------------------
- // Function declarations
- __int64 init_proc();
- // int puts(const char *s);
- // int printf(const char *format, ...);
- // void *calloc(size_t nmemb, size_t size);
- // int __fastcall __isoc99_scanf(_QWORD, _QWORD); weak
- // void __noreturn exit(int status);
- int sub_40058C();
- void sub_4005B0();
- void sub_400620();
- __int64 __fastcall sub_400706(unsigned int a1, __int64 a2, __int64 a3);
- __int64 __fastcall sub_4007CB(__int64 a1, int a2);
- __int64 __fastcall sub_400CBB(__int64 a1, int a2);
- void __noreturn sub_400E23();
- __int64 sub_401190();
- void term_proc();
- // int _gmon_start__(void); weak
- //-------------------------------------------------------------------------
- // Data declarations
- __int64 qword_601E28 = -1LL; // weak
- __int64 qword_601E38[] = { -1LL }; // weak
- char byte_602040; // weak
- __int64 qword_602048; // weak
- int dword_602050[]; // weak
- int dword_602054; // weak
- int dword_602058; // weak
- int dword_60205C; // weak
- int dword_602060; // weak
- //----- (00000000004004D0) ----------------------------------------------------
- __int64 init_proc()
- {
- sub_40058C();
- sub_400620();
- return sub_401190();
- }
- //----- (0000000000400560) ----------------------------------------------------
- #error "400566: positive sp value has been found (funcsize=3)"
- //----- (000000000040058C) ----------------------------------------------------
- int sub_40058C()
- {
- int (**v0)(void); // rax@1
- v0 = &_gmon_start__;
- if ( &_gmon_start__ )
- LODWORD(v0) = _gmon_start__();
- return (signed int)v0;
- }
- // 602080: using guessed type int _gmon_start__(void);
- //----- (00000000004005B0) ----------------------------------------------------
- void sub_4005B0()
- {
- __int64 v0; // rax@2
- signed __int64 i; // rbx@2
- if ( !byte_602040 )
- {
- v0 = qword_602048;
- for ( i = ((6299200 - (signed __int64)qword_601E38) >> 3) - 1; qword_602048 < (unsigned __int64)i; v0 = qword_602048 )
- {
- qword_602048 = v0 + 1;
- ((void (*)(void))qword_601E38[v0 + 1])();
- }
- byte_602040 = 1;
- }
- }
- // 601E38: using guessed type __int64 qword_601E38[];
- // 602040: using guessed type char byte_602040;
- // 602048: using guessed type __int64 qword_602048;
- //----- (0000000000400620) ----------------------------------------------------
- void sub_400620()
- {
- ;
- }
- //----- (0000000000400706) ----------------------------------------------------
- __int64 __fastcall sub_400706(unsigned int a1, __int64 a2, __int64 a3)
- {
- __int64 result; // rax@4
- unsigned int i; // [sp+24h] [bp-14h]@1
- unsigned int v5; // [sp+28h] [bp-10h]@1
- unsigned int v6; // [sp+2Ch] [bp-Ch]@1
- unsigned int v7; // [sp+30h] [bp-8h]@1
- v5 = *(_DWORD *)a2;
- v6 = *(_DWORD *)(a2 + 4);
- v7 = -1640531527 * a1;
- for ( i = 0; i < a1; ++i )
- {
- v6 -= (v5 + (16 * v5 ^ (v5 >> 5))) ^ (v7 + *(_DWORD *)(a3 + 4LL * ((v7 >> 11) & 3)));
- v7 += 1640531527;
- v5 -= (v6 + (16 * v6 ^ (v6 >> 5))) ^ (v7 + *(_DWORD *)(a3 + 4LL * (v7 & 3)));
- }
- *(_DWORD *)a2 = v5;
- result = v6;
- *(_DWORD *)(a2 + 4) = v6;
- return result;
- }
- //----- (00000000004007CB) ----------------------------------------------------
- __int64 __fastcall sub_4007CB(__int64 a1, int a2)
- {
- __int64 result; // rax@4
- void *v3; // [sp+18h] [bp-78h]@1
- int i; // [sp+20h] [bp-70h]@1
- int j; // [sp+24h] [bp-6Ch]@2
- int v6; // [sp+28h] [bp-68h]@13
- int k; // [sp+2Ch] [bp-64h]@13
- int v8; // [sp+30h] [bp-60h]@20
- int l; // [sp+34h] [bp-5Ch]@20
- int m; // [sp+38h] [bp-58h]@23
- int v11; // [sp+3Ch] [bp-54h]@24
- int n; // [sp+40h] [bp-50h]@24
- int ii; // [sp+44h] [bp-4Ch]@31
- int v14; // [sp+48h] [bp-48h]@32
- int jj; // [sp+4Ch] [bp-44h]@32
- int kk; // [sp+50h] [bp-40h]@39
- int v17; // [sp+54h] [bp-3Ch]@40
- int ll; // [sp+58h] [bp-38h]@40
- int mm; // [sp+5Ch] [bp-34h]@47
- int v20; // [sp+60h] [bp-30h]@48
- int nn; // [sp+64h] [bp-2Ch]@48
- int i1; // [sp+68h] [bp-28h]@55
- int v23; // [sp+6Ch] [bp-24h]@56
- int i2; // [sp+70h] [bp-20h]@56
- int v25; // [sp+74h] [bp-1Ch]@3
- v3 = calloc(3 * a2 * a2 + -3 * a2 + 1, 4uLL);
- for ( i = 0; 2 * a2 - 1 > i; ++i )
- {
- for ( j = 0; a2 + i > j; ++j )
- {
- v25 = *(_DWORD *)(4LL * j + *(_QWORD *)(a1 + 8LL * i));
- if ( 3 * a2 * a2 + -3 * a2 + 1 < v25 )
- return 0LL;
- if ( v25 < 0 )
- return 0LL;
- if ( v25 > 0 )
- ++*((_DWORD *)v3 + v25 - 1LL);
- }
- }
- v6 = 0;
- for ( k = 0; 3 * a2 * a2 + -3 * a2 + 1 > k; ++k )
- {
- v6 += *((_DWORD *)v3 + k);
- if ( *((_DWORD *)v3 + k) > 1 )
- return 0LL;
- }
- if ( 3 * a2 * a2 + -3 * a2 + 1 == v6 )
- {
- v8 = 0;
- for ( l = 0; l < a2; ++l )
- v8 += *(_DWORD *)(4LL * l + *(_QWORD *)a1);
- for ( m = 0; 2 * a2 - 1 > m; ++m )
- {
- v11 = 0;
- for ( n = 0; a2 + m > n; ++n )
- v11 += *(_DWORD *)(4LL * n + *(_QWORD *)(a1 + 8LL * m));
- if ( v11 != v8 )
- return 0LL;
- }
- for ( ii = 0; ii < a2; ++ii )
- {
- v14 = 0;
- for ( jj = 0; a2 + ii > jj; ++jj )
- v14 += *(_DWORD *)(4LL * ii + *(_QWORD *)(a1 + 8LL * jj));
- if ( v14 != v8 )
- return 0LL;
- }
- for ( kk = a2; 2 * a2 - 1 > kk; ++kk )
- {
- v17 = 0;
- for ( ll = 0; ll < 2 * a2 - 1 + ~(kk - a2); ++ll )
- v17 += *(_DWORD *)(4LL * kk + *(_QWORD *)(a1 + 8LL * (ll + kk - a2 + 1)));
- if ( v17 != v8 )
- return 0LL;
- }
- for ( mm = 0; mm < a2; ++mm )
- {
- v20 = 0;
- for ( nn = 0; 2 * a2 - 1 - mm > nn; ++nn )
- v20 += *(_DWORD *)(4LL * nn + *(_QWORD *)(a1 + 8LL * (mm + nn)));
- if ( v20 != v8 )
- return 0LL;
- }
- for ( i1 = 1; i1 < a2; ++i1 )
- {
- v23 = 0;
- for ( i2 = 0; 2 * a2 - 1 - i1 > i2; ++i2 )
- v23 += *(_DWORD *)(4LL * (i1 + i2) + *(_QWORD *)(a1 + 8LL * i2));
- if ( v23 != v8 )
- return 0LL;
- }
- if ( **(_DWORD **)a1 + **(_DWORD **)(a1 + 8) == 20 )
- result = **(_DWORD **)a1 == 9;
- else
- result = 0LL;
- }
- else
- {
- result = 0LL;
- }
- return result;
- }
- //----- (0000000000400CBB) ----------------------------------------------------
- __int64 __fastcall sub_400CBB(__int64 a1, int a2)
- {
- int v2; // ST28_4@3
- int v3; // ST2C_4@7
- int v4; // ST2C_4@7
- int v5; // ST2C_4@7
- __int64 result; // rax@7
- int i; // [sp+18h] [bp-1Ch]@1
- signed int v8; // [sp+1Ch] [bp-18h]@2
- int j; // [sp+20h] [bp-14h]@2
- for ( i = 0; 2 * a2 - 1 > i; ++i )
- {
- v8 = 0;
- for ( j = 0; a2 + i > j; ++j )
- {
- v2 = *(_DWORD *)(4LL * j + *(_QWORD *)(a1 + 8LL * i));
- dword_602050[v8 / 8] |= ((v2 * j * i ^ v2) & 0xFF) << (char)v8 % 8;
- v8 += 8;
- }
- }
- v3 = dword_602050[0];
- dword_602050[0] ^= dword_602060;
- dword_602060 ^= v3;
- v4 = dword_602054;
- dword_602054 ^= dword_602060;
- dword_602060 ^= v4;
- v5 = dword_602058;
- dword_602058 ^= dword_602060;
- dword_602058 ^= v5;
- result = dword_60205C ^ (unsigned int)dword_602060;
- dword_60205C ^= dword_602060;
- return result;
- }
- // 602050: using guessed type int dword_602050[];
- // 602054: using guessed type int dword_602054;
- // 602058: using guessed type int dword_602058;
- // 60205C: using guessed type int dword_60205C;
- // 602060: using guessed type int dword_602060;
- //----- (0000000000400E23) ----------------------------------------------------
- void __noreturn sub_400E23()
- {
- __int64 v0; // rbx@6
- int v1; // [sp+0h] [bp-70h]@23
- int v2; // [sp+4h] [bp-6Ch]@23
- int v3; // [sp+8h] [bp-68h]@23
- int v4; // [sp+Ch] [bp-64h]@23
- int v5; // [sp+10h] [bp-60h]@23
- int v6; // [sp+14h] [bp-5Ch]@23
- int v7; // [sp+18h] [bp-58h]@23
- int v8; // [sp+1Ch] [bp-54h]@23
- int v9; // [sp+20h] [bp-50h]@23
- int v10; // [sp+24h] [bp-4Ch]@23
- __int64 v11; // [sp+30h] [bp-40h]@5
- int v12; // [sp+38h] [bp-38h]@1
- int i; // [sp+3Ch] [bp-34h]@5
- int j; // [sp+40h] [bp-30h]@8
- int k; // [sp+44h] [bp-2Ch]@9
- int l; // [sp+48h] [bp-28h]@14
- int m; // [sp+4Ch] [bp-24h]@15
- int n; // [sp+50h] [bp-20h]@23
- int v19; // [sp+54h] [bp-1Ch]@8
- int v20; // [sp+58h] [bp-18h]@15
- int v21; // [sp+5Ch] [bp-14h]@15
- puts("What order?");
- __isoc99_scanf(4198892LL, &v12);
- if ( v12 <= 1 || v12 > 10 )
- {
- puts("Sorry, that's not a good order.");
- exit(0);
- }
- v11 = (__int64)calloc(2 * v12 - 1, 8uLL);
- for ( i = 0; 2 * v12 - 1 > i; ++i )
- {
- v0 = v11 + 8LL * i;
- *(_QWORD *)v0 = calloc(i + v12, 4uLL);
- }
- v19 = 3 * v12 * v12 + -3 * v12 + 1;
- puts("Input numbers.");
- for ( j = 0; j < v12; ++j )
- {
- for ( k = 0; j + v12 > k; ++k )
- __isoc99_scanf(4198892LL, *(_QWORD *)(v11 + 8LL * j) + 4LL * k);
- }
- for ( l = v12; 2 * v12 - 1 > l; ++l )
- {
- v20 = 2 * v12 - 1 + ~(l - v12);
- v21 = l - v12 + 1;
- for ( m = 0; m < v20; ++m )
- __isoc99_scanf(4198892LL, *(_QWORD *)(v11 + 8LL * l) + 4LL * (m + v21));
- }
- puts("Got input! Verifying...");
- if ( !(unsigned int)sub_4007CB(v11, v12) )
- {
- puts("Sorry, incorrect!");
- exit(0);
- }
- v1 = -1089151902;
- v2 = 34416792;
- v3 = -110388501;
- v4 = -1513521000;
- v5 = 1721500667;
- v6 = 1493041700;
- v7 = -219333338;
- v8 = 1148696600;
- v9 = 1201108895;
- v10 = -392044752;
- puts("Success!");
- sub_400CBB(v11, v12);
- for ( n = 0; n <= 4; ++n )
- sub_400706(0x20u, (__int64)(&v1 + 2 * n), 6299728LL);
- printf("Your flag is: %s\n", &v1, *(_QWORD *)&v1, *(_QWORD *)&v3, *(_QWORD *)&v5, *(_QWORD *)&v7, *(_QWORD *)&v9);
- exit(0);
- }
- // 400540: using guessed type int __fastcall __isoc99_scanf(_QWORD, _QWORD);
- //----- (0000000000401190) ----------------------------------------------------
- __int64 sub_401190()
- {
- __int64 result; // rax@1
- signed __int64 v1; // rbx@2
- result = qword_601E28;
- if ( qword_601E28 != -1 )
- {
- v1 = 6299176LL;
- do
- {
- v1 -= 8LL;
- ((void (*)(void))result)();
- result = *(_QWORD *)v1;
- }
- while ( *(_QWORD *)v1 != -1LL );
- }
- return result;
- }
- // 601E28: using guessed type __int64 qword_601E28;
- //----- (00000000004011C8) ----------------------------------------------------
- void term_proc()
- {
- sub_4005B0();
- }
- #error "There were 1 decompilation failure(s) on 11 function(s)"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement