防游戏检测之易语言APC注入DLL技术

本文章转载来自:http://bbs.dult.cn/thread-23291-1-1.html
APC注入是什么原理?
首先我们得来了解下它是什么东西,才能更好的运用它,关于APC对于懂微软api函数使用的学员来说可能不陌生,新手估计没有接触过。
APC 注入的原理是利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,
其具体流程如下:
1.当EXE里某个线程执行到SleepEx() 或者 WaitForSingleObjectEx() 时,系统就会产生一个软中断(或者是Messagebox弹窗的时候不点OK的时候也能注入)。
2.当线程再次被唤醒时,此线程会首先执行APC队列中的被注册的函数。
3.利用QueueUserAPC()这个API可以在软中断时向线程的APC队列插入一个函数指针,如果给它插入的是Loadlibrary()执行函数的话,就能达到注入DLL的目的。

大至了解了下后就可以了,因为为了方便写辅助的学员注入游戏,我们模块里早已经提供了多种注入方式,本次的APC注入方式也不属于一种注入方式。
当然这里要说下,APC注入它分r0(可以使用NtQueueApcThread)层和r3层,这里我们先学习运用下r3层的APC注入,使用QueueUserApc。
毕竟内核驱动来进行注入涉及到系统方面,现在微软高版本系统对驱动加载都是要求比较严格的,
所以r3层(也就是应用层)能实现对游戏的注入,那尽量用应用层的,内核驱动方式的APC注入我们在后续模块更新了驱动后再来讲。

APC注入方式在我们独立团的 Game-EC 驱动模块 从8.5.2的驱动版本才加入的,
它的系统兼容方面:目前已经在xp,win7,win8,win10 32位/64位系统中测试过可用
使用的方法很简单(APC注入.exe 代码):
APC注入dll
win10 64位 注入效果:
APC注入
APC注入的好处:
这种方式注入的好处就是DLL注入到目标进程里后,用查看进程模块的工具比如:XT,PCHunter,等都查看不到它的存在,类似于我们模块里的内存注入一样!
如果游戏枚举自身进程模块来检测辅助DLL,是查不到我们的DLL的!

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
易语言是一种基于Visual Basic语法的编程语言,通过易语言可以方便地实现Windows下的各种功能。DLL注入是一种实现程序代码注入进程的技术,通过DLL注入可以在目标进程中运行自己编写的代码,以达到扩展或修改目标进程功能的目的。 下面是一个简单的易语言DLL注入源码示例: 函数 Declare函数名 CDECL别名 函数类型 字符串 文件名 参数列表 函数库文件名 参数类型 结果; // 声明LoadLibrary函数 Declare Function LoadLibraryA cdecl alias "LoadLibraryA" (sLibName As String) As Long // 声明GetProcAddress函数 Declare Function GetProcAddress cdecl alias "GetProcAddress" (hModule As Long, sProcName As String) As Long // 声明CreateRemoteThread函数 Declare Function CreateRemoteThread cdecl alias "CreateRemoteThread" (hProcess As Long, lpThreadAttributes As Long, dwStackSize As Long, lpStartAddress As Long, lpParameter As Long, dwCreationFlags As Long, lpThreadId As Long) As Long Sub 注入DLL() Dim lProcessHandle As Long Dim lRemoteThread As Long Dim lModuleName As Long Dim lProcAddress As Long ' 打开目标进程,获取进程句柄 lProcessHandle = OpenProcess(&H1F0FFF, False, 目标进程ID) ' 在目标进程中申请一块内存,用于存放DLL路径 lModuleName = VirtualAllocEx(lProcessHandle, 0, Len(DLL路径), 4096, 4) ' 将DLL路径写入到目标进程的内存中 WriteProcessMemory lProcessHandle, lModuleName, DLL路径, Len(DLL路径), NumBytesWritten ' 获取LoadLibrary函数的地址 lProcAddress = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA") ' 在目标进程中创建远程线程,回调到LoadLibrary函数 lRemoteThread = CreateRemoteThread(lProcessHandle, 0, 0, lProcAddress, lModuleName, 0, 0) ' 关闭进程句柄 CloseHandle lProcessHandle End Sub 以上是一个基本的易语言DLL注入源码示例。通过调用相关的Windows API函数,实现了在目标进程中注入DLL的流程。需要替换相应的目标进程ID和DLL路径,即可实现DLL注入的功能。这段源码具有一定的通用性,但是需要根据实际情况进行修改和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值