没有合适的资源?快使用搜索试试~ 我知道了~
Windows 下常见的反调试方法 稍稍总结一下在Crack或Rervese中比较常见的一些反调试方法,实现起来也比较简单,之后有写的Demo源码参考,没有太大的难度。
资源推荐
资源详情
资源评论
C & C
Windows 下常见的反调试方法
稍稍总结一下在Crack或Rervese中比较常见的一些反调试方法,实现起来也比较简单,之后有写的Demo源码参考,没有太大的难度。
①最简单也是最基础的,Windows提供的API接口:IsDebuggerPresent(),这API实际上就是访问PEB的BeingDebugged标志来判断是否处于调试状态。
复制代码
if (IsDebuggerPresent()) //API接口
{
AfxMessageBox(L"检测到调试器");
}
else
{
AfxMessageBox(L"没有检测到调试器");
}
复制代码
②自己用汇编实现实现IsDebuggerPresent,如何获得PEB呢?在应用层,fs寄存器是指向当前线程的TEB结构的,而在内核层,fs寄存器指向PCR(Processor Control Region)的内存,其数据类型是KPCR。所以可以通过当前线程的TEB获得PEB,再取出BeingDebugged的值。
mov eax, fs:18h // TEB Self指针
mov eax, [eax+30h] // PEB
movzx eax, [eax+2] // PEB->BeingDebugged
复制代码
_asm
{
push eax; //TEB
mov eax, fs:[0x30]; // PEB
movzx eax, byte ptr[eax + 2]; //BeingDebugged
mov dword ptr[Value], eax; //取值
pop eax;
}
if (Value) //判断
{
AfxMessageBox(L"检测到调试器");
}
else
{
AfxMessageBox(L"没有检测到调试器");
}
复制代码
讲个题外话,也是关于FS寄存器的前两天有人是问了我一个问题,说是怎么让dll只被特定的进程加载,了解fs寄存器之后就很简单了,在dll加载的DllMain()函数中对加载的当前进程进行判断,看是否是自己的目标进程,如果不是,就拒绝被加载。下面是一段测试代码,可以获得当前进程的进程名。
复制代码
#include "windows.h" //这段测试代码可以获得当前进程名
#include "stdio.h"
int main(void)
{
LPSTR name;
__asm{
mov eax,fs:[0x18] //得到Teb 当线程运行于用户空间时段寄存器FS指向当前线程的TEB,FS:[0x18] 就是指在 //Self,其内容就是TEB的起点
mov eax,[eax+0x30] //Teb偏移0x30处指向Peb
{
push eax; //TEB
mov eax, fs:[0x30]; // PEB
movzx eax, byte ptr[eax + 2]; //BeingDebugged
mov dword ptr[Value], eax; //取值
pop eax;
}
if (Value) //判断
{
AfxMessageBox(L"检测到调试器");
}
else
{
AfxMessageBox(L"没有检测到调试器");
}
复制代码
讲个题外话,也是关于FS寄存器的前两天有人是问了我一个问题,说是怎么让dll只被特定的进程加载,了解fs寄存器之后就很简单了,在dll加载的DllMain()函数中对加载的当前进程进行判断,看是否是自己的目标进程,如果不是,就拒绝被加载。下面是一段测试代码,可以获得当前进程的进程名。
复制代码
#include "windows.h" //这段测试代码可以获得当前进程名
#include "stdio.h"
int main(void)
{
LPSTR name;
__asm{
mov eax,fs:[0x18] //得到Teb 当线程运行于用户空间时段寄存器FS指向当前线程的TEB,FS:[0x18] 就是指在 //Self,其内容就是TEB的起点
mov eax,[eax+0x30] //Teb偏移0x30处指向Peb
剩余27页未读,继续阅读
资源评论
qq_42751466
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 流量查看工具GlassWire-Elite 3.3.678 多国语言安装包
- PHP协同OA网络办公系统源码数据库 MySQL源码类型 WebForm
- oracle java perl ok
- (源码)基于SpringBoot和Vue的宿舍管理系统.zip
- rv1126-rv1109-add-camera-gc2053-gc4653-②
- (源码)基于.NETCore的仓库管理系统.zip
- (源码)基于SpringBoot和Vue的分布式配置管理系统.zip
- 地下水动力学真题,有需要的自行下载,考研真题
- (源码)基于JavaServlet的河北重大需求分析系统.zip
- mysql-8.0.33-winx64.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功