筱虎哟 发表于 2023-4-15 21:53

在OD里怎么找到DLL的实时基址?

需要给DLL打补丁,结果每次打开的入口都不一样,在OD里怎么找到DLL的实时基址?{:5_184:}



boot 发表于 2023-4-15 21:53

筱虎哟 发表于 2023-4-15 22:24
偏移怎么得出来的呢?假如基址是00401000那么它的偏移怎么算的?

假设当前待补丁的绝对地址是004010cc
查看od的模块窗口e,得到dll基址00401000
则相对偏移va = 004010cc - 00401000 = cc

【By】岁月无痕 发表于 2023-4-15 22:02

模块+dll偏移基址

筱虎哟 发表于 2023-4-15 22:24

【By】岁月无痕 发表于 2023-4-15 22:02
模块+dll偏移基址

偏移怎么得出来的呢?假如基址是00401000那么它的偏移怎么算的?

boot 发表于 2023-4-15 22:35

筱虎哟 发表于 2023-4-15 22:24
偏移怎么得出来的呢?假如基址是00401000那么它的偏移怎么算的?

dll模块基址(base)+dll相对偏移(rva) = dll实时地址(绝对偏移va)

可以试试这个cm
https://www.52hb.com/thread-58350-1-1.html

筱虎哟 发表于 2023-4-15 22:47

boot 发表于 2023-4-15 22:37
假设当前待补丁的绝对地址是004010cc
查看od的模块窗口e,得到dll基址00401000
则相对偏移va = 004010cc...

如果E模块基址为00401000
需补丁的地址为00428001
则实时基址=00401000+(00428001-00401000)?

boot 发表于 2023-4-15 23:30

筱虎哟 发表于 2023-4-15 22:47
如果E模块基址为00401000
需补丁的地址为00428001
则实时基址=00401000+(00428001-00401000)? ...

如果E模块看到基址为00401000 -> 这是模块基址 base(一般OD的模块“E”界面里可以查到,比如易语言的exe模块基址一般是00400000)
需补丁的地址为00428001   -> 这是绝对偏移 va
则相对偏移rva = 00428001 - 00401000 = 27001 = va - base
具体情况,建议你截图说明。

筱虎哟 发表于 2023-4-15 23:54

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






所以它的实时基址=1B06000+73180?


筱虎哟 发表于 2023-4-15 23:58

筱虎哟 发表于 2023-4-15 23:54
所以它的实时基址=1B06000+73180?

但是它的模块基址每次打开也是不一样的{:5_187:}

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

【By】岁月无痕 发表于 2023-4-15 22:02
模块+dll偏移基址
@岁月无痕
页: [1] 2 3
查看完整版本: 在OD里怎么找到DLL的实时基址?