SocksGun源码(类SocksCap)
生活随笔
收集整理的這篇文章主要介紹了
SocksGun源码(类SocksCap)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//利用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()
//本程序支持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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言|直角杨辉三角
- 下一篇: 安装VS2010的SP1补丁的办法