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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
| __int64 __fastcall main(int a1, char **a2, char **a3) { v42 = __readfsqword(0x28u); std::operator<<<std::char_traits<char>>(&std::cout, "plz input your flag:", a3); std::string::basic_string(v40); std::operator>><char>(&std::cin, v40); AppendChar((__int64)v41, (__int64)v40, 0xA); std::string::operator=(); std::string::~string(v41); InitVFTable((__int64)vftable); std::allocator<char>::allocator(&v34); LoadString((__int64)v41, (__int64)"right", (__int64)&v34); v3 = operator new(0x60uLL); sub_403D58(v3, (__int64)v41, 1248728, &unk_419AE0); v35 = v3; UpdVFTable((__int64)vftable, (__int64)&v35); std::string::~string(v41); std::allocator<char>::~allocator(&v34); std::allocator<char>::allocator(&v34); LoadString((__int64)v41, (__int64)"or", (__int64)&v34); v4 = operator new(0x60uLL); sub_403D58(v4, (__int64)v41, 14472, &unk_412360); v35 = v4; UpdVFTable((__int64)vftable, (__int64)&v35); std::string::~string(v41); std::allocator<char>::~allocator(&v34); std::allocator<char>::allocator(&v34); LoadString((__int64)v41, (__int64)"wrong", (__int64)&v34); v5 = operator new(0x60uLL); sub_403D58(v5, (__int64)v41, 16528, &unk_40E2C0); v35 = v5; UpdVFTable((__int64)vftable, (__int64)&v35); std::string::~string(v41); std::allocator<char>::~allocator(&v34); for ( i = 0; i <= 2; ++i ) { v6 = (_QWORD *)offset128(vftable, i); Base32(*v6 + 8LL, &unk_409136); v7 = (_QWORD *)offset128(vftable, i); (*(void (__fastcall **)(_QWORD, const char *))(*(_QWORD *)*v7 + 8LL))(*v7, "1234567890123456"); v8 = (_QWORD *)offset128(vftable, i); sub_4044E4(*v8); v9 = (_QWORD *)offset128(vftable, i); sub_404914(*v9); } v10 = *(_QWORD *)offset128(vftable, 0LL); v11 = std::string::size(v40); v12 = (const void *)std::string::c_str(v40); sub_4046B0(v10, v12, v11); v36 = (const void *)operator new[](0x400uLL); v13 = (__int64 *)offset128(vftable, 0LL); v32 = sub_4046E4(*v13, (__int64)v36, 0x400uLL); if ( !v32 ) { v15 = std::operator<<<std::char_traits<char>>(&std::cout, "failed", v14); std::ostream::operator<<(v15, &std::endl<char,std::char_traits<char>>); } v16 = (__int64 *)offset128(vftable, 1LL); sub_4046B0(*v16, v36, v32 - 1); v17 = (__int64 *)offset128(vftable, 1LL); v33 = sub_4046E4(*v17, (__int64)v36, 0x400uLL); if ( !v33 ) { v19 = std::operator<<<std::char_traits<char>>(&std::cout, "failed", v18); std::ostream::operator<<(v19, &std::endl<char,std::char_traits<char>>); } v20 = (__int64 *)offset128(vftable, 2LL); sub_4046B0(*v20, v36, v33); v21 = (__int64 *)offset128(vftable, 2LL); if ( !(unsigned int)sub_4046E4(*v21, (__int64)v36, 0x400uLL) ) { v23 = std::operator<<<std::char_traits<char>>(&std::cout, "failed", v22); std::ostream::operator<<(v23, &std::endl<char,std::char_traits<char>>); } for ( j = 0; j < (unsigned __int64)(std::string::size(v40) - 1); ++j ) { if ( *((_BYTE *)v36 + j) != cipher[j] ) { v24 = std::operator<<<std::char_traits<char>>(&std::cout, "wrong", cipher); std::ostream::operator<<(v24, &std::endl<char,std::char_traits<char>>); goto LABEL_20; } } v26 = std::operator<<<std::char_traits<char>>(&std::cout, "right", v25); std::ostream::operator<<(v26, &std::endl<char,std::char_traits<char>>); v37 = vftable; v34 = sub_405BB8(vftable); v35 = sub_405C04((__int64)v37); while ( (unsigned __int8)sub_405C54(&v34, &v35) ) { v27 = *(void **)sub_405CB8((__int64)&v34); v38 = v27; v28 = v27; if ( v27 ) { sub_403EF8(v27); operator delete(v28, 0x60uLL); } sub_405C94(&v34); } LABEL_20: sub_405B16(vftable); std::string::~string(v40); return 0LL; }
|