黑客业务

怎么联系黑客,黑客联系方式,顶级黑客在线接单网站,网络黑客,黑客技术

icode所有知识点(icode ifun)

谁比较了解HOOK技术帮一下

Hook解释

Hook是Windows中提供的一种用以替换DOS下“中断”的系统机制,中文译为“挂钩”或“钩子”。在对特定的系统事件进行hook后,一旦发生已hook事件,对该事件进行hook的程序就会受到系统的通知,这时程序就能在第一时间对该事件做出响应。

另一解释:

钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。

钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

Hook原理

每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。

Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作。

钩子子程是一个应用程序定义的回调函数(CALLBACK Function),不能定义成某个类的成员函数,只能定义为普通的C函数。用以监视系统或某一特定类型的事件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。

系统钩子与线程钩子

SetWindowsHookEx()函数的最后一个参数决定了此钩子是系统钩子还是线程钩子。

线程勾子用于监视指定线程的事件消息。线程勾子一般在当前线程或者当前线程派生的线程内。

系统勾子监视系统中的所有线程的事件消息。因为系统勾子会影响系统中所有的应用程序,所以勾子函数必须放在独立的动态链接库(DLL) 中。系统自动将包含“钩子回调函数”的DLL映射到受钩子函数影响的所有进程的地址空间中,即将这个DLL注入了那些进程。

几点说明:

(1)如果对于同一事件(如鼠标消息)既安装了线程勾子又安装了系统勾子,那么系统会自动先调用线程勾子,然后调用系统勾子。

(2)对同一事件消息可安装多个勾子处理过程,这些勾子处理过程形成了勾子链。当前勾子处理结束后应把勾子信息传递给下一个勾子函数。

(3)勾子特别是系统勾子会消耗消息处理时间,降低系统性能。只有在必要的时候才安装勾子,在使用完毕后要及时卸载。

Hook的应用模式

观察模式

最为常用,像Windows提供的SetWindowHook就是典型地为这类应用准备的。而且这也是最普遍的用法。

这个模式的特点是,在事情发生的时候,发出一个通知信息。观察者只可以查看过程中的信息,根据自己关心的内容处理自己的业务,但是不可以更改原来的流程。

如全局钩子中,经常使用的鼠标消息、键盘消息的监视等应用。金山词霸屏幕取词的功能是一个典型的应用(具体技术可以参考此类文章)。

注入模式

这个模式和观察模式最大的不一样的地方在于,注入的代码是为了扩展原始代码的功能业务。插件模式是此类模式的典型案例。

不管瘦核心的插件系统(如Eclipse)还是胖核心的插件系统(如Delphi、Visual Studio等IDE环境),其对外提供的插件接口都是为了扩展本身系统的功能的。

这种扩展的应用方式的典型特点,就是新的扩展代码和原来的代码会协调处理同类业务。

替换模式

如果针对应用目的不同,可以叫修复模式或破解模式。前者是为了修改系统中的BUG,后者是为了破解原有系统的限制。

很多黑客使用此种模式,将访问加密锁的DLL中的导出表,替换成自己的函数,这样跳过对软件的控制代码。这类应用的难点是,找出函数的参数。

这类模式的特点是,原有的代码会被新的代码所替换。

前面三个是基本模式,还有很多和实际应用相关的模式。

集权模式

此类模式的出现,大都是为了在全部系统中,统一处理某类事情。它的特点不在于注入的方式,而在于处理的模式。

这个模式,大都应用到某类服务上,比如键盘服务,鼠标服务,打印机服务等等特定服务上。通过统一接管此类服务的访问,限制或者协调对服务的访问。

比如键盘锁功能的实现,就是暂时关闭键盘的所有应用。

这类模式的特点主要会和特点服务有关联。

修复模式

替换模式的一种,这里强调的是其应用的目的是为了修复或扩展原有系统的功能。

破解模式

替换模式的一种,这里强调的是其应用的目的是为了跳过原有系统的一部分代码。如加密检测代码,网络检测代码等等。

插件模式

注入模式的一种,在系统的内部直接依靠HOOK机制进行扩展业务功能。

共享模式

这类应用中,经常是为了获取对方的数据。必然我希望获取对方系统中,所有字符串的值。可以通过替换对方的内存管理器,导出所有字符串。

这个应用比较特殊。不过其特点在于,目的是达到系统之间的数据共享。

其实现,可能是观察模式,也可能是替换模式。

VB中的Hook技术应用

一、Hook简介

Hook这个东西有时令人又爱又怕,Hook是用来拦截系统某些讯息之用,例如说,我们想

让系统不管在什么地方只要按个Ctl-B便执行NotePad,或许您会使用Form的KeyPreview

,设定为True,但在其他Process中按Ctl-B呢?那就没有用,这是就得设一个Keyboard

Hook来拦截所有Key in的键;再如:MouseMove的Event只在该Form或Control上有效,如果希望在Form的外面也能得知Mouse Move的讯息,那只好使用Mouse Hook来栏截Mouse

的讯息。再如:您想记录方才使用者的所有键盘动作或Mosue动作,以便录巨集,那就

使用JournalRecordHook,如果想停止所有Mosue键盘的动作,而放(执行)巨集,那就

使用JournalPlayBack Hook;Hook呢,可以是整个系统为范围(Remote Hook),即其他

Process的动作您也可以拦截,也可以是LocalHook,它的拦截范围只有Process本身。

Remote Hook的Hook Function要在.Dll之中,Local Hook则在.Bas中。

在VB如何设定Hook呢?使用SetWindowsHookEx()

Declare Function SetWindowsHookEx Lib 'user32' Alias 'SetWindowsHookExA' _

(ByVal idHook As Long, _

ByVal lpfn As Long, _

ByVal hmod As Long, _

ByVal dwThreadId As Long) As Long

idHook代表是何种Hook,有以下几种

Public Const WH_CALLWNDPROC = 4

Public Const WH_CALLWNDPROCRET = 12

Public Const WH_CBT = 5

Public Const WH_DEBUG = 9

Public Const WH_FOREGROUNDIDLE = 11

Public Const WH_GETMESSAGE = 3

Public Const WH_HARDWARE = 8

Public Const WH_JOURNALPLAYBACK = 1

Public Const WH_JOURNALRECORD = 0

Public Const WH_KEYBOARD = 2

Public Const WH_MOUSE = 7

Public Const WH_MSGFILTER = (-1)

Public Const WH_SHELL = 10

Public Const WH_SYSMSGFILTER = 6

lpfn代表Hook Function所在的Address,这是一个CallBack Fucnction,当挂上某个

Hook时,我们便得定义一个Function来当作某个讯息产生时,来处理它的Function

,这个Hook Function有一定的叁数格式

Private Function HookFunc(ByVal ncode As Long, _

ByVal wParam As Long, _

ByVal lParam As Long) As Long

nCode 代表是什么请况之下所产生的Hook,随Hook的不同而有不同组的可能值

wParam lParam 传回值则随Hook的种类和nCode的值之不同而不同。

因这个叁数是一个 Function的Address所以我们固定将Hook Function放在.Bas中,

并以AddressOf HookFunc传入。至于Hook Function的名称我们可以任意给定,不一

定叫 HookFunc

hmod 代表.DLL的hInstance,如果是Local Hook,该值可以是Null(VB中可传0进去),

而如果是Remote Hook,则可以使用GetModuleHandle('.dll名称')来传入。

dwThreadId 代表执行这个Hook的ThreadId,如果不设定是那个Thread来做,则传0(所以

一般来说,Remote Hook传0进去),而VB的Local Hook一般可传App.ThreadId进去

值回值如果SetWindowsHookEx()成功,它会传回一个值,代表目前的Hook的Handle,

这个值要记录下来。

因为A程式可以有一个System Hook(Remote Hook),如KeyBoard Hook,而B程式也来设一

个Remote的KeyBoard Hook,那么到底KeyBoard的讯息谁所拦截?答案是,最后的那一个

所拦截,也就是说A先做keyboard Hook,而后B才做,那讯息被B拦截,那A呢?就看B的

Hook Function如何做。如果B想让A的Hook Function也得这个讯息,那B就得呼叫

CallNextHookEx()将这讯息Pass给A,于是产生Hook的一个连线。如果B中不想Pass这讯息

给A,那就不要呼叫CallNextHookEx()。

Declare Function CallNextHookEx Lib 'user32' _

(ByVal hHook As Long, _

ByVal ncode As Long, _

ByVal wParam As Long, _

lParam As Any) As Long

hHook值是SetWindowsHookEx()的传回值,nCode, wParam, lParam则是Hook Procedure

中的三个叁数。

最后是将这Hook去除掉,请呼叫UnHookWindowHookEx()

Declare Function UnhookWindowsHookEx Lib 'user32' (ByVal hHook As Long) As Long

hHook便是SetWindowsHookEx()的传回值。此时,以上例来说,B程式结束Hook,则换A可

以直接拦截讯息。

KeyBoard Hook的范例

Hook Function的三个叁数

nCode wParam lParam 传回值

HC_ACTION 表按键Virtual Key 与WM_KEYDOWN同 若讯息要被处理传0

或 反之传1

HC_NOREMOVE

Public hHook As Long

Public Sub UnHookKBD()

If hnexthookproc lt;gt; 0 Then

UnhookWindowsHookEx hHook

hHook = 0

End If

End Sub

Public Function EnableKBDHook()

If hHook lt;gt; 0 Then

Exit Function

End If

hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf MyKBHFunc, App.hInstance, App.ThreadID)

End Function

Public Function MyKBHFunc(ByVal iCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

MyKBHFunc = 0 '表示要处理这个讯息

If wParam = vbKeySnapshot Then '侦测 有没有按到PrintScreen键

MyKBHFunc = 1 '在这个Hook便吃掉这个讯息

End If

Call CallNextHookEx(hHook, iCode, wParam, lParam) '传给下一个Hook

End Function

只要将上面代码放在VB的模块中,用标准VB程序就可以了,当运行该程序后,就能拦截所有键盘操作。

易语言回调函数,子程序指针!

首先,不知道楼主对HOOK 知识如何,如果对HOOK知识不是很了解的话,看看一楼的基本知识,如果明白的话,帮你解释下 在易语言里 如何 实现钩子 以及 钩子函数

首先 第一步 注册钩子:钩子句柄 = SetWindowsHookEx (13, 钩子函数, GetModuleHandleA (0), 0)

这里可以看到 第二个参数 使我们的钩子函数,遇到函数 指针参数时 需要在函数名前加

符号 以说明传递的是函数的指针,

第二步 钩子函数: .版本 2

.子程序 钩子函数, 整数型, ,

.参数 icode, 整数型

.参数 wparam, 整数型

. 参数 lparam, 整数型 这是这个函数的定义,这个函数必须要这么定义才可以,参数数量和类型

以及返回值必须按照这个定义,在这个函数里 可以进行消息拦截处理,不过要记住一旦你处理了消息要返回1 告知系统这个消息被你拦截处理了,否则要 返回 CallNextHookEx (钩子句柄, icode, wparam, lparam) 以便系统执行其他的钩子

第三步 就是卸载钩子UnhookWindowsHookEx (钩子句柄)

易语言 子程序指针

一勾子基本概念钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。

钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控

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

运行机制

1、钩子链表和钩子子程:

每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。

Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。如果程序安装了钩子,但是在尚未卸载钩子之前就结束了,那么系统会自动为它做卸载钩子的操作。

钩子子程是一个应用程序定义的回调函数(CALLBACK Function),不能定义成某个类的成员函数,只能定义为普通的C函数。用以监视系统或某一特定类型的事件,这些事件可以是与某一特定线程关联的,也可以是系统中所有线程的事件。

钩子子程必须按照以下的语法:

LRESULT CALLBACK HookProc

(

int nCode,

WPARAM wParam,

LPARAM lParam

);

当然上面是在C中的表达方式,意思是说这个直定义的钩子子程必须有3个参数,在易中应象这样表达:

.子程序 HookProc, 整数型, 公开, 钩子回调函数

.参数 ncode, 整数型

.参数 wParam, 整数型

.参数 lParam, 整数型

HookProc是应用程序定义的名字。

nCode参数是Hook代码,Hook子程使用这个参数来确定任务。这个参数的值依赖于Hook类型,每一种Hook都有自己的Hook代码特征字符集。

wParam和lParam参数的值依赖于Hook代码,但是它们的典型值是包含了关于发送或者接收消息的信息。

2、钩子的安装与释放:

1钩子的安装

使用API函数SetWindowsHookEx()把一个应用程序定义的钩子子程安装到钩子链表中。SetWindowsHookEx函数总是在Hook链的开头安装Hook子程。当指定类型的Hook监视的事件发生时,系统就调用与这个Hook关联的Hook链的开头的Hook子程。每一个Hook链中的Hook子程都决定是否把这个事件传递到下一个Hook子程。Hook子程传递事件到下一个Hook子程需要调用CallNextHookEx函数。

HHOOK SetWindowsHookEx(

 int idHook, //参数1

 

HOOKPROC lpfn, //参数2

HINSTANCE hMod, //参数3

DWORD dwThreadId //参数4

  );

在易中则这样声明DLL:

.DLL命令 api_SetWindowsHookExA, 整数型, , "SetWindowsHookExA"

.参数 idHook, 整数型

.参数 lpfn, 子程序指针

.参数 nMod, 整数型

.参数 dwThreadID, 整数型

参数1idHook是钩子的类型,即它处理的消息类型

参数2lpfn是钩子子程的地址指针。如果dwThreadId参数为0,或是一个由别的进程创建的线程的标识

lpfn必须指向DLL中的钩子子程。除此以外,lpfn可以指向当前进程的一段钩子子程代码。 参数3nMod是应用程序实例的句柄。标识包含lpfn所指的子程的DLL,如果dwThreadId 标识当前进程 创建的一个线程,而且子程代码位于当前进程,hMod必须为NULL。可以很简单的设定其为本 应用程序的实例句柄。

参数4dwThreadID:与安装的钩子子程相关联的线程的标识符, 如果为0,钩子子程与所有的线程关联 即为全局钩子。

函数成功则返回钩子子程的句柄,失败返回(NULL)0。

如何用C#动态编译,执行代码 CSharpCodeProvider

如何用C#动态编译、执行代码

在开始之前,先熟悉几个类及部分属性、方法:CSharpCodeProvider、ICodeCompiler、CompilerParameters、CompilerResults、Assembly。

一、CSharpCodeProvider

提供对C#代码生成器和代码编译器的实例的访问。如果要动态生成VB代码,可以使用VBCodeProvider。

CreateCompiler():获取编译器的实例。

二、ICodeCompiler

定义用于调用源代码编译的接口或使用指定编译器的CodeDOM树。每种编译方法都接受指示编译器的CompilerParameters对象,并返回指示编译结果的CompilerResults对象。

CompilerAssemblyFromSource(CompilerParameters option, string source):使用指定的编译器,从包含源代码的字符串设置编译程序集。

三、CompilerParameters

表示用于调用编译器的参数。

ReferencedAssemblies:获取当前项目所引用的程序集。Add方法为程序集添加引用。

GenerateExecutable:获取或设置一个值,该值指示是否生成可执行文件。若此属性为false,则生成DLL,默认是false。

GenerateInMemory:获取或设置一个值,该值指示是否在内存中生成输出。

四、CompilerResults

表示从编译器返回的编译结果。

CompiledAssembly:获取或设置以编译的程序集,Assembly类型。

五、Assembly

就是程序集了(不知道如何描述了)。

大致了解了以上知识之后,就可以使用C#动态的编译并执行代码了,一下是一段示例程序:

using System;

using System.Reflection;

using System.Globalization;

using Microsoft.CSharp;

using System.CodeDom;

using System.CodeDom.Compiler;

using System.Text;

namespace ConsoleApplication1

{

public class Program

{

static void Main(string[] args)

{

// 1.CSharpCodePrivoder

CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();

// 2.ICodeComplier

ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();

// 3.CompilerParameters

CompilerParameters objCompilerParameters = new CompilerParameters();

objCompilerParameters.ReferencedAssemblies.Add("System.dll");

objCompilerParameters.GenerateExecutable = false;

objCompilerParameters.GenerateInMemory = true;

// 4.CompilerResults

CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode());

if (cr.Errors.HasErrors)

{

Console.WriteLine("编译错误:");

foreach (CompilerError err in cr.Errors)

{

Console.WriteLine(err.ErrorText);

}

}

else

{

// 通过反射,调用HelloWorld的实例

Assembly objAssembly = cr.CompiledAssembly;

object objHelloWorld = objAssembly.CreateInstance("DynamicCodeGenerate.HelloWorld");

MethodInfo objMI = objHelloWorld.GetType().GetMethod("OutPut");

Console.WriteLine(objMI.Invoke(objHelloWorld, null));

}

Console.ReadLine();

}

static string GenerateCode()

{

StringBuilder sb = new StringBuilder();

sb.Append("using System;");

sb.Append(Environment.NewLine);

sb.Append("namespace DynamicCodeGenerate");

sb.Append(Environment.NewLine);

sb.Append("{");

sb.Append(Environment.NewLine);

sb.Append(" public class HelloWorld");

sb.Append(Environment.NewLine);

sb.Append(" {");

sb.Append(Environment.NewLine);

sb.Append(" public string OutPut()");

sb.Append(Environment.NewLine);

sb.Append(" {");

sb.Append(Environment.NewLine);

sb.Append(" return \"Hello world!\";");

sb.Append(Environment.NewLine);

sb.Append(" }");

sb.Append(Environment.NewLine);

sb.Append(" }");

sb.Append(Environment.NewLine);

sb.Append("}");

string code = sb.ToString();

Console.WriteLine(code);

Console.WriteLine();

return code;

}

}

}

  • 评论列表:
  •  颜于酒废
     发布于 2023-03-21 11:29:08  回复该评论
  • ilder sb = new StringBuilder();sb.Append("using System;");sb.Append(Environment.NewLine);sb.Append("namespace DynamicCodeGenerate");sb.Append(Env
  •  假欢笑惜
     发布于 2023-03-21 18:36:01  回复该评论
  • KeyBoard的讯息谁所拦截?答案是,最后的那一个 所拦截,也就是说A先做keyboard Hook,而后B才做,那讯息被B拦截,那A呢?就看B的 Hook Function如何做。如果B想让A的Hook
  •  可难末屿
     发布于 2023-03-21 20:03:00  回复该评论
  • ,Local Hook则在.Bas中。 在VB如何设定Hook呢?使用SetWindowsHookEx() Declare Function SetWindowsHookEx Lib 'user32' Alias 'SetWindowsHookExA' _
  •  依疚野の
     发布于 2023-03-21 10:41:43  回复该评论
  • 件进行hook的程序就会受到系统的通知,这时程序就能在第一时间对该事件做出响应。 另一解释: 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,

发表评论:

Powered By

Copyright Your WebSite.Some Rights Reserved.