链 接: http://bbs.pediy.com/showthread.php?t=56036
好长时间没贴东西了,今天就来贴点东西,废话就不说了直接进入主题,喜欢的就支持,不喜欢的就看乐和!!
今天说点什么呢~我们今天就说HOOK,实际提到这个大家都知道它的功用,如果要是抓取消息那肯定是用下面的函数:
今天我就给大家说一种别的方法来抓取WINDOWS消息的方法,这种方法虽然有点局限性,但是我感觉很不错的哦!用我
的方法,可以抓取一个进程中的所有窗口的消息。不信就跟我一体来试试,如果看不太明白,那只好去学学相关知识了。我们
选择的方法就是HOOK API的方法。很多朋友都说网络上流传的HOOK API的很多,但是我碰到的都是HOOK那个MessageBoxA函数,
没什么意思,今天我就给大家一个全能的方法,我们不用了解太多PE结构,非要在IAT表中修改,我们先来看看我们要处理的
API为:
我想一般对这个函数,比较陌生点,用的人就不多了,就像我有时用ntdll.dll中LdrGetDllHandle这类函数一样。因为它的功
能很多时候都不用知道的:)。
我们为了能抓到消息,而且不用HOOK这类API函数,我们要在这个函数上做手脚,或许可以对DefWindowProc()这个函
数也做手脚,但是我想我要一个就可以了呵呵!因为我这里举例是用自定义消息为例子的,为什么要用自定义消息呢!我还想
说明一点问题就是远程注入进程。
实际对于一个进程来讲,只要给它放个DLL那么它就不得不听你的了,我们可以给这个DLL发送一些命令,让它按照命
令来操作我们的目标进程。有的时候我就特别的喜欢‘该死’,他做的系统就给我们一个空间,也就是0x400-0x7FF是为用户自
定义的消息,我们就可以用如下的方法来设置命令:
#define WM_CMD_EXIT WM_USER+100 //退出进程
#define WM_CMD_GETHWND WM_USER+101 //获取HWND句柄
#define WM_CMD_GETCAPTION WM_USER+102 //获取窗口名称
……等等,我们还可以调用进程的内部函数,让进程做我们想让它做的。实际就举个例子来将,发给命令过去,让QQ不断显示
广告,或定时显示广告,我们几乎就完全操作了进程了。如果没道德,想抓取别人的隐私,那也是顺手而已。可是我在发这篇
贴的时候,还是想过是否要发,因为我觉得我手里的东西就是把双刃剑,能杀这边,也能杀那边。希望学会的朋友都不要把它
用于搞破坏上。
注入进程的方法太多了,我就不说了,我把它写了一个类,大家就可以拿去直接用了。
我们用上面的类就可以轻松的把一个DLL注入到别的进程,并且还可以轻松的释放。做到不知不觉。
话归前题,我们要怎么样才能对CallWindowProc这个API做手脚了。我们可以看到这个函数的入口地方很简单:
我们定义了一个函数类型:
typedef LRESULT (*CALLPROC)(WNDPROC,HWND,UINT,WPARAM,LPARAM,int);
这样我们就可以轻松的调用这个函数了。
我们只需要把:
77D1E900 E8 E9DCFFFF call 77D1C5EE
改为我们自己的就可以了。
分析好以后,我们就在我们准备好的DLL中加入我们代替它的回调函数:
我们在DLL加载时,把上面那个地方改掉就可以了。
只加载不算完啊,我们要在DLL退出前把它再改回来的,要不程序会不正常的。
在回调函数前必须加 CALLBACK,请大家要注意了,因为加与不加在汇编语言里是完全不一样的:
没加的,类似如下,没加会在堆栈溢出,必须手动修改ESP,才能正常:
再需要说明一下:
Call 地址不是实际地址是要算的哦
目的地址-当前地址-5
就是CALL 的值,这个是个简单点的公式!!!大家用的着哦!
如果,大家要是在,DLL中加入了窃取信息的代码,那么它就是个木马了,只要发个消息它就工作,或者设定在收到某个消息后才工作,我想要比那些网上的木马高明点,但是我还希望大家不要这么做,因为,这样做的后果是可怜的哦:)。还有就是不要拿系统进程做实验,容易死机 eek:
好了,到现在我们所做的就完工了,还算是基本完美吧!大家发给消息给被注入进程,可以看到有如下图的提示:
以后,再给大家说,怎么调用进程内部函数,这一篇就算结束了886~~~
看到大家对我的代码提出了很好的意见,我很感谢!我粗略的看了看,改的地方比较多,我不做了,大家自己做的时候要注意了,用完HANDLE别忘记 CloseHandle,这个习惯我正在改..大家有这个习惯的也注意了哦~~~程序的稳定,很重要的点滴..最近比较烦:(...