攻防世界

1.Reversing-x64Elf-100

拖入EXE中查看信息
在这里插入图片描述

拖入64位IDA
在这里插入图片描述

双击进入main函数,F5查看伪代码
在这里插入图片描述

双击跟进sub_400FD
在这里插入图片描述

编写脚本
在这里插入图片描述

得到flag为Code_Talkers

2.666

下载附件并解压,解压后文件拖入exe
在这里插入图片描述

拖入64位IDA
找到主函数,F5
在这里插入图片描述

v5是需要输入的内容,v5的长度等于key,用s和enflag进行比较,相等就输出You are Right .
观察encode函数
在这里插入图片描述

a1即为主函数中的v5,a2即为主函数中的s,对a1进行处理可以得到a2,根据循环可写逆过程
#include <stdio.h>
#include <stdlib.h>

int main()
{
char a1[20],a2[20]={“izwhroz""w"v.K".Ni”},v3[32],v4[32],v5[40];
int v6,i;
i=0;
v6=0;
for(i=15;i>=0;i-=3)
{
v3[i+2]=a2[i+2];
v4[i+1]=a2[i+1];
v5[i]=a2[i];
a1[i+2]=v3[i+2]^18^6;
a1[i+1]=(v4[i+1]^18)+6;
a1[i]=(18^v5[i])-6;
}
a1[18]=’\0’;
printf(“%s”,a1);
return 0;
}
运行得到flag为unctf{b66_6b6_66b}

3.easyRE1

解压文件后得到两个文件分别拖入32位和64位IDA,F5后发现主函数相同且直接得到flag
在这里插入图片描述

flag为flag{db2f62a36a018bce28e46d976e3f9864}

4.Lucknum

下载附件并解压,拖入exe
在这里插入图片描述

拖入64位IDA,F5后直接可找到flag
在这里插入图片描述

flag为flag{c0ngr@tul@ti0n_f0r_luck_numb3r}

5.reverse_re3

下载附件并解压,拖入exe
在这里插入图片描述

拖入64位IDA
找到main函数,F5后双击跟进v4=sub_940()
快捷键R转化为字符发现分别出现wasd,猜测为迷宫游戏
v5 = __readfsqword(0x28u);
v3 = 0;
memset(v4, 0, 0x200uLL);
_isoc99_scanf(&unk_1278, v4, v4);
while ( 1 )
{
do
{
v2 = 0;
sub_86C();
v0 = v4[v3];
if ( v0 == ‘d’ )
{
v2 = sub_E23();
}
else if ( v0 > ‘d’ )
{
if ( v0 == ‘s’ )
{
v2 = sub_C5A();
}
else if ( v0 == ‘w’ )
{
v2 = sub_A92();
}
}
else
{
if ( v0 == 27 )
return 0xFFFFFFFFLL;
if ( v0 == ‘a’ )
v2 = sub_FEC();
}
++v3;
}
while ( v2 != 1 );
if ( dword_202AB0 == 2 )
break;
++dword_202AB0;
}
puts(“success! the flag is flag{md5(your input)}”);
return 1LL;
}
分别进入函数体内
双击Sub_E23
双击dword202020
在这里插入图片描述

提取数据,shift+e
因为数组是dword类型 所以应该四个为一组 只有第一个为有效值,后面的都是补0
在这里插入图片描述

这时候可以在Export as下选择倒数第二个选项 initialized C variable
提取出来的补0就没有了
一个迷宫应该是15x15 =225
根据提取出的数组大小675 可以知道
675=225*3三个迷宫
处理后,得到如下迷宫
第一个迷宫
[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 0, 3, 1, 1, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
[1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0]
[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]
[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
[1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
第二个迷宫
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 1, 0, 3, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]
[1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
[1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]
[1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0]
[1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
[1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
[1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0]
[1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0]
[1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
[1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0]
[1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
[1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
第三个迷宫
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0]
“3”是起点,“4”是终点,“1”是可走的,“0”是不可走的
最后将三个迷宫的解法,并在一起
ddsssddddsssdssdddddsssddddsssaassssdddsddssddwddssssssdddssssdddss
Md5解密MD5在线加密/解密/破解—MD5在线 (sojson.com)
得到flag{aeea66fcac7fa80ed8f79f38ad5bb953}

6.1000Click

拖入exe查壳,无壳
拖入32位IDA,shift+F12查看字符串,ctrl+f全局搜索flag
在这里插入图片描述

找到flag为flag{TIBntXVbdZ4Z9VRtoOQ2wR1vDNIjQ8Ra}

7.crypt

拖入exe
在这里插入图片描述

拖入64位IDA
(5条消息) 攻防世界:crypt(RC4)_逆向技术分享的博客-CSDN博客

8.happyctf

拖入32位IDA,F5
int __thiscall sub_403B70(void *this, char a2)
{
char v3[65]; // [esp+Fh] [ebp-45h] BYREF
void *v4; // [esp+50h] [ebp-4h]

v4 = this;
v3[0] = a2 ^ 0x14;//进行异或
sub_406170(v3);
return ++dword_4DD8F8;
}
在这里插入图片描述

脚本:
s =’rxusoCqxw{yqK{KZqag{ri’
for i in range(len(s)):
print (chr(ord(s[i])^0x14),end = ‘’)
运行得到flag{Welcome_to_Neusoft}

9.xxxorrr

拖入exe
在这里插入图片描述

拖入64位IDA,找到main函数
在这里插入图片描述

双击跟进sub_916
在这里插入图片描述

这里将s1和s2对比,相同就正确,所以s1应该就是flag加密后的字符串
unsigned __int64 sub_84A()
{
int i; // [rsp+Ch] [rbp-14h]
unsigned __int64 v2; // [rsp+18h] [rbp-8h]

v2 = __readfsqword(0x28u);
for ( i = 0; i <= 33; ++i )
s1[i] ^= 2 * i + 65;
return __readfsqword(0x28u) ^ v2;
}
这是加密s1的函数,看到进行了一次异或
函数整体分析,函数先将输入的s与s1进行异或得到新s1,新s1经过sub_84A()函数加密后得到的s1与s2相同
解题思路:将s2与s1异或得到s1异或前的元素,通过加密函数逆向推出正确的flag
脚本:
s2=[ 0x56, 0x4E, 0x57, 0x58, 0x51, 0x51, 0x09, 0x46, 0x17, 0x46,
0x54, 0x5A, 0x59, 0x59, 0x1F, 0x48, 0x32, 0x5B, 0x6B, 0x7C,
0x75, 0x6E, 0x7E, 0x6E, 0x2F, 0x77, 0x4F, 0x7A, 0x71, 0x43,
0x2B, 0x26, 0x89, 0xFE, 0x00]
s1 = ‘qasxcytgsasxcvrefghnrfghnjedfgbhn’
flag=’’
for i in range(33):
flag+=chr(ord(s1[i])^ (2 * i + 65)^s2[i])
print(flag)
运行得到 flag{c0n5truct0r5_functi0n_in_41f}

10.bad_python

(5条消息) 攻防世界Reverse简单难度bad_python题解_pyc 文件头_shenkong_的博客-CSDN博客