OD内存修改字符,hook方法
本帖最后由 shaokui123 于 2025-2-10 16:18 编辑一个标签程序,没有壳保护https://www.simplestickynotes.com/?hl=ch&utm_source=ssn
主程序就俩文件
https://www.123684.com/s/rBk9-hzKWv
比如想修改程序里的文字(This computer program is protected by copyright),资源编辑工具、hex和od等都搜不到字符串,是字符串加密了,在od内存中可以搜索到
这是od内存中搜索到的,但是内存地址每次都变化
在这个内存找到的地方修改,可以实现程序文字的修改,但是无法保存
参照这个帖子里的经验,Inline hook也选上了,但是生成补丁实际没有效果
https://www.52hb.com/thread-47269-1-1.html
在内存搜索到的字符上下内存访问断点,再运行断在这块就不会了
以上是分析过程,需求是:
1、下断访问后断下的后续操作,是否可以找到调用call进行修改保存等,或者怎样修改寄存器里信息
2、通过补丁工具怎样操作正确可以修改字符
3、是否还有更简单的方法,别人高手可以写一个hook补丁实现了。
如果你是隔壁论坛同名网友的话,我在那里的回复你应该看过了。
那贴的回复不够完善,我重新整理了一下,用大白做了一个示例,这样你好理解一些。
以下的基址我设置成了0x400000,会更容易找到地址。
1、Hook的时机
最早的时机出现在0x418C2F,这里是每段资源数据解码完成的地方,Hook这里就能改掉相应的字符串,
但是这里只能改英文,改中文会乱码,因为文字显示前还要转成Unicode,默认是转英文,转成中文需要做修改。
如果要汉化有两种方法:转码前和转码后,转码前只需要将字符串替换成GBK编码的中文,然后改Code Page就可以了,
转码后则需要自行将字符串转成中文Unicode后替换内存,显然第一种方法更简单些。
不管在什么时机转,关键的函数是MultiByteToWideChar,但这个API不止一个地方调用,
经过测试,如果要修改“About”里的字符串需要在0x409BC0断下,断点条件设置为“strstr(utf8(),"UIAbout")”。
2、大白补丁制作(需要制作两条补丁数据)
(1)判断lpMultiByteStr指向的内存是否包含标识字符串“UIAbout”,如果包含则修改相应的字符串为GBK中文。
(2)将CodePage修改为936(中文),注意在API断下时CodePage已经PUSH到堆栈,需要修改堆栈数据。
下图是修改后的效果:
补丁下载:
链接:https://pan.baidu.com/s/1lt6y55YSXkgYewF3hS-xcA
提取码:ksft
用大白生成补丁后解压version.dll和PYG.dll放入软件目录即可
这个很简单,用特征码打补丁就行了,简简单单 用大白那个补丁工具 弃天帝520 发表于 2025-2-10 14:49
这个很简单,用特征码打补丁就行了,简简单单
我帖子里已经发图了就是特征码补丁,也选hook先解码再补丁了,是方法不对还是别的啥 痴迷的逍遥 发表于 2025-2-10 16:12
用大白那个补丁工具
不太熟练,朋友能帮忙看看指导一下吗 如果是直接字符搜索可以的话,那么难度很低,关键这是内存搜索才可以的,以前没遇见过 谢谢分享 大白有字符数量限制,这个程序用大白是汉化不完的 nayiye 发表于 2025-2-12 13:02
大白有字符数量限制,这个程序用大白是汉化不完的
别人说了这个事情,现在我想知道的是方法,用的工具也是xh
页:
[1]
2