下载地址:
链接:https://pan.baidu.com/s/1VVUkb8vjg4xTDeJ_Ph_W2Q?pwd=qwnd
提取码:qwnd
sysmagic
emmm,程序整体比较简单,本质上就是一个自解密,利用调试的SET IP
进行绕过里面的if
判断即可得到FLAG
1
| CTF{debugger_1s_so_p0werful_1n_dyn4m1c_4n4lySis!}
|
2.exe
这个题目也是比较简单,同样的利用动态调试可以得到对应的FLAG
,直接用lazyida
提取出来即可
Ransomware.exe
打开程序发现是一个模拟WannaCry
病毒的界面,简单的查看一下里面的函数可以发现是一个简单的异或加密,将输入的18
个字符和0xCC
异或,然后于一串字符比较,解题脚本如下:
1 2 3 4 5
| ans = [0xFD, 0x93, 0xA8, 0x83, 0x93, 0xA2, 0xFC, 0xB8, 0x93, 0xBB, 0x8D, 0xA2, 0xA2, 0xAD, 0x93, 0xAF, 0xBE, 0xB5] for i in range(len(ans)): ans[i] = ans[i] ^ 0xCC print(chr(ans[i]), end='')
|
rev1
程序本质上还是一个自我异或,对s
中的每一个元素异或自己的下标,对此可以直接patch
下面的ptr[i] = 0;
而使程序解密后的数据不会被清除,之后进行调试即可直接得到FLAG
。
CreakMe1
拖入IDA分析后感觉加密反编译的有点难看稍微修复一下可以得到:
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
| int __cdecl sub_401060(const char *a1) { unsigned int i; unsigned int j; int v3; const char v5[12]; __int16 v6; char v7;
*(_DWORD *)v5 = dword_40708C; *(_DWORD *)&v5[4] = dword_407090; v6 = word_407098; v7 = byte_40709A; *(_DWORD *)&v5[8] = dword_407094; if ( strlen(a1) == strlen(v5) ) { for ( i = 0; i < strlen(a1); ++i ) a1[i] ^= 0x20u; for ( j = 0; j < strlen(v5); ++j ) v5[j] -= 5; v3 = 0; if ( !strlen(v5) ) return 1; while ( v5[v3 + a1 - v5] == v5[v3] ) { if ( ++v3 >= strlen(v5) ) return 1; } } return 0; }
|
通过观察看出来v5
存储的是四字节成都的数据,共 3 个,转换为char
时长度为 12,也便是输入的flag
长。同时输入在和0x20
异或后与v5
每一项减 5 后相等,可以编写如下脚本:
1 2 3 4 5 6
| v5 = [0x68, 0x57, 0x19, 0x48, 0x50, 0x6E, 0x58, 0x78, 0x54, 0x6A, 0x19, 0x58] for i in range(len(v5)): v5[i] = v5[i] - 5 v5[i] = v5[i] ^ 0x20 print(chr(v5[i]), end='')
|
CreakMe
又是一个简单的自解密,直接调试,就可以看到解密出来的FLAG
CKme
emmm,这个题目不清楚是不是拿到图片即可,对于图片可以直接使用Pe
的插件直接进行提取出来
1-IDA-R字符串
这个应该是一个签到题目,直接拖入IDA
反编译就可以得到对应的FLAG
了。
1
| flag{Welcome_To_RE_World!}
|
StarsCode-星号密码
直接使用星号密码查看器即可得到对应密钥: