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

C++程序反编译笔记(10) 字符串资源丢失

2022-11-30 22:46 作者:GC_CH  | 我要投稿

    经过前面的努力, 已经可以弹出一个消息框了:

    目前的情况是: (1) 根据前文所述的反编译步骤, 现在需要解决逻辑错误, 这是最麻烦的一步, 但也是反编译的最后一步了. (2) 要解决的第一个逻辑错误是这个消息框的问题.

    根据经验 : (1) 消息框肯定是要提示我们什么的. (2) 根据消息框上的图标, 要提示的信息肯定是发生了某个错误.

定位消息框代码位置

    要定位消息框代码的位置很简单.

    在Visual Studio中, 调试状态下, 点击暂停按钮就可以将代码暂停在正在执行的语句上. 而消息框代码会阻塞当前代码的执行, 正好给了我们知道具体代码位置的机会.

    

    如图是定位出来的代码位置:

    该函数中都是调用Windows API, 还是比较容易懂的. 查文档可以知道, 是从资源中加载字符串. 于是, 这个函数的作用就明白了, 从资源加载字符串然后用消息框显示出来.

解决消息框错误

   我们需要做的是修正消息框的文本, 根据提示文本才知道程序哪里出了问题(不知道也有其他办法, 但是比较麻烦). 

    使用断点功能可以知道, 执行的是 if语句体. LoadString函数的第2个参数是资源中的字符串ID, 因此内容的ID是6, 标题的ID是3. 

    使用ResHack可以查看"扫雷.exe"中的字符串资源:

    由于exe中的字符串资源是静态的, 不会改变, 所以可以直接用字符串替换代码中的字符缓冲区.

    修正后的代码如下:

修正结果

    

        这个结果似乎没什么用!

C++程序反编译笔记(10) 字符串资源丢失的评论 (共 条)

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