APIHOOK代码共享!!!(100)

  • 主题发起人 主题发起人 xernet
  • 开始时间 开始时间
X

xernet

Unregistered / Unconfirmed
GUEST, unregistred user!
关于做SOCKS5代理客户端的问题,当运行SOCKS5代理客户端后,本机所有的网络都要 经过SOCKS5代理,有人提出用SPI和APIHOOK,因为学过socks5加上好奇所以自己动手编写代码研究了一下,我选择了APIHOO方向。我的思路是这样的,HOOK了connect函数,在我的处理代码里完成socks5 TCP代理,当我运行我的代码后确实本机所有的TCP网络连接都经过我的TCP代理出去了,这只是完成了一半,还有一半就是socks5 UDP代理,UDP我想这样处理再HOOK了connect函数后,然后判断是TCP协议还是UDP协议,然后就分别进行处理,也就是我HOOK的connect函数进行socks5全部处理(TCP和UDP), 代码能够正常编译和运行,但是打开软件的时候就提示出错然后就自动退出,比如IE和迅雷,我又修改了方案,HOOK了connect函数 进行socks5 TCP代理封装,HOOK了sendto函数进行socks5 UDP代理封装,因为sendto函数参数里有实际发送的UDP数据(var buf),其结果还是一样的,现在晕了,真的不知道怎么样做了,是HOOK错了函数还是另HOOK别的函数?请高人指教,完成后 我决定给大家共享代码,留下你们的邮箱。
 
hook connect, redirect to local socks5 proxy, finished.
 
API HOOK的话:对于TCP:1:必须处理阻塞和非阻塞两种情况.例如,假如原程序是消息SOCKET,CONNECT成功后,PROXY发送的数据会触发原来的程序的RECV.2:对于IE,需要抛弃连接127.0.0.1的连接实际上,俄罗斯有个东西是完成这功能的,SOCKET5/HTTP/SOCKET4都处理了,开源的Delphi代码.有很多年历史了,非常完善.不过代码很庞大,没有仔细看流程.如果你要全部都代理,SPI是比API HOOK好很多的.因为很多进程(例如服务),在你的程序启动前已经连接了.
 
TCP已经处理得了,关键还是UDP处理,我把UDP代码分离出来进行测试,也就是说不把UDP加入HOOK的DLL文件,其结果正常运行,说明UDP代码没问题,HOOk了connect函数进行TCP也能正常运行。。。但是把TCP和UDP同时在HOOK的dll文件里启动软件的时候就出错了,HOOK代码本身可以正常运行。。
 
对于SPI我安装好了框架,只是还没有把SOCKS5代码加入进去,SPI我用VC++开发的。忘记说了,我的HOOK代码用的是陷阱式可以正常运行,用改引入表式的时候一点反应也没有,用的是XP系统,也不知道怎么回事。
 
平均点都50吧。。。
 
jiangjiangyin@163.com
 
后退
顶部