Tedious
Reversing a XOR cipher
Description
Opinions
Solution
A Once-Over
int __cdecl main(int argc, const char **argv, const char **envp)
{
int i; // [rsp+1Ch] [rbp-D4h]
int j; // [rsp+1Ch] [rbp-D4h]
int k; // [rsp+1Ch] [rbp-D4h]
int l; // [rsp+1Ch] [rbp-D4h]
int m; // [rsp+1Ch] [rbp-D4h]
int n; // [rsp+1Ch] [rbp-D4h]
int ii; // [rsp+1Ch] [rbp-D4h]
int jj; // [rsp+1Ch] [rbp-D4h]
int kk; // [rsp+1Ch] [rbp-D4h]
int ll; // [rsp+1Ch] [rbp-D4h]
int mm; // [rsp+1Ch] [rbp-D4h]
int nn; // [rsp+1Ch] [rbp-D4h]
int i1; // [rsp+1Ch] [rbp-D4h]
int i2; // [rsp+1Ch] [rbp-D4h]
int i3; // [rsp+1Ch] [rbp-D4h]
int i4; // [rsp+1Ch] [rbp-D4h]
int i5; // [rsp+1Ch] [rbp-D4h]
int i6; // [rsp+1Ch] [rbp-D4h]
int i7; // [rsp+1Ch] [rbp-D4h]
int i8; // [rsp+1Ch] [rbp-D4h]
int i9; // [rsp+1Ch] [rbp-D4h]
int i10; // [rsp+1Ch] [rbp-D4h]
int v26[40]; // [rsp+20h] [rbp-D0h] BYREF
char flag_input[40]; // [rsp+C0h] [rbp-30h] BYREF
unsigned __int64 v28; // [rsp+E8h] [rbp-8h]
v28 = __readfsqword(0x28u);
puts("Enter the flag:");
fgets(flag_input, 40, _bss_start);
for ( i = 0; i <= 38; ++i )
flag_input[i] = (flag_input[i] + 59) ^ 0x38;
flag_input[i] = 0;
for ( j = 0; j <= 38; ++j )
flag_input[j] = (flag_input[j] + 18) ^ 0xFD;
flag_input[j] = 0;
for ( k = 0; k <= 38; ++k )
flag_input[k] = (flag_input[k] + 4) ^ 0x50;
flag_input[k] = 0;
for ( l = 0; l <= 38; ++l )
flag_input[l] = (flag_input[l] + 19) ^ 0x68;
flag_input[l] = 0;
for ( m = 0; m <= 38; ++m )
flag_input[m] = (flag_input[m] + 12) ^ 0x79;
flag_input[m] = 0;
for ( n = 0; n <= 38; ++n )
flag_input[n] = (flag_input[n] - 68) ^ 0xA0;
flag_input[n] = 0;
for ( ii = 0; ii <= 38; ++ii )
flag_input[ii] = (flag_input[ii] + 10) ^ 0xCD;
flag_input[ii] = 0;
for ( jj = 0; jj <= 38; ++jj )
flag_input[jj] = (flag_input[jj] - 72) ^ 0x5A;
flag_input[jj] = 0;
for ( kk = 0; kk <= 38; ++kk )
flag_input[kk] = (flag_input[kk] + 11) ^ 0xBD;
flag_input[kk] = 0;
for ( ll = 0; ll <= 38; ++ll )
flag_input[ll] = (flag_input[ll] - 31) ^ 0xED;
flag_input[ll] = 0;
for ( mm = 0; mm <= 38; ++mm )
flag_input[mm] = (flag_input[mm] + 69) ^ 0x22;
flag_input[mm] = 0;
for ( nn = 0; nn <= 38; ++nn )
flag_input[nn] = (flag_input[nn] - 66) ^ 0x6B;
flag_input[nn] = 0;
for ( i1 = 0; i1 <= 38; ++i1 )
flag_input[i1] = (flag_input[i1] - 38) ^ 0x6B;
flag_input[i1] = 0;
for ( i2 = 0; i2 <= 38; ++i2 )
flag_input[i2] = (flag_input[i2] + 118) ^ 0xFA;
flag_input[i2] = 0;
for ( i3 = 0; i3 <= 38; ++i3 )
flag_input[i3] = (flag_input[i3] + 22) ^ 0x6B;
flag_input[i3] = 0;
for ( i4 = 0; i4 <= 38; ++i4 )
flag_input[i4] = (flag_input[i4] - 75) ^ 0x6B;
flag_input[i4] = 0;
for ( i5 = 0; i5 <= 38; ++i5 )
flag_input[i5] = (flag_input[i5] - 115) ^ 0x64;
flag_input[i5] = 0;
for ( i6 = 0; i6 <= 38; ++i6 )
flag_input[i6] = (flag_input[i6] + 10) ^ 0xAB;
flag_input[i6] = 0;
for ( i7 = 0; i7 <= 38; ++i7 )
flag_input[i7] = (flag_input[i7] + 99) ^ 0x1B;
flag_input[i7] = 0;
for ( i8 = 0; i8 <= 38; ++i8 )
flag_input[i8] = (flag_input[i8] - 43) ^ 0xF0;
flag_input[i8] = 0;
for ( i9 = 0; i9 <= 38; ++i9 )
flag_input[i9] = (flag_input[i9] + 117) ^ 0x6B;
flag_input[i9] = 0;
memset(v26, 0, sizeof(v26));
v26[0] = 77;
v26[1] = 185;
v26[2] = 77;
v26[3] = 11;
v26[4] = 212;
v26[5] = 102;
v26[6] = 227;
v26[7] = 41;
v26[8] = 184;
v26[9] = 77;
v26[10] = 223;
v26[11] = 102;
v26[12] = 184;
v26[13] = 77;
v26[14] = 14;
v26[15] = 196;
v26[16] = 223;
v26[17] = 212;
v26[18] = 20;
v26[19] = 59;
v26[20] = 223;
v26[21] = 102;
v26[22] = 44;
v26[23] = 20;
v26[24] = 71;
v26[25] = 223;
v26[26] = 183;
v26[27] = 184;
v26[28] = 183;
v26[29] = 223;
v26[30] = 71;
v26[31] = 77;
v26[32] = 164;
v26[33] = 223;
v26[34] = 50;
v26[35] = 184;
v26[36] = 234;
v26[37] = 245;
v26[38] = 146;
for ( i10 = 0; i10 <= 38; ++i10 )
{
if ( (unsigned __int8)flag_input[i10] != v26[i10] )
{
printf("WRONG!");
return 0;
}
}
printf("GOOD JOB!");
return 0;
}A Deeper Dive
A Program to Pwn
A Dire Difficulty


A Flag, Finally
Last updated