防止全局hook入侵Delphi版,2000以上系统适用(part2)

Delphi实现带窗体的DLL注入与Hook技术实战项目 为了让外部程序调用DLL中的功能,必须通过exports关键字导出函数,并明确指定调用约定。Windows API普遍采用stdcall,故推荐统一使用该约定以避免堆栈失衡。添加如下函数至DLL主文件:var// 导出函数:显示窗体stdcall;begintrybeginForm1.Caption := '来自DLL的窗体';end;Form1.Show;except。 阅读详情
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } procedure ShowMsg(s: string); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses MLDE32Unit; const DesPath = 'C:/Program Files/Borland/Delphi6/Projects/Adv APIHOOK/Test/vt.exe'; Func2Hook = 'FreeLibrary'; var //must be a globle variable PtrReal: Pointer; cbStolen: Cardinal; NtDllBase, NtDllLength: integer; p: pointer; h:dword; procedure TForm1.ShowMsg(s: string); begin Memo1.Lines.Add(s); end; procedure TForm1.Button1Click(Sender: TObject); label FakeCode, RtnCode; var // si: STARTUPINFO; // pi: PROCESS_INFORMATION; OriginalBytes: Array [0..4] of Char; HookJmp: PChar; Rtn: Cardinal; Bytes: Array [0..4] of Char; tmp: Cardinal; peb, ldr, flink: pointer; bs: DWORD; begin PtrReal := nil; NtDllLength := 0; NtDllBase := GetModuleHandle('ntdll.dll'); asm mov eax,fs:[$30] mov peb,eax end; ldr := pointer(dword(pointer(dword(peb)+12)^)); flink := pointer(dword(pointer(dword(ldr)+12)^)); p := flink; repeat bs := DWORD(pointer(dword(p)+$18)^); if bs = NtDllBase then begin NtDllLength := DWORD(pointer(dword(p)+$20)^); break; end; p := pointer(dword(p^)); until dword(flink) = dword(p^); if NtDllLength = 0 then ShowMsg('Can''t get ntdll.dll image size!'); { ShowMsg('Creating suspended process ...'); ZeroMemory(@si, sizeof(STARTUPINFO)); si.cb := sizeof(STARTUPINFO); CreateProcess(DesPath, nil, nil, nil, False, CREATE_SUSPENDED, nil, nil, si, pi); } ShowMsg('Preparing HOOK ' + Func2Hook + ' ...'); PtrReal := GetProcAddress(GetModuleHandle('Kernel32.dll'), Func2Hook); if Assigned(PtrReal) then ShowMsg('Real ' + Func2Hook + ' Addr: ' + inttohex(DWORD(PtrReal), 8)) else begin ShowMsg(' Addr: ' + Func2Hook + ' is unreadable! Exit!'); // ResumeThread(pi.hThread); Exit; end; ReadProcessMemory(GetCurrentProcess, PtrReal, @Bytes, 5, Rtn); // ReadProcessMemory(pi.hProcess, PtrReal, @Bytes, 5, Rtn); if Bytes[0] <> Chr($E9) then begin CopyMemory(@OriginalBytes, @Bytes, 5); ShowMsg(Func2Hook + ' havn''t been hooked!'); end else begin ShowMsg(Func2Hook + ' have been hooked! Exit!'); // ResumeThread(pi.hThread); exit; end; cbStolen :=0; while cbStolen < 5 do cbStolen := cbStolen + LDE32(Pointer(DWORD(PtrReal) + cbStolen)); ShowMsg('Let''s steal the first ' + inttostr(cbStolen) + ' bytes :)'); ShowMsg('But make it writable first ...'); if VirtualProtect(PtrReal ,cbStolen , PAGE_EXECUTE_READWRITE, @tmp) then ShowMsg('Make ' + inttohex(DWORD(PtrReal), 8) + ' writable succeed!') else begin ShowMsg('Hoops! Make ' + inttohex(DWORD(PtrReal), 8) + ' writable failed! Exit!!'); // ResumeThread(pi.hThread); exit; end; ShowMsg('Assemble Jmp codes & hook ' + Func2Hook + '...'); GetMem(HookJmp, 5); try HookJmp[0] := Chr($E9); asm push eax lea eax, FakeCode mov tmp, eax pop eax end; tmp := tmp - DWORD(PtrReal) - 5; CopyMemory(@HookJmp[1], @tmp, 4); asm push eax lea eax, RtnCode mov tmp, eax pop eax end; VirtualProtect(Pointer(tmp) ,cbStolen , PAGE_EXECUTE_READWRITE, @Rtn); CopyMemory(Pointer(tmp), PtrReal, cbStolen); WriteProcessMemory(GetCurrentProcess, PtrReal, HookJmp, 5, Rtn); // WriteProcessMemory(pi.hProcess, PtrReal, HookJmp, 5, Rtn); ShowMsg('Hook ' + Func2Hook + ' succeed! Resume thread!'); finally Freemem(HookJmp); // ResumeThread(pi.hThread); end; exit; FakeCode: //No strings from here on asm int 3 end; asm push eax lea eax, [esp+4] mov p, eax pop eax end; if dword(p^) - ntdllbase < NtDllLength then asm pop p pop eax pop eax pop eax mov eax, 0 jmp p // push p // ret end; //messagebox(0,pchar(p),'',0); RtnCode: asm nop nop nop nop nop nop nop nop nop nop nop nop nop mov eax, PtrReal add eax, cbStolen jmp eax end; end; var Ptr, ppp: Pointer; procedure TForm1.Button2Click(Sender: TObject); begin {asm call ppp; end; exit; } Button3Click(nil); Ptr := VirtualAlloc(nil, 1024, MEM_COMMIT, PAGE_EXECUTE_READWRITE); if not Assigned(Ptr) then Memo1.Lines.Add('Fatal Error: VirtualAlloc failed!') else Memo1.Lines.Add('VirtualAlloc succeed! Ptr = ' + inttohex(DWORD(Ptr), 8)); end; procedure TForm1.FormDestroy(Sender: TObject); begin Button3Click(nil); UnmapViewOfFile(ppp); CloseHandle(h); end; procedure TForm1.Button3Click(Sender: TObject); begin if Assigned(Ptr) then VirtualFree(Ptr, 0, MEM_RELEASE); end; procedure TForm1.FormCreate(Sender: TObject); begin h := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE or SEC_COMMIT, 0, 1, 'pe'); ppp := MapViewOfFile(h,FILE_MAP_ALL_ACCESS,0,0,0); caption := inttohex(dword(ppp),8); char(ppp^) := Chr($C3); end; end. ====== Unit1里有很多垃圾代码,因为这个防hook的程序只是一个副产品。 有用代码写成dll注入其他进程就可以防hook了,已经试过没问题。 代码风格比较差,不过不知道怎么改的更好(如将FakeCode部分放到单独过程中)。 如果你改好了希望能发给我一份。 MLDE32Unit代码来自29A第七期,作者忘记了,不好意思。
delphi HOOK防止线程结束 delphi HOOK防止线程结束。 通过sql注入防止进程管理器中结束任务。增加system权限支持,可以在服务中使用。 立即下载

相关推荐

Delphi 键盘钩子(Hook) + 程序最小化

键盘钩子,监听键盘按键 其中我只是监听了F1和F2,如果要用到其它键,请自己加入

WinAPI【远程注入】hook注入 Delphi 实例一

(okwary) 小叹的学习园地 线程注入实例: 我们知道在NT及以上操作系统提供了一个函数VirtualAllocEx,利用这个函数我们可以在其它进程中申请一块内存,其定义如下: function VirtualAllocEx( //在其它进程中申请一块内存 hProcess: THandle;// hProcess为要申请内存的进程的句柄 lpAddress: Point...

weixin_30520015的博客 303

【STM32Cube HAL】输入捕获(六)——脉宽测量

1

HAHAHA 4907

Windows XP下屏蔽Ctrl_Alt_Del键的方法

//调用下面两个函数就可以了procedure RunFuckCAD; //屏蔽Ctrl+Alt+Delprocedure StopFuckCAD; //取消屏蔽Ctrl+Alt+Del点击下载源文件主要代码为: unit Fuck_CAD_Unit; interface uses Windows, TLHelp32,SysUtils; const...

weixin_30602505的博客 132

将Matlab程序打包成.exe独立可执行程序

将Matlab程序打包成.exe独立可执行程序,在未安装Matlab的电脑上也能运行Matlab程序。

简简单单的学习笔记,致力于帮助更多前进路上的朋友~ 5万+

TI 实时操作系统SYS/BIOS使用总结

1:概述: SYS/BIOS 是一个可扩展的实时的操作系统。具有非常快速的响应时间(在中断和任务切换时达到较短的延迟),响应时间的确定性,强壮的抢占系统,优化的内存分配和堆栈管理(尽量少的消耗和碎片)。能够实现系统的模块化并可裁剪。 最大的特点就是:实时。 2:XDCtools: XDCtools 是SYS/BIOS引用的一种实时的软件组件技术(RTSC),它包括一些有用的工具,标准的AP

带头奋青的博客 5万+

脱壳基础知识入门

现在加解密发展己形成2个分支了,一个就是传统的算法,另一个就是加密壳。越来越多的软件采用了密码学相关算法,现在要做出一个软件注册机己不象前几年那么容易,这就要求解密者必须要有一定的数学功底和密码学知识,而这些在短时间内是不容易掌握的。除了密码学的应用,越来越多的软件加壳了,因此要求解密者必须掌握一些脱壳技术,这就使得壳成了解密必须迈过的一个门槛。壳发展到今天,强度越来越高了,将许多人挡在门外,使得

zacklin的专栏 4259

Roboflow 与 YOLOv11 数据集全流程:从获取到训练,让你数据无忧

上传图像:点击“Upload”按钮,批量上传本地图像(支持 JPG、PNG 格式,单张最大 10MB)。智能标注:利用 Roboflow 的“Auto-Annotate”功能,基于预训练模型自动生成标注,再手动微调,标注效率提升 70%。格式导出:标注完成后,同样选择“YOLOv11”格式导出,流程与公开数据集一致。

m0_71589036的博客 272

【亲测免费】 DelphiHookUtils:一个强大的Delphi代码注入与调试工具

DelphiHookUtils:一个强大的Delphi代码注入与调试工具 项目简介 是一个由开发者 DelphiLite 创建的开源项目,它提供了一套方便、高效的API和示例,用于在Delphi应用程序中实现钩子(Hook)功能,包括函数拦截、内存修改等高级调试技术。这个项目的目的是帮助Delphi开发者更轻松地进行代码分析、性能优化、错误排查,甚至是开发辅助工具。 技术解析 DelphiHook...

gitblog_00043的博客 1462

【unity小技巧】常用的方法属性和技巧汇总(长期更新,2025/07/02更新)

Unity开发技巧摘要 本文汇总了Unity开发中的实用技巧,包括移动控制、力应用、物体翻转、单例模式实现等。移动方面介绍了MoveTowards、MovePosition、Translate等方法的区别与应用场景;力应用部分详解了AddForce系列方法的参数和使用方式;物体翻转对比了三种实现方案;单例模式提供了标准实现和泛型优化版本;还收录了绝对值计算、鼠标检测、旋转控制、数值取整等实用代码片段。这些经过验证的技巧能有效提升开发效率,文章将持续更新补充新的实用内容。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3348

SPICE仿真软件:HSPICE_(20).HSPICE仿真结果的后处理

HSPICE仿真结果的后处理是一个多步骤的过程,包括读取结果文件、可视化、分析和导出。通过使用命令行工具、Python脚本和HSPICE内置工具,可以高效、准确地完成这些任务。Python脚本的灵活性和强大的数据分析能力使其成为后处理的理想选择。自动化处理可以显著提高工作效率,减少人为错误,而高级分析方法可以更深入地理解仿真结果,为电路设计提供有力支持。

kkchenjj的博客 1382

防止全局hook入侵Delphi版,2000以上系统适用(part3)

unit MLDE32Unit;//Micro Length Disassembler Engineinterface//作者忘记了,不好意思。好像出自29A-7。//sorry, author!function LDE32(Opcode: pointer): integer;implementationfunction LDE32(Opcode:

tt.t的专栏 1047

ARMv8/ARMv9的TLB深度学习

千万不要人云亦云。一个TLB entry里有很多很多东西的,有100多个比特位呢,并不是仅仅只有VA/PA/nG/VMID/ASID等。.👉👉👉 个人博客笔记导读目录(全部) 👈👈👈。

baron-周贺贺-代码改变世界ctw 1569

防止全局hook入侵Delphi版,2000以上系统适用(part1)

原理见http://202.38.73.222/~pjf/blog/archives/000040.html代码如下:============form1.dfm==============object Form1: TForm1 Left = 192 Top = 107 Width = 396 Height = 261 Caption = Form1

tt.t的专栏 1052

LLC变压器,常见的4大问题解决方案

其中之一是当付边的绕组的匝数或层数较多的时候,层间或匝间寄生电容和付边的漏感发生一个寄生的振荡,轻载的时候,这个振铃的幅度会达到很高,导致输出电压比设计的要高许多。但当输入是低压的时候,开关频率比较低,LLC谐振回路的增益较大,因而比较容易发生变压器饱和的问题。由于LLC变压器工作在LC谐振状态,LC谐振回路有个特点就是Q值问题,在这里Q值是大于1的,因而就会有实际加在变压器上的电压要比输入电压高的问题,因而在设计变压器的时候就必须考虑到这一点,否则变压器就不是工作在你设计的磁感应强度上。

1265

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

浅谈API HOOK技术

         APIHook一直是使大家感兴趣的话题。屏幕取词,内码转化,屏幕翻译,中文平台等等都涉及到了此项技术。有很多文章涉及到了这项技术,但都闪烁其词不肯明明白白的公布。我仅在这里公布以下我用Delphi制作APIHook的一些心得。       通常的APIHOOK有这样几种方法:      1、自己写一个动态链接库,里面定义自己写的想取代系统的API。把这个动态链接库映射到2G以

immcss的专栏 1292

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Delphi中Hook API进行进程保护

 const PRG_NAME = HA.exe;var TerminateProcessNext : function (processHandle, exitCode: dword) : bool; stdcall; NtTerminateProcessNext : function (processHandle, exitCode: dword) : dword; stdca

编程资料收集与共享交流 3602

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

防止全局钩子的侵入

Windows消息钩子一般都很熟悉了。它的用处很多,耳熟能详的就有——利用键盘钩子获取目标进程的键盘输入,从而获得各类密码以达到不可告人的目的。朋友想让他的软件不被别人的全局钩子监视,有没有办法实现呢?答案是肯定的,不过缺陷也是有的。   首先简单看看全局钩子如何注入别的进程。   消息钩子是由Win32子系统提供,其核心部分通过NtUserSetWindowsHookEx为用户提供了设置消息钩子

萝卜青菜 1500

全局钩子

using System; using System.Collections.Generic; using System.IO; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Reflection; namespace HookTest { ...

dengxuan4036的博客 166

Win32全局钩子在Delphi下实现的关键技术

自15年前Windows 3.1推出以来,Win32全局钩子的实现始终是32位Windows程序设计中最富挑战性的课题之一。全局钩子可以捕获系统向应用程序发送的消息(比如 键盘和鼠标操作、系统设置改变等等),因而被广泛地应用在各种商用应用软件中,其中又以金山词霸的“屏幕取词”功能最为国人所熟知。另一方面,黑客们不断 地开发出更隐蔽、更强大的钩子程序来盗取他人的密码和隐私。在互联网上我们可以轻易找到成百上千写法各异的Delphi钩子程序,可到目前为止,它们中没有一个是可以同时正确运行于Windows9x/Me

享_受_生_活 572

阻止全局钩子

阻止全局钩子2007-06-06 10:59  先说一下全局钩子是怎么进入到我们的程序里来的。假如有个程序A安装了WH_GETMESSAGE的全局钩子,钩子函数在B.dll中,那么当其它程序在调用GetMessage函数从自己的消息队列中取消息的时候,系统发现程序A安装了WH_GETMESSAGE的全局钩子,就会检查调用GetMessage的进程是否加载了B.dll,如果没有

i53nd的专栏 736

Delphi - 关于钩子函数HOOK

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

weixin_34327223的博客 408
上一篇: 防止全局hook入侵Delphi版,2000以上系统适用(part1)
下一篇: 防止全局hook入侵Delphi版,2000以上系统适用(part3)
ttui
博客等级 码龄24年 0粉丝 3原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值