Windows下常见的反调试方法.docx

Windows下常见的反调试方法.docx

ID:62075510

大小:55.08 KB

页数:23页

时间:2021-04-16

Windows下常见的反调试方法.docx_第1页
Windows下常见的反调试方法.docx_第2页
Windows下常见的反调试方法.docx_第3页
Windows下常见的反调试方法.docx_第4页
Windows下常见的反调试方法.docx_第5页
资源描述:

《Windows下常见的反调试方法.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、仁人教育Windows下常见的反调试方法稍稍总结一下在Crack或Rervese中比较常见的一些反调试方法,实现起来也比较简单,之后有写的Demo源码参考,没有太大的难度。 ①最简单也是最基础的,Windows提供的API接口:IsDebuggerPresent(),这API实际上就是访问PEB的BeingDebugged标志来判断是否处于调试状态。if(IsDebuggerPresent())//API接口{AfxMessageBox(L"检测到调试器");}else{AfxMessageBox(L"没有检测到调试器");}②自己用汇编实现实现IsDebuggerPresent,如何

2、获得PEB呢?在应用层,fs寄存器是指向当前线程的TEB结构的,而在内核层,fs寄存器指向PCR(ProcessorControlRegion)的内存,其数据类型是KPCR。所以可以通过当前线程的TEB获得PEB,再取出BeingDebugged的值。moveax,fs:18h//TEBSelf指针moveax,[eax+30h]//PEBmovzxeax,[eax+2]//PEB->BeingDebugged_asm{pusheax;//TEBmoveax,fs:[0x30];//PEBmovzxeax,byteptr[eax+2];//BeingDebuggedmovdwordpt

3、r[Value],eax;//取值popeax;}if(Value)//判断{AfxMessageBox(L"检测到调试器");}else仁人教育仁人教育{AfxMessageBox(L"没有检测到调试器");}讲个题外话,也是关于FS寄存器的前两天有人是问了我一个问题,说是怎么让dll只被特定的进程加载,了解fs寄存器之后就很简单了,在dll加载的DllMain()函数中对加载的当前进程进行判断,看是否是自己的目标进程,如果不是,就拒绝被加载。下面是一段测试代码,可以获得当前进程的进程名。#include"windows.h"//这段测试代码可以获得当前进程名#include"std

4、io.h"intmain(void){LPSTRname;__asm{moveax,fs:[0x18]//得到Teb当线程运行于用户空间时段寄存器FS指向当前线程的TEB,FS:[0x18]就是指在//Self,其内容就是TEB的起点moveax,[eax+0x30]//Teb偏移0x30处指向Pebmoveax,[eax+0xc]//Peb偏移0xc处指向进程加载的模块的信息_PEB_LDR_DATA结构moveax,[eax+0xc]moveax,[eax+0x30]movname,eax}wprintf(L"%s",name);return0;}③NtGlobalFlag也是

5、类似于BeingDebugged的一个标志,在Peb中取出。如果是调试状态下,NtGlobalFlag的值会是0x70,正常情况下不是。之前是利用fs寄存器获得的Peb基地址,这里使用NativeAPI的方法。HANDLEhProcess=NULL;DWORDProcessId=0;PROCESS_BASIC_INFORMATIONPbi;PFNZwQueryInformationProcesspfunc_ZwQueryInformationProcess=NULL;ProcessId=GetCurrentProcessId();hProcess=OpenProcess(仁人教育仁人教

6、育PROCESS_ALL_ACCESS,FALSE,ProcessId);if(hProcess!=NULL){HMODULEhModule=LoadLibrary(L"ntdll.dll");pfunc_ZwQueryInformationProcess=(PFNZwQueryInformationProcess)GetProcAddress(hModule,"ZwQueryInformationProcess");NTSTATUSStatus=pfunc_ZwQueryInformationProcess(hProcess,ProcessBasicInformation,&Pbi,

7、sizeof(PROCESS_BASIC_INFORMATION),NULL);if(NT_SUCCESS(Status)){DWORDByteRead=0;WORDNtGlobalFlag=0;boolbIsDebug=false;ULONGPebBase=(ULONG)Pbi.PebBaseAddress;if(ReadProcessMemory(hProcess,(LPCVOID)(PebBase+0x68),&NtGlobalFlag,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。