m[i]); return 0 ; } done by Vangelis 2017 极客 RE Windows_3

时间:2022-02-10 08:44:44

像这种 RE 的标题问题看到第一反响应该是去查找它的信息,关于它是什么系统下的文件,32位还是64位机器的文件

我的步伐是用虚拟机检察它的信息

m[i]); return 0 ; } done by Vangelis 2017 极客 RE Windows_3

可以看出它是 Windows 系统下的 32位机器下的文件

下一步,在 Windows 系统下打开 exe 文件

运行之后,它让你输入暗码,若是不同错误则呈现 check faild!

接下来,用 32 位的 IDA 打开措施,发明里面有很多可挪用函数,,5499个

于是可以直接用 shift + F12 盘问反汇编中的字符串

可以看到一个 SYC{%s} ,这就是我们要找的关键处所,点开之后达到数据段,再点一下旁边的向上箭头可以到关键函数的栈区

再 F5 一下,可以看到它大略的函数

m[i]); return 0 ; } done by Vangelis 2017 极客 RE Windows_3

发明只需要凭据它的要求正序做一遍就行,这时候需要看 v 这些变量的地点是怎么样的 和 找到 byte_52E000 这个数组是什么

点开上面一串变量的处所,发明 v16 – v23的地点是连着的,而 v8 – v15的地点是连着的

再点开 byte_52E000 之后可以看到它的数据段,可以看到它的数据

此刻就是想要将这部分数据措置惩罚惩罚出来,我是用 Notepad++

在 Notepad++ 里面,用 Alt + 鼠标选定,可以像截图一样去除一部分

m[i]); return 0 ; } done by Vangelis 2017 极客 RE Windows_3

然后再稍微措置惩罚惩罚一下酿成一列竖条的数据,再用 python 把数字酿成 10 进制,并把 ‘\n‘ 换成 ‘,‘

最后就是代码实现正向运行

#include <stdio.h> int main() { int v16[8] = {7, 3, 1, 8, 7, 2, 3, 2}, v8[8] = {18, 19, 20, 1, 15, 20, 16, 11}; int m[22] = {79, 49, 33, 108, 46, 46, 46, 117, 111, 95, 95, 112, 53, 95, 85, 79, 115, 102, 115, 101, 68, 21}; for(int i = 0; i < 8; i++) { int v7 = m[v16[i]]; m[v16[i]] = m[v8[i]]; m[v8[i]] = v7; } m[21] = 0; for(int i = 0; i < 22; i++) printf("%c", m[i]); return 0; }

done by Vangelis

2017 极客 RE Windows_3