能力值:
( LV2,RANK:10 )
26 楼
太好了,好文一定要顶
能力值:
( LV2,RANK:10 )
27 楼
楼主为啥子?
我下 下来的代码运行不起,还报错:cannot open include file 'res\IPPack,rc2'
而且软件运行的也不理想
能力值:
(RANK:1010 )
28 楼
最初由 我爱罗 发布 楼主为啥子? 我下 下来的代码运行不起,还报错:cannot open include file 'res\IPPack,rc2' 而且软件运行的也不理想
在上传附件的时候不小心把图标资源res文件夹删了,
编译报错,一直按F4,把对应行注释掉就行了,不影响程序执行
运行不理想很正常,
这个小软件的目标是演示HOOK API 及插入DLL的实际应用,
仅仅HOOK了send, sendto, recv, recvfrom四个函数,如果目标进程用其他的函数进行数据传输的话,就根本不起作用
真正要效果好的话,要在驱动级别实现
能力值:
( LV2,RANK:10 )
29 楼
回完贴,然后开始仔细看
能力值:
( LV2,RANK:10 )
30 楼
顶一下,收藏慢慢学习!
能力值:
( LV2,RANK:10 )
31 楼
不错
如果论坛多几个北极
就好了
能力值:
( LV12,RANK:530 )
32 楼
作得想个毕业设计,恐怕真是毕业设计的话老师没几个看得懂的。
能力值:
( LV2,RANK:10 )
33 楼
好象,不能截获数据包
能力值:
( LV2,RANK:10 )
34 楼
学习之中...............
能力值:
( LV2,RANK:10 )
35 楼
版主:好象,不能截获数据包,我都调试了两天了,
我都快疯了.你能把调试好的,能截获数据包的程序发给我吗?
我的把它搞明白啊.
我的EMAIL:monk0123456@126.com
能力值:
(RANK:1010 )
36 楼
最初由 我爱罗 发布 版主:好象,不能截获数据包,我都调试了两天了, 我都快疯了.你能把调试好的,能截获数据包的程序发给我吗? 我的把它搞明白啊. 我的EMAIL:monk0123456@126.com
已经给你发了
这个帖子的附件里也有
能力值:
( LV2,RANK:10 )
37 楼
我写了一个简单的通讯程序,为什么不能捕获数据包了?
为什么我运行这个程序的时候,并不是像你在贴子上演示的呢?
我的邮箱不能发邮件了,你可以加我的QQ吗?
QQ:279405290
能力值:
( LV2,RANK:10 )
38 楼
不错,顶一下先。
能力值:
(RANK:1010 )
39 楼
最初由 我爱罗 发布 我写了一个简单的通讯程序,为什么不能捕获数据包了? 为什么我运行这个程序的时候,并不是像你在贴子上演示的呢? 我的邮箱不能发邮件了,你可以加我的QQ吗? QQ:279405290
HOOK_send.Hook ( "wsock32.dll", "send", (FARPROC)MY_send ) ;
HOOK_recv.Hook ( "wsock32.dll", "recv", (FARPROC)MY_recv ) ;
HOOK_sendto.Hook ( "wsock32.dll", "sendto", (FARPROC)MY_sendto ) ;
HOOK_recvfrom.Hook ( "wsock32.dll", "recvfrom", (FARPROC)MY_recvfrom ) ;
注意这里,我HOOK的是wsock32.dll
而你的TcpServer用PE打开后没有wsock32.dll,只有win2_32.dll,函数库不同,所以也就是说HOOK失败
这里我的软件写的也有漏洞,在CFEAHook失败时没抱错
你的软件我这里不能编译
#include "../common/InitSock.h"
估计你在这里导入了win2_32.dll
试着让他导入wsock32.dll
#include "winsock2.h"
#pragma comment ( lib, "ws2_32.lib" )
HOOK_send.Hook ( "wsock32.dll", "send", (FARPROC)MY_send ) ;
HOOK_recv.Hook ( "wsock32.dll", "recv", (FARPROC)MY_recv ) ;
HOOK_sendto.Hook ( "wsock32.dll", "sendto", (FARPROC)MY_sendto ) ;
HOOK_recvfrom.Hook ( "wsock32.dll", "recvfrom", (FARPROC)MY_recvfrom ) ;
或者你可以直接把wsock32.dll直接改成win2_32.dll
总之问题就在这里,知道了原因,至于怎么改都无所谓了
由于我的失误,对你在学习时造成不必要的麻烦,深感谦意
能力值:
( LV2,RANK:10 )
40 楼
好文章,学了很多东西
能力值:
( LV6,RANK:90 )
41 楼
支持一下
能力值:
( LV2,RANK:10 )
42 楼
真是强人呀
我要是会就好了
能力值:
( LV6,RANK:90 )
43 楼
强烈支持学习中...
能力值:
( LV4,RANK:50 )
44 楼
支持楼主,好铁
能力值:
( LV2,RANK:10 )
45 楼
第一次看的时候,没看明白,所以没回贴
今天看明白了点,所以回贴,做个记录点,嘻嘻
能力值:
(RANK:170 )
46 楼
最初由 sbright 发布 大哥如果写文章太累,可以把自己可以发的代码发出来,写个大概说明就好. 其他牛b的大虾们也支持一下啊,多发发你们的程序.强烈支持北极星,来,亲一个.....
能力值:
(RANK:210 )
47 楼
最初由 prince 发布 北极星辛苦!
能力值:
( LV2,RANK:10 )
48 楼
支持!下载学习学习
能力值:
( LV8,RANK:130 )
49 楼
1。一般的方法使用CreateRemoteThread()在目标进程中创建一个thread,让该thread来LoadLibrary(你的DLL)。
到目前为止我在网上看到的该方法的实现代码都基本上雷同,一个共同的大前提是假定在你的process和目标process里,LoadLibrary(A/W)的entry point是一样的。因为LoadLibraryA/LoadLibraryW是kernel32.dll输出的,而该DLL一般而言在不同的进程的virtual memory space里是在同样的地方(不同的Windows版本倒是有可能不同),不太会被rebase。所以看看你自己的进程里LoadLibrary的起始地址,就可以假定目标进程的LoadLibrary也是同样的起始地址。
2。用GetProcAddress()可以得到API的起始地址。但kernel32.dll是可以被rebase的,如果你的进程或者目标进程里的该DLL ImageBase变了,你的代码插入程序不会有事情,创建的远程线程倒是会垮掉。
3。这里作者的代码,比如(5)封装HOOK API入口地址覆盖到CFEAHook类,是有bug的。你怎么知道要patch的函数入口点的头5个字节一定是一个指令?万一它的第一个指令是1个到4个字节呢?你要使你的方法尽量通用化,就不能作这个假定。可以参考微软的Detours (http://research.microsoft.com/sn/detours/),看看它的entry point patching是如何做的。
4。API hook(SetWindowsHookEx):该方法的前提是进程有UI,或者说有user32.DLL。对Console program是白搭。
5。Hook的方法很多,可以参考
http://www.codeproject.com/system/hooksys.asp
6。原文:
“2、 存在的难点
由于IAT信息是在可执行文件初始化时经过PE加载器改写的,而不是原本的磁盘文件中的数据。问题就在这里,什么时候才是对IAT进行操作的最佳时机?PE加载器对IAT部分的改写是在什么时候完成的?如果仅仅创建挂起的进程,此时的加载器是否写入IAT信息?“
PE加载器在创建一个进程的时候,CreateProcess(...,CREATE_SUSPENDED, ...),它会遍历程序的import table,把相关的DLL加载进来,更新IAT,然后先是运行该DLL的CRTDllMain(),接着是它的DllMain()。如果该DLL依赖其它的DLL,就先载入其它的DLL,有些类似C++里对象的创建,先做父类的工作(constructor),然后是子类。IAT就是这个时候更新的。一直等到主要的thread context等等资源分配完毕,然后PE Loader就ResumeThread(你的主线程的threadid)。到这个时候DLL里的export table基本上没有用了,因为主程序的IAT里已经有了具体的地址。以后程序运行过程中也不会去看DLL的Export Table,直接到Import Table里去查去了,然后jump。
能力值:
( LV2,RANK:10 )
50 楼
下载来看看,还是源码好点