易语言HookAPI 技巧

合集下载

详解易语言的钩子(钩子HOOK与APIHOOK区别)

详解易语言的钩子(钩子HOOK与APIHOOK区别)

详解易语⾔的钩⼦(钩⼦HOOK与APIHOOK区别)在本篇内容⾥我们给⼤家详细分析了易语⾔中间的钩⼦概念以及HOOK与APIHOOK区别钩⼦原英⽂名称 Hook ,钩⼦的意思是指拦截或截获。

作⽤就是拦截程序中交互的数据,先经过我们预定的钩⼦处理接⼝程序,处理过后,再交还给原处理程序,或者⼲脆阻⽌,吃掉这些数据,让原处理程序什么也得不到。

钩⼦原来是Windows操作系统常⽤来检查系统与程序间通信的⼀些数据是否到达⽬标时⽤的,为不传之密,后来随着⼀些⾼⼿们的研究,逐渐的发现了这些秘密的技术并且公布了出来。

同时还有更多的⼈在掌握了这些技术后,⽤在⾃已的软件开发中,实现出奇招⽽超过其它同类软件的功能⽽赢得市场。

钩⼦技术的种类上很多.HOOK API和HOOK技术完全不同。

尽管它们都是钩⼦。

HOOK钩的是消息,它在系统将消息传递给应⽤程序之前截获它,然后进⾏操作、或修改消息、或停⽌消息的传递;⽽HOOK API截获的是应⽤程序对系统API的调⽤,它在应⽤程序对系统API的调⽤之前截获此调⽤动作,让其转⽽调⽤我们所定义的函数(内容可能是进⾏⼀些操作后再调⽤原系统API)。

关于HOOK技术,微软为我们提供了现成的API,有固定的使⽤步骤。

⽽对于HOOK API技术,微软并没有向我们提供类似的API,没有那么简洁的步骤可供我们参考,也许是因为微软并不希望我们⽤这样的⼿段编程,所以相对要⿇烦⼀些。

WINDOWS的钩⼦函数可以认为是WINDOWS的主要特性之⼀。

利⽤它们,您可以捕捉您⾃⼰进程或其它进程发⽣的事件。

通过“钩挂”,您可以给WINDOWS⼀个处理或过滤事件的回调函数,该函数也叫做“钩⼦函数”,当每次发⽣您感兴趣的事件时,WINDOWS都将调⽤该函数。

⼀共有两种类型的钩⼦:局部的和远程的。

局部钩⼦仅钩挂您⾃⼰进程的事件。

远程的钩⼦还可以将钩挂其它进程发⽣的事件。

远程的钩⼦⼜有两种:基于线程的它将捕获其它进程中某⼀特定线程的事件。

利用HOOKAPI拦截文件操作

利用HOOKAPI拦截文件操作

利⽤HOOKAPI拦截⽂件操作先读下HookAPI 使⽤⽂档:功能简介HookAPI 是⼀个截获Windows 32位API函数的开发包,它可以在Windows调⽤某个API函数的时候,先调⽤⾃⼰编写的函数,从⽽实现特殊的功能。

HookAPI同样也适⽤于截获⽤户⾃⼰编写的DLL⽂件中的输出函数。

1.5系统特点:1)⾃⼰编写的替代函数的参数形式和原API函数完全⼀样,⽅便了Delphi和VB⽤户的使⽤。

2)实时截获所有新建⽴的进程,即进程建⽴后马上安装钩⼦,⽽不是采⽤定时扫描进程的⽅法3)由于不采⽤定时扫描进程的⽅法,所以系统资源消耗少,基本上看不到消耗CPU资源。

4)新建⽴的InstDLL动态库,减少了⽤户调⽤HookAPI的代码。

运⾏和开发平台为Windows NT/2000/9x/XP包含的⽂件列表:【EXE⽬录】:调⽤InstHook.dll来安装HookAPI的执⾏程序【InstHook⽬录】:安装HookAPI的DLL程序【dll⽬录】:NT/2000/XP/XP下截获32位API函数的DLL程序【HOOKAPI9x.dll】:Win9x下截获32位API函数的DLL程序【EXE⽬录】:HookAPI.exe的源码【HOOKSOCKET⽬录】:截获Socket函数的mydll例⼦【HOOKREG⽬录】:截获注册表函数的mydll例⼦【HOOKFILE⽬录】:截获⽂件存取的mydll例⼦【HOOKFILE9x⽬录】:win9x下的截获⽂件存取的mydll_9x例⼦【HookFile_Delphi⽬录】:截获⽂件存取的Delphi下的mydll的例⼦【HookSocket_Delphi⽬录】:截取Socket函数的Delphi下的mydll的例⼦使⽤:⽤户编写要截获的API函数相对应的⾃⼰的实现函数,编译成mydll.dll,同时在⾃⼰的程序中调⽤InstHook.dll中的安装/卸载函数就可以实现⾃⼰的截获过程。

07授人以鱼不如授人以渔●(HOOK API的概念及应用 HOOK篇一)

07授人以鱼不如授人以渔●(HOOK API的概念及应用 HOOK篇一)

07授人以鱼不如授人以渔●(HOOK API的概念及应用HOOK篇一)前言:让程序按照自己的代码来走,这是个很有意思的事情。

HOOK 其实是一个很有意思的东西,他能让你在枯燥的外挂学习中感受到一丝乐趣HOOK的原理:修改函数的首地址跳转到你想执行的代码然后返回。

这就好比正常的程序就像一个汽车在公路上行驶(代码正常运行),而这个时候警察在半路设下了一个路障(修改原始地址JMP 我们的代码地址),要求汽车靠边停靠(修改原始程序代码,JMP 地址跳转到我们的代码区),这个时候汽车过来了,看到路障并且停靠在右边(跳转到我们的代码区了)并且接受检查(执行我们的代码),恢复路面(将修改的代码复原),检查完毕后(比如说代码执行了数据拷贝,或者一些特殊功能比如说send 恢复代码后可以直接执行,也可以拦截不发也可以修改数据在发送。

),汽车继续行驶。

HOOK的方法有很多,修改CALL的代码跳转到我们的程序执行完我们的代码后,复原CALL 然后在调用。

或者直接在函数头跳转。

HOOK的方法有很多种,但万变不离其中~封包助手是一款类似于WPE 截包的软件,今天我们来看看他是如何HOOK send 封包函数的.此次的目标还是前几天我们用到的模拟器我们先来看一下正常的send 函数头部 . 按下CTRL+G 输入send 回车(打开OD第一次需要找2次应该是OD BUG)好了跳转到如下地址然后我们来看下用封包助手加载程序后代码的变化mov edi,edipush ebppush ebp,esp这三句话修改成了JMP PACKASSI.13148F88这句汇编指令的意思就是强行跳转到13148f88 这个地址去(开始设置路障)好了我们下bp send 然后按模拟器进入或加血让程序断下然后按F8 单步运行, 这个时候强行跳转到了封包助手设置的位置.(汽车靠边了)这里就是我们跳转的地方了.也就是说封包助手处理数据的地方.这里有3个CALL 我们来看看都有什么功能.我们进入第一个CALL里面看到OD 分析出几个CALL的函数getsockname() 获取一个套接口的IP和端口ntoa() 将网络IP地址转换"."格式的字符串形式ntohs() 将一个无符号短整形数从网络字节顺序转换为主机字节顺序。

易语言DNF召唤、无敌、技能HOOK源码教程。

易语言DNF召唤、无敌、技能HOOK源码教程。

易语言DNF召唤、无敌、技能HOOK源码教程。

学习各种外挂制作技术,马上去百度搜索"魔鬼作坊" 点击第一个站去那里学习喽。

F1=十字改轮子F2=吸头改分针F3=银光改喷毒F4=裂波改紫风F5=加血F6=加蓝.版本2007CDCFC 20050007D2066 20016007CD571 200280064A0E6 21001006494F8 22208.程序集窗口程序集1.程序集变量十字改召唤野猪魔剑, 整数型.程序集变量十字改分针, 整数型.程序集变量银光改地火, 整数型.程序集变量银光改爆炎, 整数型.程序集变量SSS, 整数型.程序集变量霸体, 整数型.子程序_窗口1_创建完毕鼠标显示()内存操作.提升权限()内存操作.打开进程()十字改召唤野猪魔剑=热键.注册(窗口1.取窗口句柄(), 0, #F1键, &十字改召唤野猪魔剑) 十字改分针=热键.注册(窗口1.取窗口句柄(), 0, #F2键, &十字改分针)银光改地火=热键.注册(窗口1.取窗口句柄(), 0, #F3键, &银光改地火)银光改爆炎=热键.注册(窗口1.取窗口句柄(), 0, #F4键, &银光改爆炎)SSS =热键.注册(窗口1.取窗口句柄(), 0, #F5键, &SSS)霸体=热键.注册(窗口1.取窗口句柄(), 0, #F6键, &霸体).子程序十字改召唤野猪魔剑写内存整数型(取窗口进程ID (窗口1.取窗口句柄()), 十六到十(“0079556D”), 860615) ' 十字改召唤野猪魔剑.子程序十字改分针写内存整数型(取窗口进程ID (窗口1.取窗口句柄()), 十六到十(“0079556D”), 860622) ' 十字改分针.子程序银光改地火写内存整数型(取窗口进程ID (窗口1.取窗口句柄()), 十六到十(“00799F38”), 20044) ' 银光改地火.子程序银光改爆炎写内存整数型(取窗口进程ID (窗口1.取窗口句柄()), 十六到十(“00799F38”), 860330) ' 银光改爆炎.子程序霸体内存操作.写代码(“010CF69C+4F0=1”) ' 霸体.子程序SSS内存操作.写代码(“0169EEA9={144,144,144}”) ' 3S.子程序_按钮1_被单击内存操作.写代码(“01080FD4+1CA8=5”) ' 远程卖.子程序_按钮2_被单击内存操作.写代码(“01080FD4+1CA8=6”) ' 远程修版本2.子程序dnf进程ID, , 公开.子程序VMP保护标记结尾, , 公开.子程序VMP保护标记开始, , 公开.子程序倍功, , 公开.参数人物基址, 文本型.参数物攻偏移, 文本型.参数攻击伤害, 整数型.参数魔攻偏移, 文本型.子程序超级瞬移CALL, , 公开.参数区域id, 整数型, , 3-塔.参数位置id, 整数型, , 7-塔.参数X轴参数, 文本型.参数y轴参数, 文本型.参数z轴参数, 文本型.参数头部参数, 文本型.子程序打开DNF进程, , 公开.子程序动作CALL, , 公开, 0.收放1.蹲下2.打坐5.死亡7.跳打9.被打12.出击15冲击打16拾取.参数基址, 整数型.参数动作ID, 整数型.参数动作CALL, 文本型.子程序返回BOSS地址, 整数型, 公开.参数类型, 整数型, , 529是怪物273是APC 1057是普通建筑33是特殊建筑.参数阵营, 整数型, 可空, 默认为队友,-1为不限100为敌人200为建筑0为队友.参数人物基址, 文本型.子程序恢复血蓝, , 公开.参数人物基址, 文本型.子程序加密, , 公开.参数地址357, 整数型.参数加密参数1, 文本型.参数加密参数2, 文本型.参数数值, 整数型.子程序解除禁闭, , 公开.子程序解除虚弱, , 公开.参数人物基址, 文本型.参数虚弱偏移, 文本型.子程序解密, 整数型, 公开.参数加密参数1, 文本型.参数加密参数2, 文本型.参数地址159, 整数型.子程序全屏捡物, , 公开.参数人物基址, 文本型.子程序人物假死, , 公开.参数人物基址, 文本型.子程序是否指定怪物, 整数型, 公开.参数地址, 整数型.参数阵营, 整数型.参数类型, 整数型.参数人物基址, 文本型.子程序鼠标显示, , 公开.子程序提升权限, , 公开.子程序无限负重, , 公开.参数人物基址, 文本型.子程序物品CALL, , 公开.参数物品基址, 整数型.参数物品代码, 整数型.参数物品CALL偏移, 文本型.子程序异界秒怪, , 公开.参数人物基址, 文本型.子程序远程出售, , 公开.参数商店基址, 文本型.子程序远程修理, , 公开.参数商店基址, 文本型学习各种外挂制作技术,马上去百度搜索"魔鬼作坊" 点击第一个站去那里学习喽。

hook api几种方法

hook api几种方法

:71A21B72 8B4508 mov eax, dword ptr [ebp+08]
:71A21B75 5F pop edi
:71A21B76 5E pop esi
:71A21B77 C9 leave
:71A21B78 C21000 ret 0010
下面用4种方法来HOOK这个API:
:71A21B62 8BD8 mov ebx, eax
:71A21B64 E8C7F6FFFF call 71A21230 //将被HOOK的机器码(第3种方法)
:71A21B69 3BDF cmp ebx, edi
:71A21B6B 5B pop ebx
:71A21B6C 0F855F940000 jne 71A2AFD1
假设我们的HOOK代码在71A20400处,那么我们把71A21B64处的CALL指令改为CALL 71A20400(原指令是这样的:CALL 71A21230)
而71A20400处的HOOK代码是这样的:
71A20400:
pushad
//在这里做你想做的事情
:71A21B42 57 push edi
:71A21B43 57 push edi
:71A21B44 FF7514 push [ebp+14]
:71A21B47 8945F0 mov dword ptr [ebp-10], eax
:71A21B4A 8B450C mov eax, dword ptr [ebp+0C]
4,上下文的问题,有些HOOK代码不能执行某些操作,否则会破坏原API的上下文,原API就失效了;
5,同步问题,在HOOK代码里尽量不使用全局变量,而使用局部变量,这样也是模块化程序的需要;

Windows中Hook API技术

Windows中Hook API技术

Windows下Hook API技术 inline hook分类: WINDOWS什么叫Hook API?所谓Hook就是钩子的意思,而API是指 Windows开放给程序员的编程接口,使得在用户级别下可以对操作系统进行控制,也就是一般的应用程序都需要调用API来完成某些功能, Hook API的意思就是在这些应用程序调用真正的系统API前可以先被截获,从而进行一些处理再调用真正的API来完成功能。

在讲Hook API之前先来看一下如何Hook消息,例如Hook全局键盘消息,从而可以知道用户按了哪些键,这种Hook消息的功能可以由以下函数来完成,该函数将一个新的 Hook加入到原来的Hook链中,当某一消息到达后会依次经过它的Hook链再交给应用程序。

HHOOK SetWindowsHookEx(int idHook, //Hook类型,例如WH_KEYBOARD,WH_MOUSEHOOKPROC lpfn, //Hook处理过程函数的地址HINSTANCE hMod, //包含Hook处理过程函数的dll句柄(若在本进程可以为NULL)DWORD dwThreadId, //要Hook的线程ID,若为0,表示全局Hook所有);这里需要提一下的就是如果是Hook全局的而不是某个特定的进程则需要将Hook过程编写为一个DLL,以便让任何程序都可以加载它来获取Hook过程函数。

而对于Hook API微软并没有提供直接的接口函数,也许它并不想让我们这样做,不过有2种方法可以完成该功能。

第一种,修改可执行文件的IAT表(即输入表),因为在该表中记录了所有调用API的函数地址,则只需将这些地址改为自己函数的地址即可,但是这样有一个局限,因为有的程序会加壳,这样会隐藏真实的IAT表,从而使该方法失效。

第二种方法是直接跳转,改变API函数的头几个字节,使程序跳转到自己的函数,然后恢复API开头的几个字节,在调用AP完成功能后再改回来又能继续Hook了,但是这种方法也有一个问题就是同步的问题,当然这是可以克服的,并且该方法不受程序加壳的限制。

HOOKAPI(一)——HOOK基础+一个鼠标钩子实例

HOOKAPI(一)——HOOK基础+一个鼠标钩子实例

HOOKAPI(⼀)——HOOK基础+⼀个⿏标钩⼦实例HOOK API (⼀)——HOOK基础+⼀个⿏标钩⼦实例code: https:///hfl15/windows_kernel_development/tree/master/demo_source_code/MouseHook0x00 起因最近在做毕业设计,有⼀个功能是需要实现对剪切板的监控和进程的防终⽌保护。

原本想从内核层实现,但没有头绪。

最后决定从调⽤层⼊⼿,即采⽤HOOK API的技术来挂钩相应的API,从⽽实现预期的功能。

在这样的需求下,就开始学习了HOOK API。

0x01什么是HOOK APIHOOK(钩⼦,挂钩)是⼀种实现Windows平台下类似于中断的机制。

HOOK机制允许应⽤程序拦截并处理Windows消息或指定事件,当指定的消息发出后,HOOK程序就可以在消息到达⽬标窗⼝之前将其捕获,从⽽得到对消息的控制权,进⽽可以对该消息进⾏处理或修改,加⼊我们所需的功能。

钩⼦按使⽤范围分,可分为线程钩⼦和系统钩⼦,其中,系统钩⼦具有相当⼤的功能,⼏乎可以实现对所有Windows消息的拦截、处理和监控。

这项技术涉及到两个重要的API,⼀个是SetWindowsHookEx,安装钩⼦;另⼀个是UnHookWindowsHookEx,卸载钩⼦。

本⽂使⽤的HOOK API技术,是指截获系统或进程对某个API函数的调⽤,使得API的执⾏流程转向我们指定的代码段,从⽽实现我们所需的功能。

Windows下的每个进程均拥有⾃⼰的地址空间,并且进程只能调⽤其地址空间内的函数,因此HOOK API尤为关键的⼀步是,设法将⾃⼰的代码段注⼊到⽬标进程中,才能进⼀步实现对该进程调⽤的API进⾏拦截。

然⽽微软并没有提供HOOK API的调⽤接⼝,这就需要开发者⾃⼰编程实现,⼤家所熟知的防毒软件、防⽕墙软件等均采⽤HOOK API实现。

⼀般来说,HOOK API由两个组成部分,即实现HOOK API的DLL⽂件,和启动注⼊的主调程序。

易语言 勾子

易语言  勾子

易语言勾子<一>勾子基本概念本期导读:什么叫勾子,勾子又起什么作用,它有那些类别,怎么使用,等等这些问题将在本期找到答案=========================================================== 基本概念钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。

当消息到达后,在目标窗口处理函数之前处理它。

钩子机制允许应用程序截获处理window消息或特定事件。

钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。

每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。

这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

运行机制1、钩子链表和钩子子程:每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。

这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。

当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。

一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。

最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。

Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。

每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。

如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作。

钩子子程是一个应用程序定义的回调函数(CALLBACK Function),不能定义成某个类的成员函数,只能定义为普通的C函数。

用以监视系统或某一特定类型的事件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

易语言HookAPI 技巧
易语言Hook的代码有很多,Hook的跳转代码也很简单,不多说,主要注意的有:
1.可以保存原API函数的API头到自己申请的地址,Hook跳转的地址仍然是自己的子程序,
但如果保存了API头,就可以call addr 实现不恢复Hook调用原函数。

.版本2
.如果真(FuncAddress =0 或HookFuncAddr =0)
返回(0)
.如果真结束
hHook =VirtualAlloc (0, 14, 位或(#MEM_COMMIT, #MEM_RESERVE), #PAGE_EXECUTE_READWRITE)
.如果真(hHook =0)
返回(0)
.如果真结束
RtlMoveMemory_1 (hHook, 到字节集(FuncAddress), 4)
JmpCode =hHook +4
RtlMoveMemory (JmpCode, FuncAddress, 5)
RtlMoveMemory_1 (JmpCode +5, { 233 } +到字节集(到整数(FuncAddress + 5 -JmpCode -10)), 5)
VirtualProtect (FuncAddress, 5, #PAGE_EXECUTE_READWRITE, OldProtect)
RtlMoveMemory_1 (FuncAddress, { 233 } +到字节集(到整数(HookFuncAddr -FuncAddress -5)), 5)
VirtualProtect (FuncAddress, 5, OldProtect, 0)
返回(JmpCode)
2.Hook recv函数等的技巧,这类函数的特点是,某个参数是具有缓冲区性质的,并在函数
调用完成后参数会直接传递数据,所以结合上面的代码,就可以这样了:
ret=Call(jmpcode,para1,para2.etc)
这时候,再对参数para1等进行处理,才可以获得数据
3.Anti-Hook的躲避技巧,部分程序会有检测API头5字节,所以我们只需要在Hookaddr
上面加上一段偏移(大于5)即可躲避。

更深入地,如果检测的是整个API头,我们就需要深入API的调用过程,Hook核心函数或其他流程来躲避。

由于校验所有API头hash 值需要大量的CPU占用及时间,所以一般也只会对重点函数进行检测。

相关文档
最新文档