码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-11-18 12:55:36      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:unicode   断点   sage   完成   程序   push   tle   code   改变   

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

代码如下:

#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回显字符串

标签:unicode   断点   sage   完成   程序   push   tle   code   改变   

原文地址:http://www.cnblogs.com/ghost00011011/p/7856290.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!