当前位置:首页 » 操作系统 » 注入工具源码

注入工具源码

发布时间: 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-19 05:49:29 浏览:589
开启php短标签 发布:2024-05-19 05:44:12 浏览:473
android各国语言 发布:2024-05-19 05:42:54 浏览:247
微信什么资料都没怎么找回密码 发布:2024-05-19 05:35:34 浏览:907
填志愿密码是什么 发布:2024-05-19 05:30:23 浏览:318
城堡争霸自动掠夺脚本 发布:2024-05-19 05:22:06 浏览:204
asp编程工具 发布:2024-05-19 05:20:36 浏览:143
insertpython 发布:2024-05-19 05:12:26 浏览:244
androidant编译 发布:2024-05-19 05:04:11 浏览:988
按键脚本优化 发布:2024-05-19 04:59:57 浏览:752