2017 极客 RE Windows_3

2021-04-29 11:27

阅读:468

标签:check   img   alt   note   去除   printf   win   span   fail   

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

我的办法是用虚拟机查看它的信息

技术分享

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

 

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

运行之后,它让你输入密码,若是不对则出现 check faild!

 

接下来,用 32 位的 IDA 打开程序,发现里面有很多可调用函数,5499个

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

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

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

技术分享

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

点开上面一串变量的地方,发现 v16 – v23的地址是连着的,而 v8 – v15的地址是连着的

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

现在就是想要将这部分数据处理出来,我是用 Notepad++

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

技术分享

然后再稍微处理一下变成一列竖条的数据,再用 python 把数字变成 10 进制,并把 ‘\n‘ 换成 ‘,‘

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

#include 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

标签:check   img   alt   note   去除   printf   win   span   fail   

原文地址:http://www.cnblogs.com/Vangelis/p/7821323.html


评论


亲,登录后才可以留言!