打补丁的对象可以是文件, 内存, 代码, 数据等
例子采用helloworld程序, 把hello world改成where is my pant?
方法一 修改字符串buffer
(注意直接覆盖原字符串不要越界, 如果覆盖了重要数据会引发内存错误
断点打到main函数
数据窗口go to 4092A0
ctrl + E打开编辑窗口, 修改字符串
注意字符串最后应该以null结尾, 此处例子中自带了null, 所以没有额外修改null, 如果没有需要自己在hex中修改null
保存到可执行文件, 就可以把补丁修改之后的效果永久保存下来
数据窗口中选中修改后的字符串
方法二 其他内存区域生成新字符串再传给消息函数
选取内存区域需要PE和VA的知识, 这里乱选即可(
在数据窗口中下拉, 发现null的沙漠地区------这里有个小知识, 应用程序加载到内存时会有一个最小的分配大小, 一般为1000, 即便用不完也会分配1000, 所以内存数据最后大部分情况下都是null的荒漠 这里也就是可以乱玩的地方了
随意修改一处地址的数据为where is my trousers? 然后修改调用消息函数前压栈的参数就可以改变输出的字符串.
空格/双击修改汇编代码
但是这样修改的程序不能保存, 因为虽然可以改变内存内容, 但是实际上这样的数据不符合可执行文件的规则, 所以另存为可执行文件会报错.