读书人

卖身求BCB的HOOK解决方法

发布时间: 2012-02-11 09:51:34 作者: rapoo

卖身求BCB的HOOK
http://community.csdn.net/Expert/topic/5497/5497211.xml?temp=5.178469E-02
这帖是我以前发的,由于我的失误,没有把问题讲清楚..所以浪费了这么多时间,所以还是开新帖再说一下
============================================================
有程序A,程序A内有段代码:
005884CF 90 NOP
005884D0 56 PUSH ESI
005884D1 57 PUSH EDI
005884D2 8BF9 MOV EDI,ECX
005884D4 6A 18 PUSH 18
005884D6 E8 75481600 CALL, ElementC.006ECD50
我现在要做程序B,希望点击程序B上的一个按钮,程序A就会执行上面这段代码
=============================================================
我之前一直都把这段代码放在程序B的按钮事件里,结果一执行就出现内存写入错误,原来是由于程序B内没有这段代码可以执行而导致的。请大家帮忙,给个较为详细的代码
可以参考一下这个http://www.pcwordbook.com/web010/49921.shtml

[解决办法]
ElementC函数的调用方式是怎样的?是__stdcall吗?如果是c方式的调用方式(BCB默认的)
请在CALL, ElementC.006ECD50后将变量出栈
[解决办法]
如果知道函入口,清楚用方式的,在C/C++等言面就可以解,不需要用到ASM。
__stdcall void (*pFun)(void);
(void *)pFun = (void*)(0x00593910);
pFun();
是要知道函原型及入口地址。使用DLL中的函是一的。

如果使用自己定的用定,那就自己用ASM解。
[解决办法]
楼主的意思是程序B调用程序A里的代码? 两个进程之间的内存空间是相互独立的,也就是说A里的0x00593910和B里的0x00593910是不一样的,so A程序call 0x00593910没问题,B就不行.

在B里要调用A里的代码,可以考虑用CreateRemoteThread. 或者类似于API hook的方法进入A空间,然后再call 0x00593910.不过这种方法要使用DLL,有点小题大作的感觉,呵呵
[解决办法]
DLL注入最简单的方法是使用SetWindowsHookEx来产生一个全局Hook,这个Hook可以什么也不做(只是简单地CallNextHookEx),它的目的是让Windows把这个DLL注入到所有进程中去.

你可以看看 <Windows 95 系统程序设计 大奥秘> 的第10章,侯捷译的,是可以免费下载的.

在偶的blog里的关于API Hook类的说明里也有一个很简单的演示

读书人网 >C++ Builder

热点推荐