模块名称:增强APIHook类
作者:颠沛流离
版本:1.4
MyAPIHookClass v1.4 我的增强类模块
2012-08-27 16:42:03 编译
增强了一下现有的apihook类。
可Hook5字节7字节等长度的函数头。
可无需停止Hook调用原函数过程。
可多级jmp方式Hook同一个函数
参照mhook库增加了Hook安装时挂起线程以便安全安装Hook
将调用原函数功能完全封装到类中,无需外部子程序配合。
添加 检测是否已被Hook 方法
使用新版核心库编译
@备注:
颠沛流离开源作品
QQ:82668839
感谢前辈们的开源贡献!
鸣谢dtcser开源的“易语言取汇编指令长度模块源码”
------------------------------
.版本 2
.数据类型 THREADENTRY32, 公开, 线程信息
.成员 dwSize, 整数型
.成员 cntUsage, 整数型
.成员 th32ThreadID, 整数型
.成员 th32OwnerProcessID, 整数型
.成员 tpBasePri, 整数型
.成员 tpDeltaPri, 整数型
.成员 dwFlags, 整数型
.程序集 增强APIHook类, , 公开, 利用dtcser的"易语言取汇编指令长度模块源码"增强了一下,可以自动判断头部代码长度,可无需停止Hook直接调用,可以多级JmpHook.
.子程序 安装HookByAddr, 逻辑型, 公开, 根据函数地址安装Hook,成功真,失败假.参数3默认真(是否立即启动);参数4默认假(C方式调用);参数5默认假(多级Jmp)
.参数 FunctionAddr, 整数型, , 原始函数地址*指针
.参数 NewProc, 整数型, , 新函数过程地址*指针
.参数 StartAtOnce, 逻辑型, 可空, 默认真,是否立即Hook
.参数 __cdecl, 逻辑型, 可空, 默认假,真为__cdecl调用
.参数 MultiJmp, 逻辑型, 可空, 同 安装HookByName 解释
.子程序 安装HookByName, 逻辑型, 公开, 根据函数名称安装Hook,成功真,失败假.参数4默认真(是否立即启动);参数5默认假(C方式调用);参数6默认假(多级Jmp)
.参数 DllName, 文本型, , 模块名称
.参数 FuncName, 文本型, , 函数名称.注意:务必区分大小写,否则会找不到函数
.参数 NewProc, 整数型, , 新函数过程地址*指针
.参数 StartAtOnce, 逻辑型, 可空, 默认真,是否立即Hook
.参数 __Cdecl, 逻辑型, 可空, 默认假,真为__cdecl调用
.参数 MultiJmp, 逻辑型, 可空, 默认假,多级Jmp方式Hook,为真的时候才判断前5个字节中的第一个是不是E9,但是别人的Hook可能会破坏你的Hook!(如果别人的Hook是传统的暂停再继续,也就是说反复还原代码再修改代码,那就没辙了)
.子程序 调用原函数, 整数型, 公开, 失败返回0.自动选择被调用地址,若新函数头生成失败,自动选择原始地址调用.可直接无缝调用原函数(支持_CDECL和_stdcall),参数必须都为整数型,非整数型请自行取址.
.参数 参数1, 整数型, 可空
.参数 参数2, 整数型, 可空
.参数 参数3, 整数型, 可空
.参数 参数4, 整数型, 可空
.参数 参数5, 整数型, 可空
.参数 参数6, 整数型, 可空
.参数 参数7, 整数型, 可空
.参数 参数8, 整数型, 可空
.参数 参数9, 整数型, 可空
.参数 参数10, 整数型, 可空
.参数 参数11, 整数型, 可空
.参数 参数12, 整数型, 可空
.参数 参数13, 整数型, 可空
.参数 参数14, 整数型, 可空
.参数 参数15, 整数型, 可空
.子程序 函数新过程地址, 整数型, 公开, 返回函数被Hook之后跳到的新过程地址,外部实际上就知道.没多大用处,删掉也罢
.子程序 函数原内存地址, 整数型, 公开, 返回函数原始的位置.注意:该方法的返回值只有当Hook被暂停后才可以调用,否则调用将导致死循环
.子程序 继续Hook, 逻辑型, 公开, 传统的继续/开始Hook,成功返回真,失败返回假.若Hook被卸载,返回假
.子程序 检测是否已被Hook, 整数型, 公开, 检测前5个字节是否被JmpHook(是否为Jmp xxxxxxxx).返回0未Hook,返回1已Hook,返回2被自身Hook
.参数 DllName, 文本型, , 模块名称,必填,以便在安装Hook之前检测.
.参数 FuncName, 文本型, , 函数名称,必填,以便在安装Hook之前检测.注意:务必区分大小写,否则会找不到函数
.子程序 清理新函数头, 逻辑型, 公开, 清理新函数头之前必须先卸载Hook,否则不会生效!成功返回真,否则假
.子程序 卸载Hook, 逻辑型, 公开, 如果是被强制作为C调用,可选择是否恢复,默认恢复.注意:为了直接调用返回值,卸载成功返回假,失败返回真!!!
.参数 完全卸载, 逻辑型, 可空, 默认真,清理生成的函数头信息
.参数 恢复调用, 逻辑型, 可空, 默认真,恢复原来的__stdcall方式调用,必须在Hook时指定强制C方式并且成功修改为C方式才有效
.子程序 新函数头, 整数型, 公开, 返回新生成的函数头部地址,无需暂停Hook即可调用,可防止漏掉Hook,并且不会造成死循环.Hook卸载后,若不清除函数头,则可继续使用
.子程序 暂停Hook, 逻辑型, 公开, 传统的暂停/还原Hook,成功返回真,失败返回假.并不还原C方式调用的代码以及内存属性等
.DLL命令 API_CloseHandle, 整数型, "Kernel32", "CloseHandle", 公开
.参数 hObject, 整数型, , HANDLE hObject
.DLL命令 API_CreateToolhelp32Snapshot, 整数型, "kernel32", "CreateToolhelp32Snapshot", 公开, , 取进程信息
.参数 标志, 整数型, , lFlags
.参数 进程标识符, 整数型, , lProcessID
.DLL命令 API_GetCurrentProcessId, 整数型, "kernel32", "GetCurrentProcessId", 公开, , 获取当前进程一个唯一的标识符
.DLL命令 API_GetCurrentThread, 整数型, "kernel32", "GetCurrentThread", 公开, , 获取当前线程的一个伪句柄 当前线程的伪句柄
.DLL命令 API_GetCurrentThreadId, 整数型, "kernel32", "GetCurrentThreadId", 公开, ,
.DLL命令 API_GetProcAddress, 整数型, "kernel32", "GetProcAddress", 公开, 返回函数地址
.参数 hModule, 整数型
.参数 lpProcName, 文本型
.DLL命令 API_GetThreadPriority, 整数型, "kernel32", "GetThreadPriority", 公开, ,
.参数 线程句柄, 整数型, , 线程句柄
.DLL命令 API_LoadLibraryA, 整数型, "kernel32", "LoadLibraryA", 公开, 载入库
.参数 File, 文本型
.DLL命令 API_lstrcpynA_字节集, 整数型, "Kernel32", "lstrcpynA", 公开, 本api可替代取变量数据地址命令
.参数 lpString1, 字节集, 传址, 这个与下面的类型要同时修改
.参数 lpString2, 字节集, 传址
.参数 iMaxLength, 整数型
.DLL命令 API_OpenThread, 整数型, "Kernel32", "OpenThread", 公开
.参数 dwDesiredAccess, 整数型
.参数 bInheritHandle, 逻辑型
.参数 dwThreadId, 整数型
.DLL命令 API_ResumeThread, 整数型, "Kernel32", "ResumeThread", 公开, If the function fails, the return value is (DWORD) -1
.参数 hThread, 整数型, , Long,指定要挂起的一个线程的句柄
.DLL命令 API_RtlMoveMemory_读取整数, 整数型, "kernel32", "RtlMoveMemory", 公开, 写内存整数,最后个参数应该是4,才表示整数,否则只是个字节
.参数 pDestination, 整数型, 传址
.参数 pSource, 整数型
.参数 Length, 整数型, , 1
.DLL命令 API_RtlMoveMemory_写入整数, , "kernel32", "RtlMoveMemory", 公开, 写内存整数,最后个参数应该是4,才表示整数,否则只是个字节
.参数 Destination, 整数型
.参数 Source, 整数型, 传址
.参数 Length, 整数型
.DLL命令 API_SetThreadPriority, 整数型, "kernel32", "SetThreadPriority", 公开, , 设定线程的优先级别 非零表示成功,零表示失败。会设置GetLastError
.参数 线程句柄, 整数型, , hThread
.参数 优先权, 整数型, , nPriority
.DLL命令 API_SuspendThread, 整数型, "Kernel32", "SuspendThread", 公开
.参数 hThread, 整数型, , Long,指定要挂起的一个线程的句柄
.DLL命令 API_Thread32First, 逻辑型, "Kernel32", "Thread32First", 公开
.参数 hSnapshot, 整数型, , A handle to the snapshot returned from a previous call to the CreateToolhelp32Snapshot function
.参数 lpte, THREADENTRY32, 传址, A pointer to a THREADENTRY32 structure
.DLL命令 API_Thread32Next, 逻辑型, "Kernel32", "Thread32Next", 公开
.参数 hSnapShot, 整数型
.参数 lpte, THREADENTRY32, 传址, LPTHREADENTRY32 lpte
.DLL命令 API_VirtualProtect, 整数型, "kernel32", "VirtualProtect", 公开, 改写内存属性 失败为0
.参数 lpAddress, 整数型
.参数 dwSize, 整数型
.参数 flNewProtect, 整数型
.参数 lpflOldProtect, 整数型, 传址
18494249902[下载].rar
|