shaokui123 发表于 2025-2-10 11:59

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补丁实现了。


lies 发表于 2025-2-10 11:59

如果你是隔壁论坛同名网友的话,我在那里的回复你应该看过了。
那贴的回复不够完善,我重新整理了一下,用大白做了一个示例,这样你好理解一些。
以下的基址我设置成了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

这个很简单,用特征码打补丁就行了,简简单单

痴迷的逍遥 发表于 2025-2-10 16:12

用大白那个补丁工具

shaokui123 发表于 2025-2-10 16:15

弃天帝520 发表于 2025-2-10 14:49
这个很简单,用特征码打补丁就行了,简简单单

我帖子里已经发图了就是特征码补丁,也选hook先解码再补丁了,是方法不对还是别的啥

shaokui123 发表于 2025-2-10 16:16

痴迷的逍遥 发表于 2025-2-10 16:12
用大白那个补丁工具

不太熟练,朋友能帮忙看看指导一下吗

shaokui123 发表于 2025-2-10 16:36

如果是直接字符搜索可以的话,那么难度很低,关键这是内存搜索才可以的,以前没遇见过

学编程的闹钟 发表于 2025-2-11 16:45

谢谢分享

nayiye 发表于 2025-2-12 13:02

大白有字符数量限制,这个程序用大白是汉化不完的

shaokui123 发表于 2025-2-12 13:22

nayiye 发表于 2025-2-12 13:02
大白有字符数量限制,这个程序用大白是汉化不完的

别人说了这个事情,现在我想知道的是方法,用的工具也是xh
页: [1] 2
查看完整版本: OD内存修改字符,hook方法