當前位置:首頁 » 操作系統 » 注入工具源碼

注入工具源碼

發布時間: 2022-09-04 19:46:30

❶ 求易語言鉤子注入dll及home呼出源碼

易語言鉤子DLL注入源碼及源碼說明2010-04-06 13:52[所有要使用到的API]

.版本 2

.DLL命令 LoadLibraryA, 整數型,"kernel32.dll","LoadLibraryA"
.參數 lpLibFileName, 文本型

.DLL命令 SetWindowsHookExA, 整數型, "user32.dll", "SetWindowsHookExA", 公開, SetWindowsHookEx
.參數 鉤子類型, 整數型, , idHook
.參數 回調函數地址, 整數型, , lpfn
.參數 實例句柄, 整數型, , hmod
.參數 線程ID, 整數型, , dwThreadId

.DLL命令 FreeLibrary, 整數型, "kernel32.dll", "FreeLibrary", , 釋放指定的動態鏈接庫,它們早先是用LoadLibrary ;API函數裝載的 非零表示成功,零表示失敗。會設置GetLastError
.參數 庫句柄, 整數型, , hLibMole,要釋放的一個庫句柄,在VB里使用只能用這個函數釋放那些由應用程序明確裝載的DLL。對LoadLibrary的每一次調用都應該有一個對應的FreeLibrary調用;

.DLL命令 UnhookWindowsHookEx, 整數型, "user32.dll", "UnhookWindowsHookEx", , UnhookWindowsHookEx
.參數 鉤子句柄, 整數型, , hHook

.DLL命令 CallNextHookEx, 整數型, "user32.dll", "CallNextHookEx", 公開, CallNextHookEx
.參數 鉤子句柄, 整數型, , hHook
.參數 代碼值, 整數型, , ncode
.參數 附加參數1, 整數型, , wParam
.參數 附加參數2, 整數型, 傳址, lParam

.DLL命令 GetProcAddress, 整數型, "kernel32.dll", "GetProcAddress", , 取進程路徑
.參數 模塊句柄, 整數型, , hMole
.參數 進程名稱, 文本型, , lpProcName

.DLL命令 GetCurrentThreadId, 整數型, "kernel32.dll", "GetCurrentThreadId"

.DLL命令 獲取特別文件夾位置_, 整數型, "shell32.dll", "SHGetSpecialFolderLocation"
.參數 窗口句柄, 整數型, , hwndOwner
.參數 文件夾位置, 整數型, , nFolder
.參數 結構, 項目標識符列表_, 傳址, pIdl

.DLL命令 從列表id取路徑_, 整數型, "shell32.dll", "SHGetPathFromIDListA", , $(b)
.參數 結構指針, 整數型, , pIdl
.參數 路徑, 文本型, 傳址, pszPath

.DLL命令 CallWindowProcA, 整數型, "user32.dll", "CallWindowProcA"
.參數 動態調用代碼, 位元組集, , 一定要用本人編寫的
.參數 子程序, 子程序指針, , 子程序指針
.參數 參數, 整數型, 數組, 為整數數組,參數1為成員1…類推;文本型和位元組集型(自定義結構)為指針
.參數 參數數目, 整數型, , 一定要和參數數組相符,不然會出錯
.參數 是否C調用, 整數型, , 真為cdecl調用方式,假為stdcall調用方式(即標准WINAPI方式)

[這里函數所有代碼和一個自定義類型,API代碼在左邊]

.版本 2

.程序集 程序集1
.程序集變數 臨時呼出熱鍵, 整數型
.程序集變數 臨時載入窗口, 窗口
.程序集變數 鉤子模塊句柄, 整數型, , "1000"
.程序集變數 鉤子句柄, 整數型, , "1000"
.程序集變數 鉤子IDx, 整數型
.程序集變數 x, 整數型
.程序集變數 鉤子句柄1, 整數型
.程序集變數 temp目錄, 文本型
.程序集變數 xxx, 整數型
.程序集變數 熱鍵鉤子句柄, 整數型
.程序集變數 第一次, 邏輯型

.子程序 調用_調用子程序, 整數型, 公開, 呼叫某個函數 可以傳入無限個參數 返回函數返回值
.參數 子程序指針, 子程序指針, , 指定函數
.參數 參數, 整數型, 可空 數組, 指定參數 可以不寫, 參數為數組 格式為 參數[1]=xxx 參數[2]=xxx 文本型或位元組集請用 轉換指針 格式2 加入成員(參數,xxx)
.局部變數 動態調用代碼, 位元組集

動態調用代碼 = { 85, 139, 236, 86, 139, 117, 16, 141, 78, 255, 133, 201, 124, 21, 139, 69, 12, 141, 4, 136, 65, 139, 16, 137, 85, 16, 255, 117, 16, 131, 232, 4, 73, 117, 242, 255, 85, 8, 137, 69, 12, 139, 69, 20, 133, 192, 116, 13, 141, 4, 181, 0, 0, 0, 0, 137, 69, 16, 3, 101, 16, 139, 69, 12, 94, 93, 194, 16, 0 }
返回 (CallWindowProcA (動態調用代碼, 子程序指針, 參數, 取數組成員數 (參數), 0))

.子程序 操作_取特定目錄, 文本型, 公開, 取特定的目錄(返回所要取的指定目錄名 無效返回空)
.參數 欲獲取目錄類型, 整數型, 可空, 0我的桌面 1臨時目錄 5我的文檔 6我的收藏夾 7我的啟動 11我的開始菜單 20系統字體 36Windows安裝目錄 37系統目錄 [99更多]
.局部變數 路徑, 文本型
.局部變數 標示結構, 項目標識符列表_
.局部變數 目錄類型, 整數型

.如果真 (欲獲取目錄類型 = 99)
輸出調試文本 (「0我的桌面 2我的程序 5我的文檔 6我的收藏夾 7我的啟動 8我最近的文檔 9我的發送到 11我的開始菜單 13我的音樂 14我的視頻 16我的桌面 20系統字體 22開始菜單組 23程序組 24啟動組 25桌面 31收藏夾 32我的瀏覽器臨時目錄 33我的Cookies 34我的歷史記錄 36Windows安裝目錄 37系統目錄 38文件安裝目錄 39我的圖片 40用戶目錄 41系統目錄 46文檔 47管理工具 48我的管理工具 53音樂 54圖片 55視頻」)
.如果真結束
.如果 (欲獲取目錄類型 = 1)
目錄類型 = 34
.否則
目錄類型 = 欲獲取目錄類型
.如果結束
獲取特別文件夾位置_ (0, 目錄類型, 標示結構)
路徑 = 取空白文本 (255)
從列表id取路徑_ (標示結構.結構大小, 路徑)
.如果真 (路徑 = 「」)
返回 (「」)
.如果真結束
.如果真 (欲獲取目錄類型 = 1)
路徑 = 子文本替換 (路徑, 「History」, 「Temp」, , , 真)
.如果真結束
返回 (路徑 + 「\」)

.子程序 注入_安裝鉤子DLL, 整數型, 公開, DLL注入 返回0=失敗 整數型 DLL介面(代碼值,參數1,參數2)
.參數 線程ID, 整數型, , -1 全局鉤子
.參數 DLL全名, 文本型, , DLL全名
.參數 DLL介面, 文本型, 可空, 默認 整數型 鉤子介面(代碼值,參數1,參數2)
.局部變數 臨時變數, 整數型
.局部變數 目錄, 文本型
.局部變數 窗口句柄, 整數型

.如果真 (是否為空 (DLL介面) = 真)
DLL介面 = 「鉤子介面」
.如果真結束
.如果真 (線程ID = 0)
返回 (0)
.如果真結束
.如果真 (線程ID = -1)
線程ID = 0
.如果真結束
鉤子IDx = 鉤子IDx + 1
鉤子模塊句柄 [鉤子IDx] = LoadLibraryA (DLL全名)
鉤子句柄 [鉤子IDx] = SetWindowsHookExA (3, GetProcAddress (鉤子模塊句柄 [鉤子IDx], DLL介面), 鉤子模塊句柄 [鉤子IDx], 線程ID)
目錄 = 操作_取特定目錄 (1)
寫配置項 (目錄 + 「ada.ini」, 「ada」, 「鉤子句柄」, 到文本 (鉤子句柄 [鉤子IDx]))
輸出調試文本 (鉤子IDx, 鉤子模塊句柄 [鉤子IDx], 鉤子句柄 [鉤子IDx])
返回 (鉤子IDx)

.版本 2

.子程序 注入_卸載鉤子DLL, 邏輯型, 公開
.參數 鉤子ID, 整數型, 可空, 卸載所有時無效
.參數 卸載所有, 邏輯型, 可空
.局部變數 xx, 整數型

.如果真 (卸載所有)
.如果真 (鉤子IDx > 0)
.計次循環首 (鉤子IDx, xx)
.如果真 (鉤子模塊句柄 [xx] ≠ 0)
FreeLibrary (鉤子模塊句柄 [xx])
UnhookWindowsHookEx (鉤子句柄 [xx])
.如果真結束

.計次循環尾 ()
.如果真結束
返回 (真)
.如果真結束
.如果真 (鉤子ID > 0)
.如果真 (鉤子模塊句柄 [鉤子ID] ≠ 0)
FreeLibrary (鉤子模塊句柄 [鉤子ID])
UnhookWindowsHookEx (鉤子句柄 [鉤子ID])
返回 (真)
.如果真結束

.如果真結束
返回 (假)

.子程序 注入_初始化鉤子DLL, 整數型, 公開, DLL用.
.參數 代碼值, 整數型
.參數 參數1, 整數型
.參數 參數2, 整數型
.參數 初始, 子程序指針
.局部變數 xxxx, 整數型

.如果真 (鉤子句柄1 = 0)
temp目錄 =操作_取特定目錄 (1)
鉤子句柄1 = 到整數 (讀配置項 (temp目錄 + 「ada.ini」, 「ada」, 「鉤子句柄」, ))
.如果真結束
.如果真 (第一次 = 假)
第一次 = 真
調用_調用子程序 (初始)
.如果真結束
返回 (CallNextHookEx (鉤子句柄1, 代碼值, 參數1, 參數2))

.子程序 注入_設置呼出窗口, 邏輯型, 公開
.參數 設置熱鍵, 整數型
.參數 呼出窗口, 窗口

臨時呼出熱鍵 = 設置熱鍵
臨時載入窗口 = 呼出窗口
熱鍵鉤子句柄 = SetWindowsHookExA (2, 到整數 (&呼出鍵介面), 0, GetCurrentThreadId ())
.如果真 (熱鍵鉤子句柄 > 0)
返回 (真)
.如果真結束
返回 (假)

.子程序 呼出鍵介面, 整數型
.參數 一, 整數型
.參數 二, 整數型
.參數 三, 整數型

.如果真 (一 = 0 且 二 = 臨時呼出熱鍵 且 三 > 0)
.如果 (是否已創建 (臨時載入窗口))
.如果 (臨時載入窗口.可視)
臨時載入窗口.可視= 假
.否則
臨時載入窗口.可視= 真
.如果結束

.否則
載入 (臨時載入窗口, , 假)
臨時載入窗口.Esc鍵關閉= 假
臨時載入窗口.最小化按鈕= 真
.如果結束

.如果真結束
返回 (CallNextHookEx (熱鍵鉤子句柄, 一, 二, 三))

.版本 2

.數據類型 項目標識符列表_, , ITEMIDLIST
.成員 結構大小, 整數型, , , cb
.成員 標識符長度, 位元組型, , "255", abID

此函數是用來調用指針函數的.就是CALL

取目錄用這個我就不解釋了
下面是源碼主要函數
函數解釋:

本函數參數1為要HOOK的線程ID,參數2為要注入的DLL名,參數3[可空]為DLL介面名字空則為"鉤子介面".
下面解釋是如何實現的:

1.首先使用LoadLibraryA獲取DLL模塊地址.
2.然後設置SetWindowsHookExA

參數一為HOOK類型,使用WH_GETMESSAGE(3) Hook來監視從GetMessage or PeekMessage函數返回息。

參數二為介面地址,就是說把消息返回轉接到的位置,當然我們這里所使用的是我們DLL所公開的那個函數

參數三為介面模塊的句柄即DLL的句柄(地址)

參數四為將要被HOOK的線程ID(0為全局HOOK,不推薦使用全局HOOK)

3.設置完後將鉤子句柄寫配置項到臨時目錄(後面將要使用).

說白了其實這個才是真正的介面(DLL里的介面只是在做轉接而已),

我先講這個函數是如何實現的(上面已經說了這才是真正的介面).

1,鉤子句柄是一個程序集變數,先判斷這個變數是否為0,如果等於0那麼就是說這個函數第一次被使用,

第一次使用將讀去上個函數寫在臨時目錄的鉤子句柄.

2.用一個邏輯變數(程序集變數或全局變數),來判斷這個消息鉤子是否第一次運行(為了防止後面調用

子程序被多次調用),是的話調用一個子程序(自己設置)

3.使用CallNextHookEx(呼叫下一個鉤子)把當前HOOK的信息在傳送回被HOOK的鉤子里,那個鉤子我們

就不用管了.

下來說下到底如何使用

首先在你的EXE程序里寫這個(我就不多說這是干嗎的了).

然後在DLL里寫上這個代碼(有人可能覺得眼熟,好像在什麼地方見過,對了這個代碼和

外掛作坊的鉤子注入差不多)

下來說明下按鍵呼出窗口的函數

用變數把當前參數存起來(主要方便介面調用)

1.為當前運行線程設置一個鍵盤鉤子

2.[介面]設置按鍵判斷,如果按下我們設置的鍵將呼出窗口,如果這個窗口沒創建將判斷創建,

如果已經創建再次按下則會隱藏,

載入後的窗口把用ESC關閉的屬性弄成假,不需要ESC關閉

3.最後就是再呼叫下以前的鉤子.

最後就是卸載鉤子DLL了.

判斷是否要卸載全部的鉤子,如果是就循環將現有鉤子DLL全部卸載.

不是就按著ID來卸載

卸載方法:

1.FreeLibrary就是卸載一個載入的DLL

2.UnhookWindowsHookEx乃是卸載這個HOOK

-.-OK了這就是 鉤子DLL注入,謝謝大家閱讀,如果看不明白,

❷ 求易語言編寫DNF注入器的源碼或者有的給一個注入器也可以

其實很簡單的!不過你有DNF基址嗎?
注入器我一般用輸入法注入.你用超級模塊吧這個不錯的!
DLl連結庫你知道吧!注入器!輸入法.激活()輸入法.安裝(進程取ID(「DNF.EXE」,,,取運行目錄()+「/外掛.DLL」))
給分吧.回家給你發源碼

❸ 有現成的DLL,要最簡單的注入源碼

BOOL EnableDebugPrivilege(BOOL bEnable)
{

BOOL fOK = FALSE;
HANDLE hToken;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
{
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL,SE_DEBUG_NAME, &tp.Privileges[0].Luid); //
tp.Privileges[0].Attributes = bEnable ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL);
fOK = (GetLastError() ==ERROR_SUCCESS);
CloseHandle(hToken);
}
return fOK;
}
//寫內存 注意:注釋掉的部分在這個程序里用不上,因為程序可以直接訪問,沒有許可權問題
BOOL me_WriteProcessMemory(DWORD dwProcsPID,DWORD dwAddress,LPVOID Data,SIZE_T SIZE)
{
//EnableDebugPrivilege(true);
DWORD size;
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE, dwProcsPID);//PROCESS_VM_WRITE|PROCESS_VM_READ
//DWORD dwOldProc;
//DWORD dwNewProc;
//改變頁面屬性為讀寫
//VirtualProtectEx( hProcess,(LPVOID)dwAddress,SIZE,PAGE_READWRITE, &dwOldProc );

BOOL RE=WriteProcessMemory(hProcess,(LPVOID)dwAddress,Data,SIZE,&size);
//恢復頁面文件的屬性
//VirtualProtectEx( hProcess,(LPVOID)dwAddress,SIZE,dwOldProc,&dwNewProc );
CloseHandle(hProcess);

//EnableDebugPrivilege(false);
return RE;
}
//讀取內存
BOOL me_ReadProcessMemory(DWORD dwProcsPID,DWORD dwAddress,LPVOID Data,SIZE_T SIZE)
{
//EnableDebugPrivilege(true);
DWORD size;
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE, dwProcsPID);
BOOL RE=ReadProcessMemory(hProcess, (LPVOID)dwAddress,Data,SIZE, &size);
//EnableDebugPrivilege(false);
CloseHandle(hProcess);
return RE;
}
//獲取指定窗口名PID
bool me_Findgamewindow(LPCWSTR GAMEWINODWNAME,__out DWORD *pidwin)
{
HWND hWnd=FindWindow(NULL,GAMEWINODWNAME);
if(hWnd)
{
//*GameBaseAdd=(DWORD)GetWindowLongPtr(hWnd, GWL_HINSTANCE);
GetWindowThreadProcessId(hWnd,pidwin);
return true;
}
return false;
}
/*
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
LPFN_ISWOW64PROCESS fnIsWow64Process;
BOOL IsWow64()
{
BOOL bIsWow64 = FALSE;
fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
GetMoleHandle(TEXT("kernel32")),"IsWow64Process");
if(NULL != fnIsWow64Process)
{
if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
{
return FALSE;
}
}
return bIsWow64;
}
*/

//進程注入
bool IntoProcess(/*DWORD dwProcsPID,*/WCHAR *DllPath,WCHAR *WinName,HWND IntoPhWnd=NULL)
{
DWORD dwProcsPID=0;
if(IntoPhWnd!=NULL)//有句柄直接用句柄
GetWindowThreadProcessId(IntoPhWnd,&dwProcsPID);
//只有窗口名那就取找到的第一個窗口
else me_Findgamewindow(WinName,&dwProcsPID);
if(dwProcsPID!=0)
{
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE, dwProcsPID);
if(hProcess==NULL)
{
MessageBox(NULL,L"無法打開進程哈",L"ERROR_006",MB_OK);
return false;
}
BOOL ISx64=TRUE;
IsWow64Process(hProcess,&ISx64);
if (!ISx64)
{
MessageBox(NULL,L"無法注入到64位進程哈",L"ERROR_008",MB_OK);
return false;
}
DWORD cb = (1+lstrlenW(DllPath))* sizeof(WCHAR);
LPVOID dwDllAddress=VirtualAllocEx(hProcess,NULL,cb,MEM_COMMIT,PAGE_READWRITE);
BOOL RE=WriteProcessMemory(hProcess,(LPVOID)dwDllAddress,DllPath,cb,&cb);
PTHREAD_START_ROUTINE pfnStartAddr;
pfnStartAddr = (PTHREAD_START_ROUTINE)LoadLibraryW;
HANDLE hThread = CreateRemoteThread(hProcess,NULL,0,pfnStartAddr,dwDllAddress,0,NULL);
if(hThread == NULL)
{
CloseHandle(hThread);
VirtualFreeEx(hThread,dwDllAddress,cb,MEM_RELEASE);
CloseHandle(hProcess);
return false;
}
WaitForSingleObject(hThread,INFINITE);
CloseHandle(hThread);
VirtualFreeEx(hThread,dwDllAddress,cb,MEM_RELEASE);
CloseHandle(hProcess);
}
else
{
MessageBox(NULL,L"注入失敗",L"ERROR_009",MB_OK);
return false;
}
return true;
}
//進程注入
bool IntoProcess(DWORD dwProcsPID,WCHAR *DllPath)
{
if(dwProcsPID!=0)
{
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE, dwProcsPID);
if(hProcess==NULL)
{
MessageBox(GetForegroundWindow(),L"無法打開進程哈",L"ERROR_006",MB_OK);
return false;
}
BOOL ISx64=TRUE;
IsWow64Process(hProcess,&ISx64);
if (!ISx64)
{
MessageBox(GetForegroundWindow(),L"無法注入到64位進程哈",L"ERROR_008",MB_OK);
return false;
}
DWORD cb = (1+lstrlenW(DllPath))* sizeof(WCHAR);
LPVOID dwDllAddress=VirtualAllocEx(hProcess,NULL,cb,MEM_COMMIT,PAGE_READWRITE);
BOOL RE=WriteProcessMemory(hProcess,(LPVOID)dwDllAddress,DllPath,cb,&cb);
PTHREAD_START_ROUTINE pfnStartAddr;
pfnStartAddr = (PTHREAD_START_ROUTINE)LoadLibraryW;
HANDLE hThread = CreateRemoteThread(hProcess,NULL,0,pfnStartAddr,dwDllAddress,0,NULL);
if(hThread == NULL)
{
CloseHandle(hThread);
VirtualFreeEx(hThread,dwDllAddress,cb,MEM_RELEASE);
CloseHandle(hProcess);
return false;
}
WaitForSingleObject(hThread,INFINITE);
DWORD ExitCode;
GetExitCodeThread(hThread,&ExitCode);
CloseHandle(hThread);
VirtualFreeEx(hThread,dwDllAddress,cb,MEM_RELEASE);
CloseHandle(hProcess);
if (ExitCode==0)
{
MessageBox(GetForegroundWindow(),L"注入失敗,很大的可能是你的DLL文件問題",L"ERROR_010",MB_OK);
return false;
}

}
else
{
MessageBox(GetForegroundWindow(),L"注入失敗",L"ERROR_009",MB_OK);
return false;
}
return true;
}

❹ 易語言傳奇世界dll注入器源碼

把dll添加到圖片或者聲音資源
需要用到超級模塊,然後輸入法注入,注冊熱鍵(Home或者End),進游戲呼出。
熱鍵.注冊(_啟動窗口_創建完畢(),&Home鍵,#子程序1)
寫到文件(取特定目錄(10)+「\XX.dll",#DLL)
寫到文件(取特定目錄(10)+「\Soudou.ime",#Shurufa)
子程序1
局部變數 bool
bool=(進程是否存在(「傳奇世界私服.exe」)或 進程是否存在(「傳奇世界私服.exe」)

❺ 易語言自動注入DLL源碼

.版本 2
.支持庫 eAPI
.支持庫 spec
.支持庫 iext
.支持庫 shell

.程序集 窗口程序集1
.程序集變數 輸入法句柄, 整數型

.子程序 __啟動窗口_創建完畢
.局部變數 透明度, 整數型
.局部變數 進度條位置, 整數型

.判斷開始 (進程是否存在 (「DNF.exe」))
_啟動窗口.移動 (取屏幕寬度 () - (_啟動窗口.寬度 + 7), 取屏幕高度 () - _啟動窗口.高度 - 37, , )
.變數循環首 (1, 200, 3, 透明度)
設置窗口透明度 (取窗口句柄 (), 透明度)
_啟動窗口.可視 = 真
延遲 (2)
.變數循環尾 ()
延時 (5000)
.變數循環首 (1, 100, 1, 進度條位置)
進度條1.位置 = 進度條位置
.如果真 (進度條1.位置 = 20)
透明標簽1.標題 = 「蝶戀花啟動中...」
延時 (1000)
透明標簽1.標題 = 「蝶戀花更新中...」
注入 ()
.如果真結束
.如果真 (進度條1.位置 = 進度條1.最大位置)
透明標簽1.標題 = 「開始呼出...」
輸入法激活 ()
.如果真結束
.如果真 (進度條1.位置 = 進度條1.最大位置)
透明標簽1.標題 = 「激活成功...」
延時 (2000)
透明度 = 200
特效.漸隱漸現 (取窗口句柄 (), 假, 5000)
延時 (500)
_啟動窗口.可視 = 假
.如果真結束
延遲 (50)
.變數循環尾 ()
.默認
停止播放 ()
信息框 (「請到選擇頻道處開啟本輔助」, 0, )
銷毀 ()
.判斷結束

.子程序 注入, , , dll文件和輸入法需要的文件的寫出

寫到文件 (取特定目錄 (10) + 「\Sougoo.ime」, #Shurufa)
輸入法句柄 = 輸入法.安裝 (取特定目錄 (10) + 「\Sougoo.ime」, 「胡胡輸入法」)
調試輸出 (輸入法句柄)
寫到文件 (取特定目錄 (10) + 「\DNF星辰.dll」, #胡胡掛)
.如果 (輸入法句柄 ≠ 0)
輸入法.設置注入 (取特定目錄 (10) + 「\Sougoo.ime」, 取特定目錄 (10) + 「\DNF星辰.dll」)
.否則
透明標簽1.標題 = 「注入輸入法失敗....」
_啟動窗口.銷毀 ()
.如果結束

.子程序 輸入法激活
.局部變數 bool, 邏輯型

bool = 進程是否存在 (「DNF.exe」)
.如果真 (bool)
輸入法.激活 (取句柄2 (「DNF.exe」, , ), 輸入法句柄)
超級延時 (1000, )
時鍾1.時鍾周期 = 2000
.如果真結束

.子程序 _時鍾1_周期事件

.判斷開始 (進程是否存在 (「DNF.exe」))

.默認
__啟動窗口_將被銷毀 ()
.判斷結束

.子程序 __啟動窗口_將被銷毀

延時 (500)
終止進程 (「TXPlatform.exe」)
終止進程 (「TenSafe.exe」)
刪除文件 (取特定目錄 (10) + 「\DNF星辰.dll」)
刪除文件 (取特定目錄 (10) + 「\Sougoo.ime」)
輸入法.卸載 (輸入法句柄)
延時 (1000)
銷毀 ()
.版本 2

.圖片 Shurufa
.圖片 胡胡掛

❻ 求助一個 易語言DLL注入器源碼 要求能注入游戲

用模塊

❼ 求一個有sql注入漏洞的mssql的網站源碼。

攻擊研究及防範措施

SQL-Based Web System Security——Structured Query Language InjectionLeak Attack Study And Defense Measure

SQL注入(SQL Injection)漏洞攻擊是目前網上最流行最熱門的黑客腳本攻擊方法之一,那什麼是SQL注入漏洞攻擊呢?它是指黑客利用一些Web應用程序(如:網站、論壇、留言本、文章發布系統等)中某些存在不安全代碼或SQL語句不縝密的頁面,精心構造SQL語句,把非法的SQL語句指令轉譯到系統實際SQL語句中並執行它,以獲取用戶名、口令等敏感信息,從而達到控制主機伺服器的攻擊方法。
1. SQL注入漏洞攻擊原理
1. 1 SQL注入漏洞攻擊實現原理

SQL(Structured Query Language)是一種用來和資料庫交互的語言文本。SQL注入的攻擊原理就是攻擊者通過Web應用程序利用SQL語句或字元串將非法的數據插入到伺服器端資料庫中,獲取資料庫的管理用戶許可權,然後將資料庫管理用戶許可權提升至操作系統管理用戶許可權,控制伺服器操作系統,獲取重要信息及機密文件。

SQL注入漏洞攻擊主要是通過藉助於HDSI、NBSI和Domain等SQL注入漏洞掃描工具掃描出Web頁面中存在的SQL注入漏洞,從而定位SQL注入點,通過執行非法的SQL語句或字元串達到入侵者想要的操作。下面以一段身份驗證的.NET代碼為例,說明一下SQL 注入攻擊的實現方法。

SqlConnectionnwConn = new SqlConnection((string)ConfigurationSettings.AppSet

tings["DBconnStrings"]);

string queryStr = "SELECT userid,userpwd, username,type FROM users where userid='" + Txtusername.Text +"'";

DataSet userSet = new DataSet();

SqlDataAdapter userAdapter = newSqlDataAdapter(queryStr, nwConn);

userAdapter.Fill(userSet, "Users");

Session["UserID"] =Txtusername.Text.ToString();

Session["type"] =type.Text.ToString();

Response.Redirect("/Myweb/admin/login.aspx");

從上面的代碼中可以看出,程序在與資料庫建立連接得到用戶數據之後,直接將username的值通過session傳給login.aspx,沒有進行任何的過濾和處理措施, 直接用來構造SQL 語句, 其危險系數是非常高的, 攻擊者只要根據SQL 語句的編寫規則就可以繞過身份驗證,從而達到入侵的目的。
1. 2 SQL注入漏洞攻擊分析

SQL注入可以說是一種漏洞,也可以說是一種攻擊。當程序中的變數處理不當,沒有對用戶提交的數據類型進行校驗,編寫不安全的代碼,構造非法的SQL語句或字元串,都可能產生這個漏洞。

例如Web系統有一個login頁面,這個login頁面控制著用戶是否有權訪問,要求用戶輸入一個用戶名和口令,連接資料庫的語句為:

「select * from users where username = 'username' andpassword = 'password'」

攻擊者輸入用戶名為aa or 1=1口令為1234 or 1=1之類的內容。我們可以看出實際上攻擊者並不知道真正的用戶名、口令,該內容提交給伺服器之後,伺服器執行攻擊者構造出的SQL命令,但由於攻擊者輸入的內容非常特殊,所以最後得到的SQL命令變成:

「select * from users where username = 'aa' or 1=1 andpassword = '1234' or 1=1」;

伺服器執行查詢或存儲過程,將用戶輸入的身份信息和資料庫users表中真實的身份信息進行核對,由於SQL命令實際上已被修改,存在永遠成立的1=1條件,因此已經不能真正驗證用戶身份,所以系統會錯誤地授權攻擊者訪問。

SQL 注入是通過目標伺服器的80埠進行的,是正常的Web訪問,防火牆不會對這種攻擊發出警告或攔截。當Web伺服器以普通用戶的身份訪問資料庫時,利用SQL注入漏洞就可能進行創建、刪除、修改資料庫中所有數據的非法操作。而當資料庫以管理用戶許可權的身份進行登錄時,就可能控制整個資料庫伺服器。

SQL注入的方法很多,在以手動方式進行攻擊時需要構造各種各樣的SQL語句,所以一般攻擊者需要豐富的經驗和耐心,才能繞過檢測和處理,提交語句,從而獲得想要的有用信息。這個過程需要花費很多的時間,如果以這種手動方式進行SQL注入漏洞攻擊,許多存在SQL注入漏洞的ASP、JSP、PHP、JAVA等網站就會安全很多了,不是漏洞不存在了,而是手動入侵者需要編程基礎,但現在攻擊者可以利用一些現成的黑客工具來輔助SQL注入漏洞攻擊,加快入侵的速度,使SQL注入變得輕而易舉。

由於SQL注入漏洞攻擊利用的是通用的SQL語法,使得這種攻擊具有廣泛性。理論上說,對於所有基於SQL語言的資料庫管理系統都是有效的,包括MSSQLServer、Oracle、DB2、Sybase和MySQL等。當然,各種系統自身的SQL擴展功能會有所不同,因此最終的攻擊代碼可能不盡相同。
1. 3 SQL注入漏洞攻擊過程
(1)繞過身份驗證

如一個login界面,需要輸入用戶名和口令,然後Post到另一個頁面,進行身份驗證,因此攻擊者只需在用戶名和口令的輸入框中都輸入aa or』1』=』1』的內容,那麼攻擊者就可以通過欺騙的驗證方式而直接進入下一個頁面,並擁有和正常登錄用戶一樣的全部特權。原因是什麼呢? 我們比較一下正常用戶登錄和攻擊者登錄時的兩種SQL語句:

1)正常用戶(如用戶名為admin,口令為1234567) :

SQL= " selectfrom users where username = 』admin』and password= 』1234567』 ";

2)攻擊者(用戶名和口令都為aa or』1』=』1』) :

SQL= " select * from users where username='aa or』1』=』1』'and password = ' aa or』1』=』1』'";

可以看到由and連接的兩個條件都被一個永遠成立的1=1所代替,執行的結果為true,資料庫會認為條件恆成立,會返回一個true,讓攻擊者以合法身份登錄進入下一個頁面。

(2)執行非法操作

如一個查詢頁面select1.asp? id=1,編程人員原本設計意圖是顯示id為1的查詢信息,而攻擊者利用程序中沒有對id內容進行檢查的機制,插入自己的代碼。

從select1.asp中摘錄一段關鍵代碼:

SQL= " select *from photo where photoid= 'id'";

可以看到,id沒有進行任何的處理,直接構成SQL語句並執行,而攻擊者在知道該系統資料庫中表名及欄位名的情況下,利用SQL語句特性(分號是將兩句SQL 語句分開的符號),直接向資料庫Tuser表中添加記錄:

select1.asp? id= 1;Insertinto Tuser (username,password,type) values ('hack','1234567','管理員'),然後攻擊者就可以直接用hack進行登錄了。通過這樣的方法,攻擊者還可以對系統做任何的事情,包括添加、刪除、修改系統資源的操作。

(3)執行系統命令

如果Web主機使用MSSQL資料庫管理系統,那麼攻擊者就可以用到xp_cmdshell這個擴展存儲過程,xp_cmdshell是一個非常有用的擴展存儲過程,用於執行系統命令,比如dir、net等,攻擊者可以根據程序的不同,提交不同的語句:

execmaster.dbo.xp_cmdshell " dir ";

exec master.dbo.xp_cmdshell" net user hack 1234567 /add ";

execmaster.dbo.xp_cmdshell " net localgroup administrators hack /add ";

這樣就可以向Web主機系統中成功添加了一個管理員帳戶。
2. SQL注入漏洞攻擊的檢測方式及方法
2. 1檢測方式

SQL注入漏洞攻擊檢測分為入侵前的檢測和入侵後的檢測。入侵前的檢測,可以通過手工方式,也可以使用SQL注入漏洞掃描工具軟體。檢測的目的是為預防SQL注入漏洞攻擊,而對於SQL注入漏洞攻擊後的檢測,主要是針對審計日誌的查看,SQL注入漏洞攻擊成功後,會在Web Service和資料庫的審計日誌中留下「痕跡」。
2. 2檢測方法

(1)動態SQL檢查

動態的SQL語句是一個進行資料庫查詢的強大的工具,但把它和用戶輸入混合在一起就使SQL注入成為了可能。將動態的SQL語句替換成預編譯的SQL或者存儲過程對大多數應用程序是可行的。預編譯的SQL或者存儲過程可以將用戶的輸入作為參數而不是命令來執行,這樣就限制了入侵者的行動。當然,它不適用於存儲過程中利用用戶輸入來生成SQL命令的情況。在這種情況下,用戶輸入的SQL命令仍可能得到執行,資料庫仍然存在SQL注入漏洞攻擊的危險。

(2)有效性校驗

如果一個輸入框只可能包括數字,那麼要通過驗證確保用戶輸入的都是數字。如果可以接受字母,檢查是不是存在不可接受的字元,那就需要設置字元串檢查功能。確保應用程序要檢查以下字元:分號、等號、破折號、括弧以及SQL關鍵字。

(3)數據表檢查

使用SQL注入漏洞攻擊工具軟體進行SQL注入漏洞攻擊後,都會在資料庫中生成一些臨時表。通過查看資料庫中最近新建的表的結構和內容,可以判斷是否曾經發生過SQL注入漏洞攻擊。

(4)審計日誌檢查

在Web伺服器中如果啟用了審計日誌功能,則Web Service審計日誌會記錄訪問者的IP地址、訪問時間、訪問文件等信息,SQL注入漏洞攻擊往往會大量訪問某一個頁面文件(存在SQL注入點的動態網頁),審計日誌文件會急劇增加,通過查看審計日誌文件的大小以及審計日誌文件中的內容,可以判斷是否發生過SQL注入漏洞攻擊事件;另外還可以通過查看資料庫審計日誌,查詢某個時間段是否有非法的插入、修改、刪除操作。

(5)其他

SQL注入漏洞攻擊成功後,入侵者往往會添加特權用戶(如:administrator、root、sa等)、開放非法的遠程服務以及安裝木馬後門程序等,可以通過查看用戶帳戶列表、遠程服務開啟情況、系統最近日期產生的一些文件等信息來判斷是否發生過入侵。
3. SQL注入漏洞攻擊檢測防範模型及措施
3. 1 防範模型

本人通過深入的學習研究,吸取前人的經驗成果,提出了一種通用的SQL注入漏洞攻擊檢測防範模型如圖1所示,本模型中所有檢測均在伺服器端進行。首先是校驗客戶端提交數據的有效性,自動識別該數據類型是否符合程序中設定的值,如果校驗未通過將禁止訪問,返回重新輸入數據並記錄該過程;其次將輸入的字元串類型與SQL注入規則庫字元串類型進行比對,檢測字元串類型是否合法(驗證是否存在SQL注入漏洞),若不合法也將禁止訪問,返回重新輸入數據並記錄該操作;最後檢測是否超過訪問許可權,如果未超過訪問許可權,就可以正常訪問頁面,若超過訪問許可權,除禁止訪問,返回重新輸入數據並記錄該操作外,同時發送Email給管理員,如果超過3次郵件告警管理員還未採取任何措施,那麼將通過手機簡訊方式進行告警,直到管理員採取防範措施為止。

圖1 SQL注入漏洞攻擊檢測防範模型

本模型的最大特點是自動將攻擊信息及時地傳遞給管理員,方便管理員及時做出響應。
3. 2 防範措施

SQL注入漏洞攻擊的防範方法有很多種,現階段總結起來有以下方法:

(1)數據有效性校驗。如果一個輸入框只可能包括數字,那麼要通過校驗確保用戶輸入的都是數字。如果可以接受字母,那就要檢查是不是存在不可接受的字元,最好的方法是增加字元復雜度自動驗證功能。確保應用程序要檢查以下字元:分號、等號、破折號、括弧以及SQL關鍵字。另外限製表單數據輸入和查詢字元串輸入的長度也是一個好方法。如果用戶的登錄名最多隻有10個字元,那麼不要認可表單中輸入10個以上的字元,這將大大增加攻擊者在SQL命令中插入有害代碼的難度。

(2)封裝數據信息。對客戶端提交的數據進行封裝,不要將數據直接存入cookie中,方法就是在編程的代碼中,插入session、if、try、else,這樣可以有效地防止攻擊者獲取cookie中的重要信息。

(3)去除代碼中的敏感信息。將在代碼中存在的用戶名、口令信息等敏感欄位刪除,替換成輸入框。

如:SQL=" select from users where username = 』admin』and password= 』1234567』 "這樣顯然會暴露管理員的用戶名、口令信息。可以將其修改成SQL= " select * from users where username='" +Txtuser.Text + "' and userpwd='" + Textpwd.Text + "'",這樣就安全了很多,入侵者也是不會輕易的就獲取到用戶名、口令信息。

(4)替換或刪除單引號。使用雙引號替換掉所有用戶輸入的單引號,這個簡單的預防措施將在很大程度上預防SQL注入漏洞攻擊,單引號時常會無法約束插入數據的Value,可能給予輸入者不必要的許可權。用雙引號替換掉單引號可以使大部分SQL注入漏洞攻擊失敗。

如:「select* from users where username='" + admin + "' and userpwd='" + 1234567+ "'」顯然會得到與「select * from users where username='admin' and password= '1234567'」相同的結果。

(5)指定錯誤返回頁面。攻擊者有時從客戶端嘗試提交有害代碼和攻擊字元串,根據Web Service給出的錯誤提示信息來收集程序及伺服器的信息,從而獲取想得到的資料。應在Web Service中指定一個不包含任何信息的錯誤提示頁面。

(6)限制SQL字元串連接的配置文件。使用SQL變數,因為變數不是可以執行的腳本,即在Web頁面中將連接資料庫的SQL字元串替換成指定的Value,然後將Web.config文件進行加密,拒絕訪問。

(7)設置Web目錄的訪問許可權。將虛擬站點的文件目錄禁止遊客用戶(如:Guest用戶等)訪問,將User用戶許可權修改成只讀許可權,切勿將管理許可權的用戶添加到訪問列表。

(8)最小服務原則。Web伺服器應以最小許可權進行配置,只提供Web服務,這樣可以有效地阻止系統的危險命令,如ftp、cmd、vbscript等。

(9)鑒別信息加密存儲。將保存在資料庫users表中的用戶名、口令信息以密文形式保存,也可以對users表進行加密處理,這樣可以大大增加對鑒別信息訪問的安全級別。

(10)用戶許可權分離。應盡可能的禁止或刪除資料庫中sa許可權用戶的訪問,對不同的資料庫劃分不同的用戶許可權,這樣不同的用戶只能對授權給自己的資料庫執行查詢、插入、更新、刪除操作,就可以防止不同用戶對非授權的資料庫進行訪問。
4. 結束語

SQL注入漏洞攻擊在網上非常普遍,許多ASP、PHP論壇和文章管理系統、下載系統以及新聞系統都存在這個漏洞。造成SQL注入漏洞攻擊的主要原因是開發人員在系統開發的過程中編程不規范,沒有形成良好的編程習慣,問題的解決只有依賴於規范編程。此外,也可以使用現有的SQL注入漏洞掃描器對整個網站中的關鍵代碼進行掃描,查找網站頁面中存在的SQL注入點。對於有問題的頁面,可以及時刪除或更新。本文通過對SQL注入漏洞攻擊的方法、原理以及攻擊實施過程進行了闡述和總結,並給出了一些常見的SQL注入漏洞攻擊防範的方法。

❽ e語言注入器和DLL源碼是什麼意思

注入器是一個軟體
而DLL源碼是你要注入到某個進程的文件
也就是輔助工具或者什麼的

❾ 易語言 進程注入 源碼

首先設置要需要注入的進程,然後打開自動判斷進程是否存在,如果存在就注入,不在就提示

==================================================
答案來源 → 精易論壇,要學習的可網路一下"精易論壇"
精易論壇 → 專業易語言技術交流學習平台

❿ 求SQL 注入工具 的源代碼 ,萬分感謝!

實現會員信息管理功能,包括增加會員信息,修改會員信息,刪除會員信息,查詢(精確和模糊)會員信息功能。 別人都是掛網上賣的,你雜這樣了… 這

熱點內容
存儲過程異常 發布:2024-05-05 23:24:03 瀏覽:397
winxp訪問不了win7 發布:2024-05-05 23:05:23 瀏覽:733
演算法牛 發布:2024-05-05 22:43:40 瀏覽:719
grublinux引導 發布:2024-05-05 22:37:56 瀏覽:215
unix高級編程第三版pdf 發布:2024-05-05 22:32:09 瀏覽:958
手機wap網站源碼 發布:2024-05-05 22:27:44 瀏覽:259
python修改文件某一行 發布:2024-05-05 22:18:22 瀏覽:457
md5加密64 發布:2024-05-05 21:59:30 瀏覽:527
259pp頁面訪問升級 發布:2024-05-05 21:47:51 瀏覽:89
迅雷阻止上傳 發布:2024-05-05 21:26:19 瀏覽:914