一种注入进程,获得完全操控的方法之一

链 接: 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:         

好了,到现在我们所做的就完工了,还算是基本完美吧!大家发给消息给被注入进程,可以看到有如下图的提示:名称:  未命名.jpg
查看次数: 3396
文件大小:  19.6 KB
以后,再给大家说,怎么调用进程内部函数,这一篇就算结束了886~~~


看到大家对我的代码提出了很好的意见,我很感谢!我粗略的看了看,改的地方比较多,我不做了,大家自己做的时候要注意了,用完HANDLE别忘记 CloseHandle,这个习惯我正在改..大家有这个习惯的也注意了哦~~~程序的稳定,很重要的点滴..最近比较烦:(...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
进程注入自己的dll 带有测试dll 路径和要注入的程序可以自己改 hRemoteProcess=OpenProcess(PROCESS_CREATE_THREAD| //允许远程创建线程 PROCESS_VM_OPERATION | //VM操作 PROCESS_VM_WRITE , //允许写 FALSE,dwProcessID); if(!hRemoteProcess) AfxMessageBox(L"无法打开目标进程"); // KillTimer(m_ntime); //计算DLL路径需要多大内存 int cb=(1+lstrlenW(pszLibFile))*sizeof(WCHAR); //使用VirtualAllocEx函数在远程进程的内存地址空间分配DLL文件名缓冲区 pszLibFileRemote=(PWSTR)VirtualAllocEx(hRemoteProcess,NULL,cb,MEM_COMMIT,PAGE_READWRITE); if(pszLibFileRemote==NULL) { AfxMessageBox(L"建立内存失败"); CloseHandle(hRemoteProcess); return; } //使用WriteProcessMemory函数将DLL的路径名复制到远程进程的内存空间 BOOL iReturnCode=WriteProcessMemory (hRemoteProcess,pszLibFileRemote,(PVOID)pszLibFile,cb,NULL); if(!iReturnCode) { AfxMessageBox(L"写入错误"); VirtualFreeEx(hRemoteProcess,NULL,0,MEM_RELEASE); CloseHandle(hRemoteThread); CloseHandle(hRemoteProcess); return; } //计算loadlibraryW入口地址 HMODULE hModule=LoadLibrary(L"C:\\WINDOWS\\system32\\kernel32"); PTHREAD_START_ROUTINE pfnStartAddr=( PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")),"LoadLibraryW"); hRemoteThread=CreateRemoteThread(hRemoteProcess,NULL,0,pfnStartAddr,pszLibFileRemote,0,NULL); if(hRemoteThread==NULL) { //等待线程结束 WaitForSingleObject(hRemoteThread,INFINITE); DWORD RetV; if(GetExitCodeThread(hRemoteThread,&RetV)) CloseHandle(hRemoteThread);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值