.版本 2 .支持库 eAPI .支持库 spec .程序集 集_进程 .子程序 进程_名取句柄, 整数型, 公开, 通过进程名取对应的窗口句柄;成功返回窗口句柄,失败返回0,返回-1表示找不到进程。 .参数 进程名, 文本型, , 要取窗口句柄的进程名; .局部变量 pid .局部变量 hwnd pid = 进程_名取ID (进程名) .如果真 (pid ≠ 0) 返回 (进程_ID取窗口句柄 (pid, , , 100, 真)) .如果真结束 返回 (-1) .子程序 进程_名取ID, 整数型, 公开, 通过进程名取进程ID;失败返回0 .参数 进程名, 文本型, , 取要进程ID的进程名 .参数 是否区分大小写, 逻辑型, 可空, 默认为不区分,真=区分 .局部变量 局_进程信息, PROCESSENTRY32 .局部变量 进程快照, 整数型 .局部变量 是否存在, 整数型 进程快照 = CreateToolhelp32Snapshot (2, 0) .如果真 (进程快照 = #INVALID_HANDLE_VALUE) 返回 (0) .如果真结束 局_进程信息.dwSize = 296 ' sizeof(PROCESSENTRY32) 是否存在 = Process32First (进程快照, 局_进程信息) .判断循环首 (是否存在 ≠ 0) .如果真 (文本比较 (进程名, 到文本 (局_进程信息.进程名称), 是否区分大小写) = 0) CloseHandle (进程快照) 返回 (局_进程信息.进程ID) .如果真结束 是否存在 = Process32Next (进程快照, 局_进程信息) .判断循环尾 () CloseHandle (进程快照) 返回 (0) .子程序 进程_ID取窗口句柄, 整数型, 公开, 通过进程ID取得该进程的窗口句柄,超时则返回零;PS:返回的句柄不一定是祖句柄,只要满足条件就返回 .参数 进程ID, 整数型, , 该进程的ID; .参数 窗口标题, 文本型, 可空, 模糊参数 如果为空,忽略此参数 .参数 窗口类名, 文本型, 可空, 模糊参数 如果为空,忽略此参数 .参数 超时, 整数型, 可空, 为空则无限循环 .参数 是否可见, 逻辑型, 可空, 可空 默认为真,只查找可见的窗口;为假则查找包括不可见的窗口 .局部变量 dwStartTime, 整数型 .局部变量 dwEndTime, 整数型 .局部变量 hWnd, 整数型 .局部变量 dwProcessId, 整数型 .局部变量 szClass, 文本型 .局部变量 szTitle, 文本型 .如果真 (是否为空 (是否可见)) 是否可见 = 真 .如果真结束 dwStartTime = GetTickCount () dwEndTime = 选择 (是否为空 (超时) 或 超时 < 0, 31536000, 超时) .判断循环首 (GetTickCount () - dwStartTime < dwEndTime) hWnd = FindWindowExA (#NULL, hWnd, #NULL, #NULL) .如果真 (hWnd = 0) 跳出循环 () .如果真结束 .如果真 (是否可见) .如果真 (IsWindowVisible (hWnd) = 假) 到循环尾 () .如果真结束 .如果真结束 GetWindowThreadProcessId (hWnd, dwProcessId) .如果真 (dwProcessId = 进程ID 且 GetParent (hWnd) = 0) szClass = 窗口_取类名 (hWnd) szTitle = 窗口_取标题 (hWnd) .判断开始 (是否为空 (窗口标题) 且 是否为空 (窗口类名)) 返回 (hWnd) .判断 (是否为空 (窗口标题)) .如果真 (寻找文本 (szClass, 窗口类名, , 假) ≠ -1) 返回 (hWnd) .如果真结束 .判断 (是否为空 (窗口类名)) .如果真 (寻找文本 (szTitle, 窗口标题, , 假) ≠ -1) 返回 (hWnd) .如果真结束 .判断 (寻找文本 (szClass, 窗口类名, , 假) ≠ -1 且 寻找文本 (szTitle, 窗口标题, , 假) ≠ -1) 返回 (hWnd) .默认 .判断结束 .如果真结束 处理事件 () .判断循环尾 () 返回 (0) .子程序 进程_禁止运行, 逻辑型, 公开, 禁止指定的进程运行 .参数 进程名, 文本型 .局部变量 进程数组, 进程信息, , "0" .局部变量 I, 整数型 .局部变量 进程信息, 进程信息 .局部变量 进程名称, 文本型 进程数组 = 取系统进程列表 () .计次循环首 (取数组成员数 (进程数组), I) 进程信息 = 进程数组 [I] 进程名称 = 进程信息.进程名称 .如果真 (进程名称 = 进程名) 返回 (终止进程 (进程名称)) .如果真结束 .计次循环尾 () 返回 (假) ' 本命令用作于找不到该进程时的操作。 .子程序 进程_是否存在, 逻辑型, 公开, 存在返回真,不存在返回假 .参数 进程名, 文本型 .局部变量 进程数组, 进程信息, , "0" .局部变量 I, 整数型 .局部变量 进程信息, 进程信息 .局部变量 进程名称, 文本型 .局部变量 is, 逻辑型 进程数组 = 取系统进程列表 () .计次循环首 (取数组成员数 (进程数组), I) 进程信息 = 进程数组 [I] 进程名称 = 进程信息.进程名称 .如果真 (进程名称 = 进程名) is = 真 .如果真结束 .计次循环尾 () 返回 (is) .子程序 进程_守护, , 公开, 守护指定的进程 .参数 进程名, 文本型 .参数 进程完整路径, 文本型 .局部变量 是否存在, 逻辑型 .局部变量 当前状态, 逻辑型 .局部变量 结果, 逻辑型 是否存在 = 进程_是否存在 (进程名) .如果真 (是否存在 = 假) 返回 () .如果真结束 .判断循环首 (是否存在) 当前状态 = 进程_是否存在 (进程名) .如果真 (当前状态 = 假) 结果 = 运行 (进程完整路径, 假, ) .如果真 (结果 = 假) 跳出循环 () .如果真结束 .如果真结束 .判断循环尾 () .子程序 进程_一直禁止, , 公开, 一直禁止指定的进程运行 .参数 进程名, 文本型 .局部变量 结果, 逻辑型 结果 = 进程_禁止运行 (进程名) .判断循环首 (结果) .如果真 (进程_是否存在 (进程名)) 结果 = 终止进程 (进程名) .如果真 (结果 = 假) 跳出循环 () .如果真结束 .如果真结束 .判断循环尾 () .子程序 进程_取列表, 整数型, 公开, 返回进程的数量 .参数 进程列表, 文本型, 参考 可空 数组 .局部变量 进程信息, 进程信息, , "0" .局部变量 I, 整数型 .局部变量 临时信息, 文本型 清除数组 (进程列表) 进程信息 = 取系统进程列表 () .计次循环首 (取数组成员数 (进程信息), I) 临时信息 = 进程信息 [I].进程名称 加入成员 (进程列表, 临时信息) .计次循环尾 () 返回 (取数组成员数 (进程列表)) .子程序 进程_取数量, 整数型, 公开, 返回进程的数量 返回 (进程_取列表 ()) .子程序 进程_设为关键, 逻辑型, 公开, 进程退出才触发蓝屏 .参数 是否执行, 逻辑型, 可空, 默认为假,真为设置关键进程,假为取消关键进程 .如果真 (是否执行 = 假) RtlAdjustPrivilege (20, 真, 假, 0) 返回 (NtSetInformationProcess (-1, 29, 0, 4) = #STATUS_SUCCESS) .如果真结束 RtlAdjustPrivilege (20, 真, 假, 0) 返回 (NtSetInformationProcess (-1, 29, 1, 4) = #STATUS_SUCCESS) .子程序 进程_取存在数量, 整数型, 公开, 获取指定进程的存在数量,找不到返回0 .参数 进程名, 文本型 .局部变量 进程数组, 进程信息, , "0" .局部变量 I, 整数型 .局部变量 进程信息, 进程信息 .局部变量 进程名称, 文本型 .局部变量 进程数量, 整数型 进程数组 = 取系统进程列表 () .计次循环首 (取数组成员数 (进程数组), I) 进程信息 = 进程数组 [I] 进程名称 = 进程信息.进程名称 .如果真 (进程名称 = 进程名) 进程数量 = 进程数量 + 1 .如果真结束 .计次循环尾 () 返回 (进程数量) .子程序 进程_注入, 逻辑型, 公开, 进程注入。成功返回真,失败返回假。 .参数 进程名称, 文本型 .参数 进程名称区分大小写, 逻辑型, 可空, 默认为假 .参数 模块名称, 文本型, , 用于注入的模块名称 .参数 函数名称, 文本型, , 用于注入的函数名称 .参数 注入代码1, 字节集 .参数 注入代码2, 字节集 .局部变量 phandle, 整数型 .局部变量 lpbuf, 整数型 .局部变量 ret, 整数型 .局部变量 messageaddr, 整数型 .局部变量 hthread, 整数型 .局部变量 sa, SECURITY_ATTRIBUTES .局部变量 shellcode, 字节集 .局部变量 dwsize, 整数型 phandle = OpenProcess (2035711, 假, 进程_名取ID (进程名称, 进程名称区分大小写)) .如果真 (phandle = 0) OutputDebugStringA (“打开进程失败!”) 返回 (假) .如果真结束 messageaddr = GetProcAddress (GetModuleHandleA (模块名称), 函数名称) lpbuf = VirtualAllocEx (phandle, 0, 100, 4096, 64) .如果真 (lpbuf = 0) OutputDebugStringA (“分配内存失败!”) CloseHandle (phandle) 返回 (假) .如果真结束 shellcode = 注入代码1 dwsize = 取字节集长度 (shellcode) ret = WriteProcessMemory (phandle, lpbuf, shellcode, dwsize, 0) .如果真 (ret = 假) OutputDebugStringA (“写内存失败!”) VirtualFreeEx (phandle, lpbuf, 100, 16384) 返回 (假) .如果真结束 hthread = CreateRemoteThread (phandle, sa, 0, lpbuf + 取字节集长度 (注入代码2) + 2, 0, 0, 0) .如果真 (hthread = 0) OutputDebugStringA (“创建线程失败!”) 返回 (假) .如果真结束 WaitForSingleObject (hthread, 4294967295) VirtualFreeEx (phandle, lpbuf, 100, 16384) CloseHandle (hthread) CloseHandle (phandle) 返回 (dwsize ≠ 0) .子程序 进程_取自身加载模块, 整数型, 公开, 反DLL注入必备 .参数 储存数组, 文本型, 参考 可空 数组 .参数 储存数组_模块详细信息, MODULE_INFO, 参考 可空 数组 .局部变量 pPEB, 整数型 .局部变量 pLDR, 整数型 .局部变量 ldr_first, 整数型 .局部变量 prev, 整数型 .局部变量 next, 整数型 .局部变量 pustr, 整数型 .局部变量 ustr, 字节集 .局部变量 buf, 字节集 .局部变量 i, 整数型 .局部变量 unit, 逻辑型 .局部变量 unit2, 逻辑型 .局部变量 temp, MODULE_INFO .局部变量 val, 整数型 unit = 取反 (是否为空 (储存数组_模块详细信息)) unit2 = 取反 (是否为空 (储存数组)) .如果真 (unit) 清除数组 (储存数组_模块详细信息) .如果真结束 .如果真 (unit2) 清除数组 (储存数组) .如果真结束 buf = { 0, 0 } pPEB = 线程_取PEB基址 () pLDR = 指针到整数 (pPEB + 12) next = 指针到整数 (pLDR + 16) ldr_first = pLDR + 12 prev = 指针到整数 (pLDR + 12) .判断循环首 (next ≠ ldr_first) val = val + 1 ustr = { } pustr = 指针到整数 (prev + 十六进制 (“30”)) i = 0 .循环判断首 () _CopyMemory (取指针_字节集型 (buf), pustr + i × 2, 2) ustr = ustr + buf i = i + 1 .循环判断尾 (buf ≠ { 0, 0 }) .如果真 (unit2) 加入成员 (储存数组, 内部_Unicode到Ansi (ustr)) .如果真结束 .如果真 (unit) temp.模块名称 = 内部_Unicode到Ansi (ustr) ustr = { } pustr = 指针到整数 (prev + 十六进制 (“28”)) i = 0 .循环判断首 () _CopyMemory (取指针_字节集型 (buf), pustr + i × 2, 2) ustr = ustr + buf i = i + 1 .循环判断尾 (buf ≠ { 0, 0 }) temp.模块路径全名 = 内部_Unicode到Ansi (ustr) temp.模块基地址 = 指针到整数 (prev + 十六进制 (“18”)) temp.sizeofimage = 指针到整数 (prev + 十六进制 (“20”)) 加入成员 (储存数组_模块详细信息, temp) .如果真结束 prev = next next = 指针到整数 (prev + 4) .判断循环尾 () 返回 (val) .子程序 进程_打开, 整数型, 公开, 通过目标窗口句柄或进程ID取进程句柄,成功返回进程句柄 .参数 句柄或pid, 整数型, , 窗口句柄或进程ID .局部变量 hProcess, 整数型 .局部变量 dwProcessID, 整数型 dwProcessID = 句柄或pid .如果真 (IsWindow (句柄或pid)) GetWindowThreadProcessId (句柄或pid, dwProcessID) .如果真结束 hProcess = OpenProcess (2035711, 0, dwProcessID) 返回 (hProcess) .子程序 进程_终止, 逻辑型, 公开, 终止指定的进程 .参数 进程句柄, 整数型 返回 (TerminateProcess (进程句柄, 0)) .子程序 进程_关闭, 逻辑型, 公开, 关闭已经打开的操作句柄 .参数 进程句柄, 整数型, , 进程句柄,线程句柄 返回 (CloseHandle (进程句柄)) .子程序 进程_创建, 逻辑型, 公开, 创建一个程序进程,创建失败返回假 .参数 程序路径, 文本型, , 欲创建进程的执行路径 .参数 命令行, 文本型, 可空, 附加上程序路径后的命令行参数 .参数 运行目录, 文本型, 可空, 通常留空,特殊情况下使用 .参数 进程结构, 进程结构, 参考 可空, 接收进程结构信息的变量,如果不为空,产品的句柄用CloseHandle函数释放 .局部变量 窗口结构, STARTUPINFO .局部变量 创建结果, 逻辑型 .如果真 (运行目录 = “”) 运行目录 = 取文本左边 (程序路径, 倒找文本 (程序路径, “\”, , 假)) .如果真结束 创建结果 = CreateProcessA (程序路径, 命令行, 0, 0, 假, 0, 0, 运行目录, 窗口结构, 进程结构) .如果真 (是否为空 (进程结构)) CloseHandle (进程结构.进程句柄) CloseHandle (进程结构.线程句柄) .如果真结束 返回 (创建结果) .子程序 进程_提升权限, 逻辑型, 公开, 参考精易模块,提升进程到指定权限( #备份 #启动 #关机 #调试 #设备 #固件 #安全 #全局) .参数 目标进程ID, 整数型, 可空, 为空表示当前进程ID .参数 权限类别, 文本型, 可空, 为空:#调试( #备份 #启动 #关机 #调试 #设备 #固件 #安全 #全局) .局部变量 hProcess, 整数型 .局部变量 hToken, 整数型 .局部变量 Luid, LUID .局部变量 tkp, TOKEN_PRIVILEGES .局部变量 bRet, 逻辑型 .如果 (目标进程ID = 0) hProcess = -1 .否则 hProcess = OpenProcess (#PROCESS_ALL_ACCESS, 假, 目标进程ID) .如果结束 .如果真 (hProcess = 0) 返回 (假) .如果真结束 .如果真 (OpenProcessToken (hProcess, 位或 (#TOKEN_QUERY, #TOKEN_ADJUST_PRIVILEGES), hToken)) .如果 (权限类别 = “”) LookupPrivilegeValueA (#NULL, #调试, Luid) .否则 LookupPrivilegeValueA (#NULL, 权限类别, Luid) .如果结束 tkp.PrivilegeCount = 1 tkp.LowPart = Luid.LowPart tkp.HighPart = Luid.HighPart tkp.Attributes = #SE_PRIVILEGE_ENABLED ' tkp.Attributes = #NULL ' 禁用特权 bRet = AdjustTokenPrivileges (hToken, 假, tkp, 16, #NULL, #NULL) ' sizeof(TOKEN_PRIVILEGES) CloseHandle (hToken) .如果真结束 CloseHandle (hProcess) 返回 (bRet) .子程序 进程_提升权限到Debug, 逻辑型, 公开, 成功返回真,失败返回假。把一个进程的权限提升到调试级权限 .参数 进程ID, 整数型, 可空, 可空为提升当前进程 返回 (进程_提升权限 (进程ID, #调试)) .子程序 进程_设为关键进程, 逻辑型, 公开, 将当前进程设置为系统关键进程 .参数 是否设置, 逻辑型, 可空, 默认为假 .如果真 (进程_提升权限到Debug () = 假) 返回 (假) .如果真结束 返回 (RtlSetProcessIsCritical (是否设置, 0, 假) = #STATUS_SUCCESS) ' 设为系统关键进程 .子程序 进程_设为关键Ex, 逻辑型, 公开, 支持任意进程,进程退出才触发蓝屏 .参数 进程句柄, 整数型, 可空, -1为当前进程的句柄,默认为-1 .参数 是否执行, 逻辑型, 可空, 默认为假,真为设置关键进程,假为取消关键进程 .如果真 (进程句柄 = 0) 进程句柄 = -1 .如果真结束 .如果真 (是否执行 = 假) RtlAdjustPrivilege (20, 真, 假, 0) 返回 (NtSetInformationProcess (进程句柄, 29, 0, 4) = #STATUS_SUCCESS) .如果真结束 RtlAdjustPrivilege (20, 真, 假, 0) 返回 (NtSetInformationProcess (进程句柄, 29, 1, 4) = #STATUS_SUCCESS) .子程序 进程_取系统版本, , 公开, 获取当前进程的系统版本 .参数 进程ID, 整数型, 可空, 0 .参数 主要版本号, 整数型, 参考 可空, OSMajorVersion .参数 次要版本号, 整数型, 参考 可空, OSMinorVersion .参数 内部版本号, 短整数型, 参考 可空, OSBuildNumber 置入代码 ({ 100, 139, 29, 48, 0, 0, 0, 141, 155, 172, 0, 0, 0, 185, 3, 0, 0, 0, 139, 3, 139, 84, 205, 8, 137, 2, 131, 235, 4, 226, 243, 201, 194, 14, 0 }) ' mov ebx, dword [fs:30h] ' lea ebx, dword [ebx+0ACh] ' mov ecx, 03h ' label1: ' mov eax, dword [ebx] ' mov edx, dword [ebp+ecx*8+08h] ' mov dword [edx], eax ' sub ebx, 04h ' loop label1 ' leave ' retn 0Eh .子程序 进程_取程序路径, 文本型, 公开, 【只支持32位进程】取指定进程名的程序启动路径(成功返回路径,失败或进程不存在返回空) .参数 进程名, 文本型, , 程序进程名 .参数 区分大小写, 逻辑型, 可空, 默认不区分进程名大小写 .局部变量 进程列表, 进程信息_ .局部变量 进程数, 整数型 .局部变量 进程快照, 整数型 .局部变量 临时, 整数型 .局部变量 临时路径, 文本型 .局部变量 临时进程名, 文本型 .局部变量 snap, 整数型 .局部变量 mod, 模块信息_ 进程快照 = _创建快照 (15, 0) .如果真 (进程快照 = 0) 信息框 (“创建进程快照失败”, 0, ) 返回 (“”) .如果真结束 进程数 = 0 进程列表.dwSize = 296 临时 = _第一个 (进程快照, 进程列表) .判断循环首 (临时 ≠ 0) 进程数 = 进程数 + 1 snap = _创建快照 (8, 进程列表.进程ID) mod.size = 1024 _第一个模块 (snap, mod) 临时路径 = 取字节集数据 (到字节集 (mod.模块完整路径), 10, ) _关闭对象 (snap) .如果真 (进程列表.进程ID ≠ 0) 临时进程名 = 到文本 (进程列表.进程名称) .如果 (区分大小写) .如果真 (临时进程名 = 进程名) _关闭对象 (进程快照) .如果真 (寻找文本 (临时路径, “?”, , 假) > 0) 返回 (“”) .如果真结束 返回 (临时路径) .如果真结束 .否则 .如果真 (到小写 (临时进程名) = 到小写 (进程名)) _关闭对象 (进程快照) .如果真 (寻找文本 (临时路径, “?”, , 假) > 0) 返回 (“”) .如果真结束 返回 (临时路径) .如果真结束 .如果结束 .如果真结束 临时 = _下一个 (进程快照, 进程列表) .判断循环尾 () _关闭对象 (进程快照) 返回 (“”) .子程序 进程_结束自身进程, , 公开, 本命令结束当前易程序的运行。本命令为初级命令。 TerminateProcess (-1, 0) .子程序 进程_隐藏自身模块, 逻辑型, 公开, DLL注入后可用此函数隐藏,此操作不可逆! .参数 模块名, 文本型, , 模块的名称,譬如test.dll .局部变量 pPEB, 整数型 .局部变量 pLDR, 整数型 .局部变量 ldr_first, 整数型 .局部变量 prev, 整数型 .局部变量 next, 整数型 .局部变量 pustr, 整数型 .局部变量 ustr, 字节集 .局部变量 buf, 字节集 .局部变量 i, 整数型 模块名 = 文件_取文件名 (模块名) buf = { 0, 0 } pPEB = 线程_取PEB基址 () pLDR = 指针到整数 (pPEB + 12) next = 指针到整数 (pLDR + 16) ldr_first = pLDR + 12 prev = 指针到整数 (pLDR + 12) .判断循环首 (next ≠ ldr_first) ustr = { } pustr = 指针到整数 (prev + 十六进制 (“30”)) i = 0 .循环判断首 () _CopyMemory (取变量数据地址 (buf), pustr + i × 2, 2) ustr = ustr + buf i = i + 1 .循环判断尾 (buf ≠ { 0, 0 }) .如果真 (到小写 (内部_Unicode到Ansi (ustr)) = 到小写 (模块名)) .如果真 (IsBadWritePtr (prev, 4)) 返回 (假) .如果真结束 写到内存 (next, 指针到整数 (prev) + 4, ) 写到内存 (指针到整数 (prev), next, ) 返回 (lstrlen (prev) ≠ 0) .如果真结束 prev = next next = 指针到整数 (prev + 4) .判断循环尾 () 返回 (假) .子程序 进程_附加控制台, 逻辑型, 公开, 将调用进程附加到指定进程的控制台作为客户端应用程序。 .参数 PID, 整数型 返回 (AttachConsole (PID))