easyxor
非常easy的xor
解法
拉进 DIE 分析。
导入 IDA。
按 F5 反汇编。
int __fastcall main(int argc, const char **argv, const char **envp)
{
int v3; // eax
char v4; // al
int v5; // eax
char v7; // [rsp+33h] [rbp-Dh]
char v8; // [rsp+33h] [rbp-Dh]
int v9; // [rsp+34h] [rbp-Ch]
int i; // [rsp+38h] [rbp-8h]
int v11; // [rsp+3Ch] [rbp-4h]
_main();
v11 = 0;
v9 = 0;
puts("Please input your flag:");
while ( 1 )
{
v8 = getchar();
if ( v8 == 10 )
break;
v7 = key[v9 % 4] ^ v8;
while ( 1 )
{
v4 = v7--;
if ( v4 <= 0 )
break;
v3 = v11++;
s[v3] = 1;
}
v5 = v11++;
s[v5] = 0;
++v9;
}
while ( v11 <= 2559 )
s[v11++] = -1;
for ( i = 0; i <= 2559; ++i )
{
if ( r[i] != s[i] )
{
puts("Lose lose lose!");
break;
}
}
if ( i == 2560 )
puts("Win win win!");
system("pause");
return 0;
}
输入先和 key 异或,然后和 r 数组比较。
v7 = key[v9 % 4] ^ v8;
找到 key。
SCNU
找到 r。
.data:0000000000403080 ; _BYTE r[2560]
.data:0000000000403080 r db 35h dup(1), 0, 2Fh dup(1), 0, 2Fh dup(1), 0, 32h dup(1)
.data:0000000000403080 ; DATA XREF: main+E1↑o
.data:0000000000403148 db 0, 28h dup(1), 0, 14h dup(1), 0, 27h dup(1), 0, 3Bh dup(1)
.data:00000000004031EA db 0, 3Dh dup(1), 0, 70h dup(1), 0, 3Ch dup(1), 0, 0Ah dup(1)
.data:00000000004032E1 db 0, 3Dh dup(1), 0, 73h dup(1), 0, 3Ah dup(1), 0, 0Ah dup(1)
.data:00000000004033D9 db 0, 1Fh dup(1), 0, 73h dup(1), 0, 3Dh dup(1), 0, 66h dup(1)
.data:0000000000403512 db 0, 21h dup(1), 0, 1Ch dup(1), 0, 6Dh dup(1), 0, 28h dup(1)
.data:00000000004035E8 db 0, 497h dup(0FFh)
.data:0000000000403A80 ; Function-local static variable
提取出 r 数字中的数据:
0x35, 0x2F, 0x2F, 0x32, 0x28, 0x14, 0x27, 0x3B,0x3D, 0x70, 0x3C, 0x0A, 0x3D, 0x73, 0x3A, 0x0A,0x1F, 0x73, 0x3D, 0x66, 0x21, 0x1C, 0x6D, 0x28
用 C++ 写出解码程序:
#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;
char key[] = "SCNU";
int r[] = {0x35, 0x2F, 0x2F, 0x32, 0x28, 0x14, 0x27, 0x3B,
0x3D, 0x70, 0x3C, 0x0A, 0x3D, 0x73, 0x3A, 0x0A,
0x1F, 0x73, 0x3D, 0x66, 0x21, 0x1C, 0x6D, 0x28};
int main() {
int j = 0;
string ans = "";
for (auto i : r) {
ans += i ^ key[j++ % 4];
}
cout << ans;
return 0;
}
Flag
flag{Winn3r_n0t_L0s3r_#}
声明
本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶机上进行,并且严格遵守了相关法律法规。
博主坚决反对任何形式的非法黑客行为,包括但不限于未经授权的访问、攻击或破坏他人的计算机系统。博主强烈建议每位读者在学习网络攻防技术时,必须遵守法律法规,不得用于任何非法目的。对于因使用这些技术而导致的任何后果,博主不承担任何责任。