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

反编译记事本(1) 初始配置

2023-01-29 19:24 作者:GC_CH  | 我要投稿

    项目地址 : https://gitee.com/chenguc/notepad-decompilation .

    尝试反编译一下Windodws XP 的记事本程序, 目标是构建出可以编译运行的C++ Win32项目. 并且运行结果尽可能与源程序接近(100%还原源代码是不可能的!).

    约 90% 的反编译工作用IDA Pro完成, 其余工作手动完成.

IDA Pro导出C代码

    之前扫雷的文章也介绍了怎么用IDA Pro导出反编译的伪代码, 这里就简单说明一下了, IDA Pro版本7.5 . 用IDA Pro打开Notepad.exe后, 点击菜单 File -> Produce file -> Create C file... , 或者快捷键 Ctrl + F5, 导出C代码文件 main.cpp. 

    

    一共5000多行, 扫雷刚开始的时候是2800多行, 看来记事本更复杂一些.

Visual Studio创建C++项目

    Visual Studio版本 2013. 点击菜单  文件 -> 新建 -> 项目, 选择C++ Win32项目, 命名为Notepad, 并选择空项目创建.

    将导出的main.cpp 复制到项目下并添加到项目中. 打开 main.cpp, 从头红到尾, 不用担心, 正常现象!

    

Resource Hacker导出资源文件

    Resource Hacker 打开 Notepad.exe, 点击菜单 Action -> XxXxX 导出资源到NOTEPAD.rc文件中.

    Visual Studio新建资源文件notepad.rc, 将NOTEPAD.rc的代码复制到notepad.rc中. 这么做, 主要是因为Resource Hacker导出的rc文件, Visual Studio识别不了.

修正资源文件错误

    Visual Studio中右键  notepad.rc , 点击 "编译" 菜单, 发现 FW_NOMAL, FALSE 不认识, 将它们分别替换为 400 和 0, 具体原理看 rc 文件的语法了. 我只知道 FW_NOMAL 是字体大小, FALSE 对应的值为0.

    VK_N 这些按键宏也识别不了, 因为winuser.h中没有定义, 只好自定定义了. 这些宏实际上就是ASCII码中对应字母的值.

    

    再次编译 rc 文件, 通过了.

反编译记事本(1) 初始配置的评论 (共 条)

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