目录
在内存窗口中按ctrl+g跳转到字符串408044所在地址,选中这块数据再按ctrl+e编辑
一.总结:
1.ollydbg201和110界面设置不太一样,新电脑打开可能字体比较小,有需要修改字体
2.ollydbg中编码有unicode16,utf8,ascii,windows系统默认的936gbk编码可能会输出乱码
这里推荐两篇文章彻底弄懂 Unicode 编码,Unicode字符编码
3.有两种patch方式修改字符串
①第一种是直接修改字符串缓冲区的值,这样做并不安全,尽量不要改变字符串长度,可能会影响到后续的代码区
②第二种是在一块空内存区域写字符串并且修改调用字符串的地址,这样更安全更自由,对字符串长度的限制就解除了.
4.找主函数入口有两种方法
①可以通过单步调试,一直按f8直到控制台输出数据的方式找到主函数入口,但这样不适合代码量比较大的情况.
②通过search for ,all referenced strings找到引用的字符串可以更快的找到函数入口
5.记得保存修改后的程序
二.编译测试程序
在visual c++中选择win32 release编译一个helloworld程序,记得要加system pause,不然程序运行一闪而过.然后找到编译出来的exe文件,用ollydbg打开,书上用的应该是ollydbg110,我个人开始用的是201,界面略有不同.
三.修改字体
打开如果发现文字很小可以修改,选择左上角options options fonts里面的change即可调整字体
然后在窗口中右键就可以选择字体
四.通过查找字符串快速找到主函数
这里已经找到过过主函数入口,并且打了断点,401000即主函数所在位置
我们可以通过右键快速查找字符串
最左边是这条语句的地址,command里面可以看到压栈操作,说明字符串保存在首地址00408044的内存单元中
按ctrl+g跳到401000,发现两条打印语句
五.修改字符串
方法一:直接修改内存缓冲区数据
在内存窗口中按ctrl+g跳转到字符串408044所在地址,选中这块数据再按ctrl+e编辑
可以看到已经改成了"world!hello,"
方法二:在另一块内存区域写入字符串
下面这条语句用另一个方法,在内存中找到一块空值区域,这里选择的是首地址40BBC0,选中区域ctrl+e编辑,我在utf-8里输入了"世界很好!",
保存字符串之后在cpu窗口修改指令,按空格或者双击即可,修改地址到40bbc0
六.保存修改后的文件
右键内存地址窗口,edit,选择copy to executable
会弹出一个新窗口,然后再右键选择save file,修改名称后缀改为.exe即可保存修改后的程序
七.运行输出,乱码问题
按f9运行发现第二个函数输出了乱码,这里是因为windows控制台默认编码不是utf-8
右键控制台可以查看属性,发现是936编码,测试过如果修改成utf-8会正常显示
只需要在语言 ,右边栏管理语言设置,更改系统区域设置勾上beta版确定然后重启即可修改为utf-8.不过这个修改会导致一些使用936编码的汉化软件出现乱码问题,比如之前使用的visual c++6.0中文版,界面选项一堆乱码,这里就不修改演示了.