吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1031|回复: 17
收起左侧

[求助] 别人exe写了一个dll通过导入想替换exe原先call的地址,现在自己dll地址总是变化

[复制链接]
zhuayi112 发表于 2023-11-9 20:11
extern "C" int __declspec(dllexport) add(int a, int b);

int __declspec(dllexport) add(int a, int b)
{
return a + b;
}

别人的exe,把exe用x32dbg,动态加载反汇编后看到一段地方有个call 0x123456 , 这call 0x123456 ,分析后它是一个add的方法。 于是我自己写了一个dll,模仿出add的方法。
现在用 StudyPE+ 把我写的a.dll 导入进去,并添加add方法。
我用直接用x32dbg,在符号里找到a.dll,然后找到这a.dll里add的地址。复制这地址把 call 0x123456 替换成这个a.dll方法add在exe显示的地址。
每次加载好像地址都会变导致出问题,请问这地址要怎么计算才是真正的a.dll 里add方法的地址。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
zhangzheh + 1 + 1 感觉好厉害的样子

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

iamok 发表于 2023-11-9 21:00
用detour来hook call
 楼主| zhuayi112 发表于 2023-11-9 21:11
iamok 发表于 2023-11-9 21:00
用detour来hook call

你好除了HOOK 没办法了吗?我自己写个dll然后用导入方法把dll导入进去,这时候不能直接 把call 0x1223456 改成 OD里看到的 dll 里方法的入口地址吗?
白陌陌 发表于 2023-11-9 21:12
我水平一般哈,仅供参考!
0x0 用hook的办法:给你的dll加上hook功能,取出自己dll中add()方法的地址,然后hook目标程序,修改目标程序的代码以指向你的add()方法的地址
0x1 用API获取dll地址:首先先要取出你的dll的基址(GetModuleHandle),然后查看你dll的导出表,找到add()方法的偏移量(GetProcAddress),用基址+偏移得到地址
董督秀 发表于 2023-11-9 21:15
zhuayi112 发表于 2023-11-9 21:11
你好除了HOOK 没办法了吗?我自己写个dll然后用导入方法把dll导入进去,这时候不能直接 把call 0x1223456 ...

通过纯汇编可以实现,动态定位。无需Hook。
 楼主| zhuayi112 发表于 2023-11-9 21:25
董督秀 发表于 2023-11-9 21:15
通过纯汇编可以实现,动态定位。无需Hook。

大佬问下动态定位是怎么实现的,能大概的介绍下吗?我现在是用pe把dll导出的方法添加到exe中。然后用od在符号里找到dll导出的方法入口地方的地址,直接修改exe里call add 的地址替换成dll里方法的add地址
董督秀 发表于 2023-11-9 21:34
zhuayi112 发表于 2023-11-9 21:25
大佬问下动态定位是怎么实现的,能大概的介绍下吗?我现在是用pe把dll导出的方法添加到exe中。然后用od在 ...

可以用汇编实现loadlibrary,call 123456h 替换成 call 空白地址 ,在空白地址 加上汇编的代码,该处的代码作用是载入a.dll,注意a.dll的名称。之后再通过汇编获取a.dll的基址,加上偏移,定位到a.dll内部你自己写的all函数里,把这个地址保存到寄存器,最后再call寄存器。
 楼主| zhuayi112 发表于 2023-11-9 21:36
董督秀 发表于 2023-11-9 21:34
可以用汇编实现loadlibrary,call 123456h 替换成 call 空白地址 ,在空白地址 加上汇编的代码,该处的代 ...

懂了,大佬请问下这样修改后给exe加壳不影响内容吧
xlhwxyh 发表于 2023-11-9 21:46
用  GetModuleHandle   获取模块句柄,这个句柄它其实就是模块的基址,也就是模块加载地址,
偏移量 = 单前地址 - 模块基址;

可以用偏移量来计算新的地址!!!!!!!!!
实际地址 = 模块基址 + 偏移量;

 楼主| zhuayi112 发表于 2023-11-9 23:24
xlhwxyh 发表于 2023-11-9 21:46
用  GetModuleHandle   获取模块句柄,这个句柄它其实就是模块的基址,也就是模块加载地址,
偏移量 = 单 ...

感觉很复杂,大佬论坛里有这方面的资料和例子吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:33

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表