逆向工程修改MessageBox回显字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逆向工程修改MessageBox回显字符串相关的知识,希望对你有一定的参考价值。

下面使用两种方式修改回显字符串

代码如下:

#include "windows.h"
#include "tchar.h"

int _tmain(int argc, TCHAR *argv[])
{
     MessageBox(NULL,
                L"Hello World!",
                L"www.reversecore.com",
                MB_OK);
    
     return 0;
}

使用VS2015生成Crackme,将Crackme载入OD

技术分享图片

 

1.直接修改字符串缓冲区

通过先前设置的断点找到程序入口后,step info逐步找到MessageBoxW函数地址

技术分享图片

 

在数据区找到对应地址的数据

技术分享图片

 

直接在UNICODE更改数据,值得注意的是使用UNICODE修改字符串后必须以NULL结束,占据2个字节且必须在HEX中添加

技术分享图片

 

在完成上述更改后又将HEX字段末尾处的60涂改为00,我对unicode占据2个字节不明白,姑且这样改,原因见下文。

开始还有疑问,最后的M是啥?后来发现是下个地址空间第一个数据,猜测是起提示作用,防止扩充的字符串溢出

运行结果如下

技术分享图片

在保存程序副本和重复测试的时候发现结果不能重现,说明上述操作只是碰巧成功

技术分享图片

 

多次运行查找原因为:忽略字符串所占地址区域4DBE80----4DBE90;2个HEX表示一个字节,而Unicode字符串必须以NULL结束且NULL占据2个字节,简而言之在4DBE90地址的最后要空出4个0;Unicode编码中采用2个字节表示1个字母;

重新设置Unicode字符串发现操作成功

技术分享图片

 

程序保存运行后也成功修改

技术分享图片

 

 

直接修改的缺陷显而易见,对重改后的字符串长度提出了要求,需要有一定的运气,crack后程序也不稳定

2.使用其它内存区域新建字符串传递消息

在程序未使用的内存区域选择一部分作为新的字符串缓冲区,我选择的是0x004fde60,在新地址中写入自定义字符串,其后运行到MessageBoxW函数,改变push的地址内容使其指向刚选择的内存地址

技术分享图片

 

运行结果如下

技术分享图片

 










以上是关于逆向工程修改MessageBox回显字符串的主要内容,如果未能解决你的问题,请参考以下文章

从植物大战僵尸开始一步一步带你入门逆向工程,

201555332盛照宗—网络对抗实验1—逆向与bof基础

零基础逆向工程40_Win32_14_枚举窗口_模拟鼠标键盘

逆向-攻防世界-CRACKME

逆向及Bof基础实践

bootstrap-fileinput(二:编辑(修改)界面文件的上传,回显,删除(数据库同时删除)的操作 )