当前位置:网站首页>De debugging (set the main thread as hidden debugging to destroy the debugging Channel & debugger detection)
De debugging (set the main thread as hidden debugging to destroy the debugging Channel & debugger detection)
2022-07-05 03:33:00 【#A#】
Debugging is essentially the next int3( abnormal ), There's an exception , The debugger will receive an exception , Will give the opportunity to deal with , Find the debugger before processing , Find the debugger after processing , Find the debugger twice . Using the functions of the driver layer can hide the thread settings under debugging , The original meaning is that the process does not debug , But the consequence is when the thread itself is attached with a debugger , Originally, one int3 The breakpoint of , What happens is an exception , There will be exceptions here , The debugger doesn't handle
Because it is an undisclosed function , You need to load the export table first
void GameProtect::AntiDebug()
{
auto hNtdll = LoadLibrary(L"ntdll.dll");
if (hNtdll)
{
ZwSetInfomationThreadPtr ZwSetInfomationThread;
ZwSetInfomationThread = (ZwSetInfomationThreadPtr)GetProcAddress(hNtdll, "ZwSetInformationThread");
ZwSetInfomationThread((DWORD)GetCurrentThread(), 0x11, 0x0, 0x0);
}
}
test : next int3 Breakpoint direct GG
Because the next one int3 Breakpoints essentially produce an exception , Exception find the debugger and find that the debugger does not respond , Go back to the program to deal with , The program cannot handle , Find the debugger , The debugger crashes when it ignores it
Use these functions to be obscene , Otherwise, when reverse analysis, look at the string table directly GG, It's better to use the login to send the address directly
Debugger detection :
adopt BeingDebugged testing :
// testing PEB structure
BOOL debug = IsDebuggerPresent();
BOOL _debug;
CheckRemoteDebuggerPresent(GetCurrentProcess(), &_debug);
if (debug)AfxMessageBox(L"IsDebuggerPresent Debugger detected ");
if (_debug)AfxMessageBox(L"CheckRemoteDebuggerPresent Debugger detected ");
Compile operation use x32DBG additional :
It was detected .
General debugger such as OD Will dispose of this place It has plug-ins that can fix this place , In essence, it's going to be beingdebug Field processed
commonly BeingDebugged The detection of is of little use The assembly code is directly changed 0 perhaps HOOK This function can also pass
OD Plug in for :
Detect the debugger through kernel properties :
In principle application layer Access to kernel mode is not available , But Microsoft still left a hole .
utilize NtQueryInformationProcess pick up information :
NTSTATUS(NTAPI* NtQueryInformationProcess)(
HANDLE ProcessHandle,// Process handle
DWORD ProcessInformationClass,// Information types
PVOID ProcessInformation,// Information pointer
ULONG ProcessInformationLength,// Information pointer size
PULONG ReturnLength // Write buffer size
)
PROCESSINFOCLASS 0x7 DebugPort
PROCESSINFOCLASS 0x1E DebugObjectHandle
PROCESSINFOCLASS 0x1F DebugFlags
The third parameter is an enumeration type But with DWORD Also yes
BOOL GameProtect::CheckDebugByNT()
{
//
DWORD debug_port = 0;
NtQueryInfomationProcess(HProcess, 0x07, &debug_port, sizeof(debug_port), 0x0);
if (debug_port)return TRUE;
HANDLE debug_object = 0;
// testing DBGOBJECT
NtQueryInfomationProcess(HProcess, 0x1E, &debug_object, sizeof(debug_object), 0x0);
if (debug_object)return TRUE;
BOOL debug_flags = 1;
NtQueryInfomationProcess(HProcess, 0x1F, &debug_flags, sizeof(debug_flags), 0x0);
if (!debug_flags)return TRUE;
return FALSE;
}
边栏推荐
- Breaking the information cocoon - my method of actively obtaining information - 3
- 040. (2.9) relieved
- Simple use of devtools
- Easy processing of ten-year futures and stock market data -- Application of tdengine in Tongxinyuan fund
- Acwing第 58 场周赛【完结】
- el-select,el-option下拉选择框
- Flume配置4——自定义MYSQLSource
- Flume configuration 4 - customize mysqlsource
- Clean up PHP session files
- The perfect car for successful people: BMW X7! Superior performance, excellent comfort and safety
猜你喜欢
Azkaban安装部署
Qrcode: generate QR code from text
[groovy] string (string type variable definition | character type variable definition)
Share the newly released web application development framework based on blazor Technology
The perfect car for successful people: BMW X7! Superior performance, excellent comfort and safety
2021 Li Hongyi machine learning (1): basic concepts
Acwing game 58 [End]
1. Five layer network model
[groovy] string (string splicing | multi line string)
Design and practice of kubernetes cluster and application monitoring scheme
随机推荐
040. (2.9) relieved
Basic knowledge of tuples
Flume配置4——自定义MYSQLSource
Talk about the SQL server version of DTM sub transaction barrier function
Azkaban overview
How to define a unified response object gracefully
SQL performance optimization skills
Sqoop安装
How can we truncate the float64 type to a specific precision- How can we truncate float64 type to a particular precision?
Six stone programming: advantages of automated testing
There is a question about whether the parallelism can be set for Flink SQL CDC. If the parallelism is greater than 1, will there be a sequence problem?
Three line by line explanations of the source code of anchor free series network yolox (a total of ten articles, which are guaranteed to be explained line by line. After reading it, you can change the
Pat class a 1160 forever (class B 1104 forever)
Kubernetes -- cluster expansion principle
[安洵杯 2019]不是文件上传
Nmap使用手册学习记录
SFTP cannot connect to the server # yyds dry goods inventory #
Hot knowledge of multithreading (I): introduction to ThreadLocal and underlying principles
Daily question 2 12
Blue Bridge Cup single chip microcomputer -- PWM pulse width modulation