SocksGun源码(类SocksCap)

本文档介绍了一个名为SocksGun的程序,它通过HOOK API技术替换wsock32.dll中的connect函数,从而实现类似sockscap的功能。该程序支持socks5协议,包括TCP连接和明文密码认证。主要涉及的API包括LoadLibraryA、LoadLibraryW、LoadLibraryExA、LoadLibraryExW、GetProcAddress和connect,以及错误处理和日志记录功能。
摘要由CSDN通过智能技术生成
//利用HOOK API技术替换wsock32.dll中的connect函数,达到类似sockscap的功能 cHXspH
//本程序支持socks5.0中的tcp及明文密码认证方式 8xlq5O
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  m
#include "string.h" HgyZ-S
#include "Winsock.h" |{nJF-
#include "Dbghelp.h" !Fa
#include "tlhelp32.h" N
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  N
#pragma comment ( lib, "wsock32.lib" ) (J[k1l
#pragma comment ( lib, "Dbghelp.lib" ) o[AiW
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Z)B/Nr
/// gD-]5
//                          // kMVJ
//         定义函数原型           // AlyT[D
//                          // ;m|+
/// ->bH3y
//定义LoadLibraryA()函数原型 [W
typedef HMODULE (WINAPI * LOADLIBRARYA_PROC) ( LPCSTR lpFileName ); ]fka'E
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  zmEJ
//定义LoadLibraryW()函数原型 =8s"
typedef HMODULE (WINAPI * LOADLIBRARYW_PROC) ( LPCWSTR lpFileName ); '(!$le
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  3EMp[
//定义LoadLibraryExA()函数原型 t5W~uR
typedef HMODULE (WINAPI * LOADLIBRARYEXA_PROC)( LPCTSTR lpFileName, %l.v41
HANDLE hFile, E
DWORD dwFlags ); [)+
//定义LoadLibraryExW()函数原型 do/
typedef HMODULE (WINAPI * LOADLIBRARYEXW_PROC)( LPCWSTR lpFileName, 3[4z
HANDLE hFile, ;yLG
DWORD dwFlags ); C]!
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  'PN&7
//定义GetProcAddress()函数原型 R
typedef FARPROC (WINAPI * GETPROCADDRESS_PROC) (HMODULE hModule, >'N
LPCSTR lpProcName ); B
//定义connect()函数原型 kGj
typedef int (WINAPI * CONNECT_PROC)(SOCKET s,           y:[`
const struct sockaddr FAR *name, '
int namelen ); =
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  J{%8
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  2Y
/// #(
//                          // M~O
//         定义全局变量           // Y
//                          // IcIZ
/// 6o1*
LOADLIBRARYA_PROC OriginalLoadLibraryA; // 保存LoadLibraryA()函数地址 JztP9
LOADLIBRARYW_PROC OriginalLoadLibraryW; // 保存LoadLibraryW()函数地址 ):h%zC
LOADLIBRARYEXA_PROC OriginalLoadLibraryExA; // 保存LoadLibraryExA()函数地址 j
LOADLIBRARYEXW_PROC OriginalLoadLibraryExW; // 保存LoadLibraryExW()函数地址 <# Y
GETPROCADDRESS_PROC OriginalGetProcAddress; // 保存GetProcAddress()函数地址 `z{cj
CONNECT_PROC OriginalConnect; // 保存WSOCK32.dll中的connect()函数地址 7+
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  8*=
HANDLE hCurrentProcess; // 当前进程句柄 Uu
HANDLE hLogFile; // 日志文件句柄 zm<
char strMcastIp[128]=""; // 模拟广播的多播服务器地址 c
char strGameRoomIp[20] = ""; // 作为游戏房间的用户地址 C~rK?
unsigned short GameRoomPort = 0; // 作为游戏房间的用户端口 8SY
unsigned short RealBindPort = 0; ukA
unsigned short GameServerPort = 0; // 游戏服务器的端口 $~,
SOCKET sockThread; // 传递给保活线程的SOCKET变量 G
bool MyIpIsTrue = false; // 用来标识本机IP是否为真实IP的参数 q_pJ^8
bool RedirectPacket = true; // 用来标识是否需要服务器做包转发 ?rV:
sockaddr_in connectAddr = {0}; // 用来存放connect的socket地址 hmkX2:
struct hostent FAR * pHostent; // 本机IP地址 Wh
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  !*k
//定义协议族 HKZm
static char afString[30][20] = { {"NULL"},{"AF_UNIX"}, {"AF_INET"}, {"AF_IMPLINK"}, bA-(
{"AF_PUP"}, {"AF_CHAOS"}, {"AF_IPX"}, {"AF_ISO"}, #
{"AF_ECMA"}, {"AF_DATAKIT"}, {"AF_CCITT"}, {"AF_SNA"}, b6s~d
{"AF_DECnet"}, {"AF_DLI"}, {"AF_LAT"}, {"AF_HYLINK"}, c>
{"AF_APPLETALK"}, {"AF_NETBIOS"}, {"AF_VOICEVIEW"}, ,Ml'
{"AF_FIREFOX"}, {"AF_UNKNOWN1"}, {"AF_BAN"}, {"AF_ATM"}, X
{"AF_INET6"}, {"AF_CLUSTER"}, {"AF_12844"}, {"AF_IRDA"}, >?9C
{"NULL"}, {"AF_NETDES" } }; .G
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  m{FX
/// i4e>
//                          // 2y:&
//          声明子函数           // /
//                          // JCfw
/// w^X:R
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  VNU/f2
//错误代码判断函数 Tip]
void CheckError( int, int, char * ); #,Kd9t
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  -`;pK{
//替换IMPORT ADDRESS TABLE的函数 o^2
int ReplaceIATEntryInOneMod( PCSTR, PROC, PROC, HMODULE ); )r
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  j>9IC6
//替换系统LoadLibraryA()的函数 VI
HMODULE WINAPI __stdcall MyLoadLibraryA( LPCSTR ); K
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  X)> vw
//替换系统LoadLibraryW()的函数 +n
HMODULE WINAPI __stdcall MyLoadLibraryW( LPCWSTR ); yE]c
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  |e<LU
//替换系统LoadLibraryExA()的函数 9$
HMODULE WINAPI __stdcall MyLoadLibraryExA( LPCSTR, HANDLE, DWORD ); qOD/
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  OP/F
//替换系统LoadLibraryExW()的函数 Ap
HMODULE WINAPI __stdcall MyLoadLibraryExW( LPCWSTR, HANDLE, DWORD ); TU
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  /<tL~
//替换系统GetProcAddress()函数 #@
FARPROC WINAPI __stdcall MyGetProcAddress( HMODULE, LPCSTR ); 6bs(9`
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  H
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Yd
int WINAPI __stdcall MyConnect( SOCKET, 4J?
const struct sockaddr FAR *, +*
int ); 6s
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  7b*
//记录日志的函数 Jt6,
void WriteLogFile( char * ); 8i
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  98
//保存原有的API函数地址的子程序 ~#9
int SaveProcAddress(); !Y
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  mkbK8
//遍历并替换进程内所有模块API函数的子程序 GY0.
int ReplaceAllMod( bool ); F/
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  /
//替换系统函数的函数 $W(VW
void ReplaceFunctions( HMODULE ); /
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  1#C|%
/// *7.
//                          // ~I
//           主函数            // 9!
//                          // ~IS
/// ?}BY
BOOL WINAPI __stdcall DllMain( HINSTANCE hinstDLL, ,
DWORD fdwReason, -(X#D5
LPVOID lpvReserved ) wRh<(j
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Ty3
char chrRead[2]={ 0, 0 }; PL81
char strFile[255] = { 0 }; w=9U~o
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  a8
switch ( fdwReason ) R%Cy
  { %zAN
case DLL_PROCESS_ATTACH: Gvqjq
//初始化SOCKET )
WSADATA wsa; 9&
WSAStartup( MAKEWORD(2, 1), &wsa ); d >Gkx
//打开日志文件 N>-
hLogFile = CreateFile( "HookApi.log", GENERIC_WRITE, FILE_SHARE_READ,  uk
NULL, CREATE_ALWAYS, NULL, NULL ); '>o<6
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  X
//获取当前进程句柄 .B%S%u
hCurrentProcess = GetCurrentProcess(); |CB_sV
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  :XA17/
SaveProcAddress(); ~a
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  C1y;
//遍历并替换进程内所有模块API函数 #6k
ReplaceAllMod( 1 ); o_C*Yl
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  c
break; $.O
// End of DLL_PROCESS_ATTACH :JM{pJ
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  B=_<
  case DLL_THREAD_ATTACH: break; -lMqih
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  U'4v
    case DLL_THREAD_DETACH: break; qGO$
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  {w
  case DLL_PROCESS_DETACH: d
//当DLL卸载的时候,进行收尾工作 Xc]/fB
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值