筱虎哟 发表于 2023-4-16 00:01

boot 发表于 2023-4-15 23:30
如果E模块看到基址为00401000 -> 这是模块基址 base(一般OD的模块“E”界面里可以查到,比如易语言的e ...

@boot

boot 发表于 2023-4-16 00:10

筱虎哟 发表于 2023-4-15 23:58
但是它的模块基址每次打开也是不一样的

所以我一再强调,先计算 相对偏移 rva。不管基址如何变,相对偏移rva是永远不会改变的。
在你的图例中,对于Hook.dll
其模块基址base是1B060000
其绝对地址(绝对偏移)va是1B0D3180
则相对偏移是 rva = va - base = 1B0D3180 - 1B060000 = 73180
前面我已经说过,相对偏移rva永远不变。

举例,
比如你下一次打开OD的时候,查看模块E。得到新的基址,比如看到的是1C060000
加上相对偏移 1C060000 + 73180 = 1c0d3180
则ctrl+g 跟随1c0d3180 ,这时就是当前的破解地址了。

boot 发表于 2023-4-16 00:12

boot 发表于 2023-4-16 00:10
所以我一再强调,先计算 相对偏移 rva。不管基址如何变,相对偏移rva是永远不会改变的。
在你的图例中, ...

@筱虎哟 详看这个回复。

筱虎哟 发表于 2023-4-16 00:15

boot 发表于 2023-4-16 00:12
@筱虎哟 详看这个回复。

我的意思是补丁里面的实时基址填哪个?补丁不会自动获取模块基址再加上你的偏移去找吧?{:5_187:}

boot 发表于 2023-4-16 00:18

筱虎哟 发表于 2023-4-15 23:58
但是它的模块基址每次打开也是不一样的

这个xh补丁工具,“实时基址”和“内存地址”按照当前OD里所看到的数据,如实填写。

实时基址 = 1B060000
内存地址 = 1B0D3180

筱虎哟 发表于 2023-4-16 00:32

boot 发表于 2023-4-16 00:18
这个xh补丁工具,“实时基址”和“内存地址”按照当前OD里所看到的数据,如实填写。

实时基址 = 1B06000 ...

这样下次运行dll的话也能实现补丁吗?

boot 发表于 2023-4-16 00:42

筱虎哟 发表于 2023-4-16 00:32
这样下次运行dll的话也能实现补丁吗?

可以。

但这个Hook.dll具体是那个exe调用的? 你运行补丁,启动exe后。附加exe,OD里核实Hook.dll模块是否被修改。

我记得baymax工具也可以补丁动态基址。或者你自己编译一份劫持补丁。

281028829 发表于 2023-4-16 13:08

用dll劫持吧,取模块基址+偏移,再补丁数据就好

筱虎哟 发表于 2023-4-16 17:29

281028829 发表于 2023-4-16 13:08
用dll劫持吧,取模块基址+偏移,再补丁数据就好

易语言吗?有源码吗?我不知道怎么取模块名称{:5_117:}

boot 发表于 2023-4-16 17:37

筱虎哟 发表于 2023-4-16 17:29
易语言吗?有源码吗?我不知道怎么取模块名称
易语言没有,只有c++的。
Edit:看错回复了...
页: 1 [2] 3
查看完整版本: 在OD里怎么找到DLL的实时基址?