欢迎光临散文网 会员登陆 & 注册

C++程序反编译(5) 扫雷1

2022-11-06 19:18 作者:GC_CH  | 我要投稿

    

    这次来尝试反编译Windows XP的扫雷, 主要工具是IDA Pro和Visual Studio.

    我使用的IDA Pro版本是7.5, Visual Studio 则是2013.

一、 IDA Pro打开扫雷.exe

    首先打开IDA Pro, 点击菜单 File -> Open, 然后选择 扫雷.exe,  默认值就好, 点击OK, 等待IDA分析完成. 

    

    如果打开后提示有什么pdb文件, 选否就行了, 这是要载入调试用的数据库文件, 里面包含了各种原始的调试信息, 比如变量名这些, 实际上winmine.pdb我们获取不到.

    识别完成后, 可以看到如下界面(右边原来是只有汇编代码的流程图显示, 按F5反编译后得到C语言伪代码):

    

    左边列出了识别出来的函数, 共85个. 右边则是入口函数start, 我初步判断这个函数是主函数, 以为它返回int, 且没有参数, 很向int main(). 但其实不是, 这需要从它内部的代码看了, 主要通过粉红色的系统给API来判断.

    上面代码是start函数的中间部分, _getmainargs, 应该是获取主函数的参数,.

既然前面是获取主函数的参数, 那么接下来肯定是要调用主函数了, 调用完就退出程序, 所以, sub_10021F0才是真正的主函数. 但它到底是main还是WinMain? main只有0个参数和两个参数版本, 所以不是main, 而WinMain是4个参数的, 并且第一个参数是HANDLE类型, 正好对应GetModuleHandle类型, 因此, sub_10021F0是WinMain函数.

    

二、 创建Win32项目

    点击菜单 File -> Produce file -> Create C file... , 或者快捷键 Ctrl + F5, 导出C代码文件.

    Visual Studio创建空的Win32项目, 将导出的C文件添加到项目中, 如下:

可以看到, 共2800多行, 无数个错误. 而且缺少了头文件defs.h, defs.h可以在IDA Pro的安装目录下找到, 找到之后, 复制一份并添加到当前项目中, 错误大概少了90%, 但还是很多.

三、后记

    目前为止, 所做的都是比较简单的事, 前面也说过了, 反编译的难点还在后面, 一篇文章介绍不了那么多, 因此, 这篇文章就先到这里.

    这个扫雷程序只有117KB, 可反编译出来的C代码却有2800多行, 可见, 反编译到底是多难的事.

C++程序反编译(5) 扫雷1的评论 (共 条)

分享到微博请遵守国家法律