//利用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
//关闭日志文件 N5[E8N
CloseHandle( hLogFile ); zv8(t
Sleep( 200 ); L>T
break; 'Ei
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  &~1bD/
    default: w9*
break; eL
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  lXqH1
   } // End of switch 35
  return TRUE; -2X)ib
  UNREFERENCED_PARAMETER( hinstDLL ); =
  UNREFERENCED_PARAMETER( lpvReserved ); U|t
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  J3
//End of DllMain >Sp(
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  h[
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Jq
/// yJ({
//                          // t:@6
//      获取并保存API函数地址的函数      // ec!L
//                          // e
/// :/|+F>
int SaveProcAddress() :Rl::M
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  a~v
//获取KERNEL32.DLL中的LoadLibraryA()函数地址并保存 5
OriginalLoadLibraryA = (LOADLIBRARYA_PROC) k
GetProcAddress( GetModuleHandle("kernel32"), "LoadLibraryA" ); jQTYz"
CheckError( (int)OriginalLoadLibraryA, NULL, "GetProcAddress LoadLibraryA" ); K8
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  ;R&&L
//获取KERNEL32.DLL中的LoadLibraryW()函数地址并保存 L#L#?0
OriginalLoadLibraryW = (LOADLIBRARYW_PROC) U&TL
GetProcAddress( GetModuleHandle("kernel32"), "LoadLibraryW" ); vkQ~XD
CheckError( (int)OriginalLoadLibraryW, NULL, "GetProcAddress LoadLibraryW" ); 27bT
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  'j/C-
//获取KERNEL32.DLL中的LoadLibraryExA()函数地址并保存 Zg.w{
OriginalLoadLibraryExA = (LOADLIBRARYEXA_PROC) v2_
GetProcAddress( GetModuleHandle("kernel32"), "LoadLibraryExA" ); tCE%+
CheckError( (int)OriginalLoadLibraryExA, NULL, "GetProcAddress LoadLibraryExA" ); X/+X
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  "-tma
//获取KERNEL32.DLL中的LoadLibraryExW()函数地址并保存 &B04H!
OriginalLoadLibraryExW = (LOADLIBRARYEXW_PROC) dDe
GetProcAddress( GetModuleHandle("kernel32"), "LoadLibraryExW" ); p61
CheckError( (int)OriginalLoadLibraryExW, NULL, "GetProcAddress LoadLibraryExW" ); pr6E#O
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  (9
//获取KERNEL32.DLL中的GetProcAddress()函数地址并保存 %3
OriginalGetProcAddress = (GETPROCADDRESS_PROC) d5
GetProcAddress( GetModuleHandle("kernel32"), "GetProcAddress" ); "a
CheckError( (int)OriginalGetProcAddress, NULL, "GetProcAddress GetProcAddress" ); Rk/#c
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  @ F:
//获取WSOCK32.dll中的connect()函数地址并保存 {)
OriginalConnect = (CONNECT_PROC) p-y)Xb
GetProcAddress( GetModuleHandle("wsock32"), "connect" ); z<g2
CheckError( (int)OriginalConnect, NULL, "GetProcAddress WSOCK32:connect" ); (
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Y
return 0; _'+)H;
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  /4QgNq
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  ^V+|CW
/// d%
//                            // +[u~j
//      替换指定内存模块系统函数的子程序      // F
//                            // IQD)
//                            // sl|[
//  参数:HMODULE hModCaller 需要被替换的模块的句柄  // Z/$x
//                            // 5gfs,x
//  返回:本函数没有返回值               // E+RWi
//                            // F
/// N}c)8.
void ReplaceFunctions( HMODULE hModCaller ) WJMNvb
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  r)}
int iRetCode; *
char * strBuf = (char *)malloc( 256 ); 1mMx
GetModuleFileName( hModCaller, strBuf, 255 ); PVem
WriteLogFile( "Replace Functions in " ); >]ce
WriteLogFile( strBuf ); %7"
WriteLogFile( ":/r/n" ); o
free( strBuf ); !}y9^
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  K
if (( !strstr( strBuf, "VERSION.DLL" ) ) && Un{
( !strstr( strBuf, "COMCTL32.DLL" ) ) && *k|N
( !strstr( strBuf, "opengl32.dll" ) ) ) X=
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  !`!v
//替换KERNEL32.dll中的LoadLibraryA()函数 &mDv
iRetCode = ReplaceIATEntryInOneMod( "KERNEL32.dll", c
(PROC)OriginalLoadLibraryA, pZX)s
(PROC)MyLoadLibraryA, [T
hModCaller ); n5ju
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  <8F
if ( iRetCode == 0 ) WriteLogFile( "/t KERNEL32:LoadLibraryA /r/n" ); c~
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  FN~y}
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  4B;zP-
//替换KERNEL32.dll中的LoadLibraryW()函数 n
iRetCode = ReplaceIATEntryInOneMod( "KERNEL32.dll", B`si
(PROC)OriginalLoadLibraryW, =%
(PROC)MyLoadLibraryW, L}
hModCaller ); r7<Og)
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  3u
if ( iRetCode == 0 ) WriteLogFile( "/t KERNEL32:LoadLibraryW /r/n" ); )-o
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  !{}
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Rj?mL/
//替换KERNEL32.dll中的LoadLibraryExA()函数 Bi:Y
iRetCode = ReplaceIATEntryInOneMod( "KERNEL32.dll", GhH
(PROC)OriginalLoadLibraryExA, %Dw)]
(PROC)MyLoadLibraryExA, UFR;qD
hModCaller ); j?
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  1g
if ( iRetCode == 0 ) WriteLogFile( "/t KERNEL32:LoadLibraryExA /r/n" ); CP';t{
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  J(g~!
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  y6."w
//替换KERNEL32.dll中的LoadLibraryExW()函数 ~
iRetCode = ReplaceIATEntryInOneMod( "KERNEL32.dll", `
(PROC)OriginalLoadLibraryExW, H.&
(PROC)MyLoadLibraryExW, ]
hModCaller ); `
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  9T
if ( iRetCode == 0 ) WriteLogFile( "/t KERNEL32:LoadLibraryExW /r/n" ); pVP
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  lZgffk
//替换KERNEL32.dll中的GetProcAddress()函数 b(
iRetCode = ReplaceIATEntryInOneMod( "KERNEL32.dll", (PROC)OriginalGetProcAddress, [+Z2
(PROC)MyGetProcAddress, hModCaller ); 7h5sr
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  )wt
if ( iRetCode == 0 ) WriteLogFile( "/t KERNEL32:GetProcAddress /r/n" ); f;lEu
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  !OTFt_
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  }@*""'
//替换WSOCK32.dll中的connect()函数 6E1
iRetCode = ReplaceIATEntryInOneMod( "WSOCK32.dll", M3-Q
(PROC)OriginalConnect, c| >we
(PROC)MyConnect, pO
hModCaller ); ?6@P.
if ( iRetCode == 0 ) WriteLogFile( "/t WSOCK32:connect /r/n" ); L0]X
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Gr1'g
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  w,&8
//End of ReplaceFunctions() {E
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Q
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  9c
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  t
// 遍历进程中所有的模块并替换API函数 r1
// 如果 falg = 0 则进行替换,否则进行恢复 _0
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  >
int ReplaceAllMod( bool flag ) 2*lRz
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  a
//遍历本进程的所有模块,替换需要替换的函数 'n(
static char strTmp[10]; x83q
HANDLE hSnapshotMod; B93U#B
hSnapshotMod = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, NULL ); qIF
if ( hSnapshotMod == INVALID_HANDLE_value ) GO
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  %EqNZE
itoa( GetLastError(), strTmp, 10 ); #/
WriteLogFile( "CreateToolhelp32Snapshot Error:" ); ~
WriteLogFile( strTmp ); TPFqEr
WriteLogFile( "/r/n" ); b*B
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  3m2T
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  r2
MODULEENTRY32 ModuleEntry; s*
ModuleEntry.dwSize = sizeof( MODULEENTRY32 ); _
int iRet = Module32First( hSnapshotMod, &ModuleEntry ); /Tnq
if ( iRet == FALSE ) ajpF^w
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  94
itoa( GetLastError(), strTmp, 10 ); JA=;W
WriteLogFile( "Module32First Error:" ); w]
WriteLogFile( strTmp ); {Ll5
WriteLogFile( "/r/n" ); /v9
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  It
while ( iRet ) )o#RO
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  -R%R%
ReplaceFunctions( ModuleEntry.hModule ); %6yWS6
iRet = Module32Next( hSnapshotMod, &ModuleEntry ); gt
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  4X
iRet = GetLastError(); M)4dh
if ( iRet != ERROR_NO_MORE_FILES ) Dr
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  
WriteLogFile( "Module32Next Error:" ); OKw[PI
itoa( iRet, strTmp, 10 ); .]:00
WriteLogFile( strTmp ); n+3e
WriteLogFile( "/r/n" ); ze
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  j'
return 0; dbpa
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  )f
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  j7I(
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  W
/// >a'
//                            // ]:
//      替换一个进程中函数地址的子程序       // ,*yyG
//                            //
// 返回值:0成功,-1没找到,1没有符号的引用,2没有输入节 // UZI n
//                            // N<
/// #h{!
int ReplaceIATEntryInOneMod( PCSTR pszCalleeModName, $f0%00
PROC pfnCurrent, PROC pfnNew, HMODULE hModCaller ) p2GW
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  ,zP-V{
ULONG ulSize; 'O"
PIMAGE_IMPORT_DESCRIPTOR pImportDesc; TIh
pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR) oE&P]i
ImageDirectoryEntryToData( hModCaller, TRUE, 4YVE
IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize ); t'QM3R
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  #me@b
if (pImportDesc == NULL) return 2; //没有输入节 3*tC
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  !./7%`
//循环查找模块名是否存在 QVv
for(; pImportDesc->Name; pImportDesc++)
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  y3yC
PSTR pszModName; p'
pszModName = (PSTR)((PBYTE)hModCaller + pImportDesc->Name ); c1CL-
if ( lstrcmpiA( pszModName, pszCalleeModName ) == 0 ) break; O^2k+
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Y
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  U
if ( pImportDesc->Name == 0 ) return 1;//没有符号的引用 2Hh
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  $,7
//获取输入节地址表IAT "NvkK
PIMAGE_THUNK_DATA pThunk; >X-]U
pThunk = (PIMAGE_THUNK_DATA)((PBYTE)hModCaller + pImportDesc->FirstThunk ); dc~
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  ?
//替换函数地址 .
for (; pThunk->u1.Function; pThunk++) c46p
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  3->q
//获得函数地址 fm/e
PROC* ppfn = (PROC*)&pThunk->u1.Function; ,Q
//判断是否我们需要找的函数 OoquP
if (*ppfn == pfnCurrent) qDzu2
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  H
//地址符合,更改输入节的地址 ?:njG
DWORD dwDummy; JAzX
VirtualProtect( ppfn, sizeof(PROC), PAGE_EXECUTE_READWRITE, &dwDummy ); a+3R
WriteProcessMemory( hCurrentProcess, ppfn, &pfnNew, sizeof(PROC), NULL ); |5
return 0;//成功返回 &;t
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  iBX<
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  SFM{
return -1;//没找到 VSv~a
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  rBQQ
//End of ReplaceIATEntryInOneMod() bJ7
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  lAoy
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  q>~Lu
/// R'G~
//                            // k66s
//      以下为替换系统SOCKET函数的子程序      // qhjQ
//                            // y!
//     参数与返回值与相应的系统函数完全相同     // :41I
//                            //                            // d+
/// ?E`n
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  )JER
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  @J.KC
//用来替换LoadLibraryA()的函数 h.W9
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  wU/
HMODULE WINAPI __stdcall MyLoadLibraryA( LPCTSTR lpFileName ) @BaU~
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  h*
static int counter = 0; SLx`
counter ++; }Q|G:#
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  *iC
//记录调用LoadLibraryA()时的参数 :q
WriteLogFile( "LoadLibraryA( " ); 00~Jd
if ( !IsBadStringPtr( lpFileName, 255 ) ) h!
WriteLogFile( (char*)lpFileName ); 4
else WriteLogFile( "_BadFileName" ); :#r
WriteLogFile( " )/r/n/r/n" ); atC8FW
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  3Ain
//调用真正的LoadLibraryA()函数 tJC
HMODULE hMod = OriginalLoadLibraryA( lpFileName ); @'zKpX
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  =x
char * strExeName = (char*)malloc( 256 ); [^4
char * strModName = (char*)malloc( 256 ); JmXw]
GetModuleFileName( NULL, strExeName, 255 ); O}0U
GetModuleFileName( hMod, strModName, 255 ); 4>:
//对新加载的模块进行API函数替换 ^{S@^
if ( stricmp( strExeName, strModName ) && ( !strstr(strModName, "opengl32") ) ) j
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  ?QAKP?
WriteLogFile( "ReplaceFunctions/r/n/r/n" ); T
ReplaceFunctions( hMod ); Z
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  (]B!
free( strExeName ); ]!(
free( strModName ); m
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  9}b
counter --; 0XXf
if ( ( counter == 0 ) && ( !strstr(strModName, "opengl32") ) ) #Oa@
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  }.h5
WriteLogFile( "ReplaceAllMods/r/n/r/n" ); 6|JV
ReplaceAllMod( 1 ); o{
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Mx
return hMod; Cr
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  G
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Maf6
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  [
//用来替换LoadLibraryW()的函数 lq+j
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  z-Icaw
HMODULE WINAPI __stdcall MyLoadLibraryW( LPCWSTR lpFileName ) rz#AF
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  ]aA
static int counter = 0; BM/2
counter ++; 2VW
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  D*
//记录调用LoadLibraryW()时的参数 xk/Zt
char * strTmp = (char *)malloc( 256 ); AuxXB
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  T!5
WideCharToMultiByte( CP_UTF8, 0Vs
0, ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  /m&z
lpFileName, .:>kQG
-1, ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Kk*
strTmp, N
255, ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  E?wjR
NULL, ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  4_
NULL ); 5u,bc
WriteLogFile( "LoadLibraryExW( " ); >JN
if ( !IsBadStringPtr( strTmp, 255 ) ) Y]_
WriteLogFile( strTmp ); Bvagn
else WriteLogFile( "_BadFileName" ); 7Aaz{.
WriteLogFile( " )/r/n/r/n" ); R<j<
free( strTmp ); MV
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  9u
//调用真正的LoadLibraryW()函数 2H#5<]
HMODULE hMod = OriginalLoadLibraryW( lpFileName ); #Swo;f
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  ,i
char * strExeName = (char*)malloc( 256 ); 8=A7,
char * strModName = (char*)malloc( 256 ); v2(.
GetModuleFileName( NULL, strExeName, 255 ); k^1
GetModuleFileName( hMod, strModName, 255 ); woD
//对新加载的模块进行API函数替换 jv/
if ( stricmp( strExeName, strModName ) ) }
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  [z,Pg|
WriteLogFile( "ReplaceFunctions/r/n/r/n" ); cHYYl
ReplaceFunctions( hMod ); 0vrmu+
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  X67^
free( strExeName ); <Cb%Ys
free( strModName ); C"Fs
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  %
counter --; qtI
if ( counter == 0 ) ]4!
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  ;U
WriteLogFile( "ReplaceAllMods/r/n/r/n" ); V
ReplaceAllMod( 1 ); 0>4!
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Q2
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  `eeby2
return hMod; #D%|I
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  h-HKn
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  7~K
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  I#
//用来替换LoadLibraryExA()的函数 .4#5
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  =
HMODULE WINAPI __stdcall MyLoadLibraryExA(LPCTSTR lpFileName, 6;3cU'
 HANDLE hFile, Vvs
 DWORD dwFlags ) nv
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  U
static int counter = 0; tri8
counter ++; r':.]
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  #xlzI
//记录调用LoadLibraryExA()时的参数 Y4X[/p
WriteLogFile( "LoadLibraryExA( " ); IsM+X>
if ( !IsBadStringPtr( lpFileName, 255 ) ) d
WriteLogFile( (char*)lpFileName ); -#%
else WriteLogFile( "_BadFileName" ); 2
WriteLogFile( " )/r/n/r/n" ); 'WW$d
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  cn[3
//调用真正的LoadLibraryExA()函数 !
HMODULE hMod = OriginalLoadLibraryExA( lpFileName, =
hFile, 6FD~
dwFlags ); D
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  ^smH8F
char * strExeName = (char*)malloc( 256 ); %W]Y
char * strModName = (char*)malloc( 256 ); ,%%O
GetModuleFileName( NULL, strExeName, 255 ); L
GetModuleFileName( hMod, strModName, 255 ); p
//对新加载的模块进行API函数替换 !
if ( stricmp( strExeName, strModName ) ) w
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  rGF
WriteLogFile( "ReplaceFunctions/r/n/r/n" ); ^qVe
ReplaceFunctions( hMod ); ~}
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  BXp
free( strExeName ); 9(
free( strModName ); f[TJu*
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  6ik
counter --; 1
if ( counter == 0 ) g*$&O=
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  y%B
WriteLogFile( "ReplaceAllMods/r/n/r/n" ); AXAl+
ReplaceAllMod( 1 ); ~+n5W
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Z=f4)1
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  &S
return hMod; jM=#_
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  8'7
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  t_g}
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  v2;u^K
//用来替换LoadLibraryExW()的函数 Q@Zpm{
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  <U_{
HMODULE WINAPI __stdcall MyLoadLibraryExW( LPCWSTR lpFileName, vr98*<
HANDLE hFile, O5s
DWORD dwFlags ) CLosR3
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  "z!7"H
static int counter = 0; P3*i.t
counter ++; 8/@(/
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  :7
//记录调用LoadLibraryExW()时的参数 q!X-t
char * strTmp = (char *)malloc( 256 ); G=
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  `@xf
WideCharToMultiByte( CP_UTF8, {
0, ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  KHcnUc
lpFileName, MnKMP
-1, ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  5
strTmp, a "g
255, ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  JNku#1
NULL, ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  iWcfd|
NULL ); '
WriteLogFile( "LoadLibraryExW( " ); ;
if ( !IsBadStringPtr( strTmp, 255 ) ) "o9W
WriteLogFile( strTmp ); %=eFT
else WriteLogFile( "_BadFileName" ); Gc
WriteLogFile( " )/r/n/r/n" ); u
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  lndd
//调用真正的LoadLibraryExW()函数 bTqB
HMODULE hMod = OriginalLoadLibraryExW( lpFileName, f
hFile, }
dwFlags ); h@
int lastError = GetLastError(); jI*v
if ( hMod == NULL ) ~-
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  t#%-Ea
itoa( lastError, strTmp, 10 ); p*ys
WriteLogFile( "Error code:" ); PL;^
WriteLogFile( strTmp ); ~=}-H
WriteLogFile( "/r/n" ); 5
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  opweTd
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  MD5NL
char * strExeName = (char*)malloc( 256 ); */
char * strModName = (char*)malloc( 256 ); J_/`1e
GetModuleFileName( NULL, strExeName, 255 ); MNUG{
GetModuleFileName( hMod, strModName, 255 ); G/tL|
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  l@Y
//对新加载的模块进行API函数替换 4kX{
if ( stricmp( strExeName, strModName ) ) 0.+SRM
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  ?Wi/
WriteLogFile( "ReplaceFunctions/r/n/r/n" ); R8
ReplaceFunctions( hMod ); Z:3
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  cs*kGg
free( strExeName ); @0A7U)
free( strModName ); :WO~+I
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Vy
counter --; +x0
if ( counter == 0 ) _Q [E
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  8<
WriteLogFile( "ReplaceAllMods/r/n" ); 6N
ReplaceAllMod( 1 ); UZ_)
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  ~'TF1
free( strTmp ); Mp(^g
SetLastError( lastError ); #P8A
return hMod; A
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  /x
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  w?5>rh
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  g*Z'!
//用来替换GetProcAddress()的函数 %}1%6*
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  4p
FARPROC WINAPI __stdcall MyGetProcAddress( HMODULE hModule, q=RR`
LPCSTR lpProcName ) C<`In4
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  (
//调用系统的GetProcAddress()函数 =k
FARPROC proc = OriginalGetProcAddress( hModule, ghNUEk
lpProcName ); ?/
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  yHdJ
int lastError = GetLastError(); /h
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  =hU|
//获取hModule的Module Name E
char * lpModName = (char*)malloc( 256 ); fa
GetModuleFileName( hModule, lpModName, 255 ); tVQ
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  &bj(R
//替换对WSOCK32函数的取地址操作 I8#e
if ( strstr( lpModName, "WSOCK32" ) ) 3v+!o6
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  N>F,L
if ( proc == (FARPROC)OriginalConnect ) i
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  OBA
proc = (FARPROC)MyConnect; "H
WriteLogFile( "GetProcAddress connect() /r/n/r/n" ); V
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  (
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  fYTvH
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  _
//替换对Kernel32 Loadlibrary()函数的取地址操作 5%+
if ( strstr( lpModName, "KERNEL32" ) ) vCHfR
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  l
if ( proc == (FARPROC)OriginalLoadLibraryA ) X)/
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Lp_~*
proc = (FARPROC)MyLoadLibraryA; OEA
WriteLogFile( "GetProcAddress LoadLibraryA() /r/n" ); eOo[3(
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  UYyc!
if ( proc == (FARPROC)OriginalLoadLibraryW ) U
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  ?9M
proc = (FARPROC)MyLoadLibraryW; t
WriteLogFile( "GetProcAddress LoadLibraryW() /r/n" ); )+
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  xZ$#T)
if ( proc == (FARPROC)OriginalLoadLibraryExA ) 7(0(5M
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  </^
proc = (FARPROC)MyLoadLibraryExA; vBq"Y%
WriteLogFile( "GetProcAddress LoadLibraryExA() /r/n" ); EW
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Zp
if ( proc == (FARPROC)OriginalLoadLibraryExW ) OMJ
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Y
proc = (FARPROC)MyLoadLibraryExW; WNIb|
WriteLogFile( "GetProcAddress LoadLibraryExW() /r/n" ); cJ]
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  uF??<2
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  GP-
free( lpModName ); /35HDG
SetLastError( lastError ); /9$
return proc; ea!HWm
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  @E,4k
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  iX)8cC
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  /~
//用来替换connect()的函数 }
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  1iB
int WINAPI __stdcall MyConnect( SOCKET s,              3%%V[q
const struct sockaddr FAR *name,  @bta@/
int namelen ) PV*xi)
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  cY]Fn$
char buf[255] = {0}; l,)yq
sockaddr_in * to; U=
to = (sockaddr_in*)name; 7O78]9
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  ^B%
// socks proxy address & port 5t
sockaddr_in sa; gr ~k
sa.sin_family = AF_INET; Dp1^
sa.sin_addr.s_addr = inet_addr( "127.0.0.1" ); z])
sa.sin_port = htons( 1080 ); %;
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  rMziG0
// connect to the socks proxy l*a
int iRet = OriginalConnect( s, (sockaddr*)&sa, namelen ); #{`
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  (
// send a version identifier/method selection message ~
buf[0] = 0x5; // SOCKS Protocol Version 5.0 LZ+v
buf[1] = 0x2; // number of methods is 2 (&puM
buf[2] = 0x0; // X'00' NO AUTHENTICATION REQUIRED #)l
buf[3] = 0x2; // X'02' USERNAME/PASSWORD iWMfm
iRet = send( s, buf, 4, 0 ); 9L
if ( iRet == SOCKET_ERROR ) OTgAUI
return SOCKET_ERROR; *
else ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  8p/Lm
MessageBox( NULL, "send", "sockscap", MB_OK ); |35
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  4sT4`!
iRet = recv( s, buf, 254, 0 ); /
if ( iRet == SOCKET_ERROR ) O;4nW
return SOCKET_ERROR; 6/kU.4
else ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  {>A
MessageBox( NULL, "Recv", "sockscap", MB_OK ); l_, j#
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!   !::
// define the username & password for socks authentication 5hh
char username[64] = "guest"; '
int userlen = 5; C=Ei
char password[64] = "guest"; n/D
int passlen = 5; 1=
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  #
switch ( buf[1] ) /B#A=
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  ;jP
case 0x0 : // No authentication require q?
buf[0] = 0x5; // SOCKS Protocol Version 5.0 ?
buf[1] = 0x1; // CMD = connect Kur
buf[2] = 0x0; // Reserved d}7/7
buf[3] = 0x1; // IP v4 G
memcpy( buf + 4, &to->sin_addr.s_addr, sizeof(DWORD) ); .g y
memcpy( buf + 8, &to->sin_port, sizeof(WORD) ); =j);u
iRet = send( s, buf, 10, 0 ); =%
iRet = recv( s, buf, 254, 0 ); DB%Em
if ( buf[1] == 0x0 ) // GL@Jt
iRet = 0; o`.&e
else ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  3_2zt
iRet = SOCKET_ERROR; }B
break; O`|3oI
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  +,~
case 0x2 : // need username/password Bpx
buf[0] = 0x1; x
buf[1] = userlen; k3_
memcpy( buf + userlen, username, userlen ); 'A@%
buf[ userlen+2 ] = passlen; *
memcpy( buf + userlen + 3, password, passlen ); n
iRet = send( s, buf, 3 + userlen + passlen, 0 ); @!Hf
iRet = recv( s, buf, 254, 0 ); =
if ( buf[1] == 0x0 ) // Authentication return vaule, 0x0 for success .
iRet = 0; |
else ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  g4VBY}
iRet = SOCKET_ERROR; // Other for failure OTU
break; +sY{;
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  .?w!
case 0xFF: // Can't accept your methods 5A5;+
iRet = SOCKET_ERROR; W?WsuG
break; /c3s
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  ,y
default : // Unknown error (j
iRet = SOCKET_ERROR; Z
break; `3Bak:
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  Z//Xt
return iRet; UM
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  >z'/
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  kamqU
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  .
//记录日志文件的函数 _>
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  |"8>S0
void WriteLogFile( char * strBuf ) ]N_
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  7@A
DWORD nNumberOfBytesToWrite, NumberOfBytesWritten; d
nNumberOfBytesToWrite = strlen( strBuf ); >tqe
WriteFile( hLogFile, strBuf, nNumberOfBytesToWrite,  C
&NumberOfBytesWritten, NULL ); 63ka
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  `
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  5)uKjY
©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  P29Hv
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  h=v]L
//错误处理函数CheckError() +a>'
//如果iReturnCode等于iErrorCode,则输出pErrorMsg并退出 @v/
// ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  u?2BEr
void CheckError( int iRetCode, int iErrorCode, char *pErrorMsg ) kn}(
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  7eML
char strErrorCode[10]; !*%hm9
char * strBuf = (char*)malloc( 256 ); in
if ( iRetCode == iErrorCode ) /F
{ ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  9@f,D
strcpy( strBuf, pErrorMsg ); V7
itoa( GetLastError(), strErrorCode, 10 ); N =`
strcat( strBuf, strErrorCode ); *8v+!
strcat( strBuf, "/r/n/r/n" ); Ih
WriteLogFile( strBuf ); aQCS6
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  u
free( strBuf ); S
} ©→天擎网超级论坛 -- 天擎科技致力于企业、个人上网专业解决方案,为您打造完美空间!  %zUL5.
//end of CheckError()

SocksGun源码(类SocksCap)相关推荐

  1. 飞鸽传书最新源码类都要复杂的多

    实际应用中的飞鸽传书最新源码类都要复杂的多,一旦发生职责扩散而需要修改类时,飞鸽传书 除非这个类本身非常简单,否则还是遵循单一职责原则的好.遵循单一职责原的优点有:可以降低类的复杂度,一个类只负责一项 ...

  2. java重写源码类不生效(自己重写的类没有被jvm加载)

    背景 很多情况下我们需要调试源码或者修改源码以满足我们的开发需求 我们会项目的java目录下创建一个类,目录和类名都与源码的一致,然后将源码中的代码全部拷贝到我们自己创建的类中,再加入一些我们自己的逻 ...

  3. 【源码类】开源项目汇总

    00. 目录 文章目录 00. 目录 01. C开源项目 02. C++开源项目 03. QT开源项目 05. Linux系统编程 06. Linux网络编程 07. 其它 本博客不断更新中,请关注. ...

  4. php类微博源码,类微博功能设计

    php代码<?php /** *MentionModel.class.php */ class mentionModel extends Model{ private $userList; // ...

  5. Android动态方式破解apk进阶篇(IDA调试so源码)

    一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...

  6. [导入]连连看.NET 1.41全部源码

    摘要: 这个是游戏源码类视图: 到文章内下载[LLK1.41_FullSources.rar],今日做过最后一次修正:发布源码是因为工作上的事情,另外晚上也想好好休息休息:并且我也坚持源码共享. 删除 ...

  7. android源码出现的@字符意义总结

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景 在android源码中我们能看到各种以@开头的字符,他们大多出现在注释中,如下图所示 但是可不要小看了 ...

  8. java as uuid_java UUID 源码学习

    UUID 我们平时在使用 UUID 的时候觉得非常简单,甚至很多人觉得这没什么技术含量. 那么深入思考一层,UUID 的实现原理是什么? 源码 类声明 public final class UUID ...

  9. 学习 redux 源码整体架构,深入理解 redux 及其中间件原理

    如果觉得内容不错,可以设为星标置顶我的公众号 1. 前言 你好,我是若川.这是学习源码整体架构系列第八篇.整体架构这词语好像有点大,姑且就算是源码整体结构吧,主要就是学习是代码整体结构,不深究其他不是 ...

  10. vim ctags java源码_如何使用vim的插件Ctags查看Linux源码

    一.ubuntu下安装Linux内核源码 (1).查看自己的内核版本 (2).查看源内的内核源码类表 (3).下载源码 (4).进入/usr/src (5).解压下载的文件到用户主 二.安装vim插件 ...

最新文章

  1. 烂大街的缓存穿透、缓存击穿和缓存雪崩,你真的懂了?
  2. 设置3d rotationY 旋转之后元件大小改变解决方案
  3. 【题解】hdu 3586 Information Disturbing 二分 树形dp
  4. 两台centos之间传送文件
  5. Java22-day13【Lambda表达式(标准格式、练习、注意事项)、接口组成更新(默认-静态-私有方法)、方法引用(构造器)】
  6. python三大主流框架的对比
  7. latex中怎样使公式居中_LaTeX_多行公式对齐居中的同时选择性的加编号
  8. 对发表论文的深层次思考
  9. python使用如下方法规范化数组_python – 根据数组的符号将数组中列的元素规范化为1或-1...
  10. 电脑qq收藏在哪里打开_外贸询盘怎么来?零成本用Linkedin批量开发客户!外贸人收藏...
  11. vi 不保存退出_vi / vim编辑器介绍
  12. Worktile中百万级实时消息推送服务的实现
  13. 【python】Python学到什么程度可以面试工作
  14. ubuntu固定内网ip_Ubuntu14设置局域网固定IP
  15. 普林斯顿邓嘉学生亲述:一定要博士学位?不,我本科生也能在大厂当应用科学家...
  16. javascript获取非行间样式的函数封装
  17. java中文逗号替换成英文逗号_word如何将大量英文逗号批量替换为中文逗号?
  18. python3识别简单验证码
  19. 【读书笔记】Python编程:从入门到实践-埃里克·马瑟斯,python基础体系巩固和常见场景练习
  20. 【MySQL】JDBC编程

热门文章

  1. 软件开发需求分析内容
  2. LeetCode答案详解
  3. CSDN目前有多少注册用户数?
  4. keil教程之创建基础软件工程
  5. 打开CAD图纸转换成dwf格式的文件
  6. 国际科学数据服务平台 - csdb_拔剑-浆糊的传说_新浪博客
  7. 苹果电脑驱动下载查询
  8. GoF的23种设计模式分类概念
  9. 【FinalShell】win10 / win 11:远程连接 Linux 工具 FinalShell 下载、安装
  10. 用geoda软件进行空间自相关分析示例