首页 > 其他分享 >TLS反调试

TLS反调试

时间:2022-08-21 08:45:34浏览次数:53  
标签:TLS CALLBACK HelloTls pragma main 调试

TLS反调试

TLS, Thread Local Storage, 线程局部存储,其它线程不可访问,可实现多线程安全。利用TLS可以实现一种反调试。

在程序一开始运行时,会创建一个主线程,而创建主线程前,会先执行TLS相关函数。
执行顺序: TLS函数 -> 入口点 -> main函数

反调试示例:

#include <windows.h>

#pragma comment(linker, "/INCLUDE:__tls_used")

void NTAPI TLS_CALLBACK(PVOID DllHandle, DWORD Reason, PVOID Reserved)
{
    if( IsDebuggerPresent() )
    {
        MessageBoxA(NULL, "Debugger Detected!", "TLS Callback", MB_OK);
        ExitProcess(1);
    }
}

#pragma data_seg(".CRT$XLX")
    PIMAGE_TLS_CALLBACK pTLS_CALLBACKs[] = { TLS_CALLBACK, 0 };
#pragma data_seg()

int main(void)
{
    MessageBoxA(NULL, "Hello :)", "main()", MB_OK);
}

TLS_CALLBACK函数会先于main函数执行,反调试比较隐蔽。

使用vs2017生成release版程序时,需要注意禁用"全程序优化":
项目设置 -> C/C++ -> 优化 -> 全程序优化,设置为"否"

参考:

  1. 逆向工程核心原理
  2. https://github.com/reversecore/book/blob/master/소스코드/06_고급_리버싱/45_TLS_Callback_Function/src/HelloTls/HelloTls.cpp
  3. https://github.com/reversecore/book/blob/master/실습예제/06_고급_리버싱/45_TLS_Callback_Function/bin/HelloTls.exe

2022/8/17

标签:TLS,CALLBACK,HelloTls,pragma,main,调试
From: https://www.cnblogs.com/-rvy-/p/16609295.html

相关文章

  • 开发H5程序或者小程序的时候,后端Web API项目在IISExpress调试中使用IP地址,便于开发调
    在我们开发开发H5程序或者小程序的时候,有时候需要基于内置浏览器或者微信开发者工具进行测试,这个时候可以采用默认的localhost进行访问后端接口,一般来说没什么问题,如果我们......
  • 不常见但很有用的chrome调试工具使用方法
     https://www.cnblogs.com/xiaohuochai/p/6344886.html前面的话  对于chrome调试工具,常用的是elements标签、console标签、sources标签和network标签。但实际上,还......
  • php断点调试工具------NetBeans+Xdebug调试php方法(测试成功)
    @原文url:http://www.cnblogs.com/dcb3688/p/4608015.html@netbeans官方调试php代码说明:https://netbeans.org/kb/docs/php/debugging_zh_CN.html个人认为,对有有经验......
  • 解决goland在mac m1下无法调试问题
     背景新电脑macm1goland调试抛出异常   异常信息第一次异常信息couldnotlaunchprocess:cannotrununderRosetta,checkthattheinstalledbuildo......
  • 移动端H5调试基础
    适用场景此文档描述场景适用于Android机型及Chrome内核的浏览器参考文档ChromeDeveloper开发文档链接(需要梯子)https://developer.chrome.com/docs/devtools/remote-de......
  • phpstorm双机远程调试环境搭建笔记
    原理:phpstorm监听一个调试端口,我设置为9001php运行时,xdbug连接调试端口cookie中如果带有XDEBUG_SESSION_START,并且XDEBUG_SESSION_START的值是phpstorm正在监听的值,则触......
  • Pycharm Debug调试
    一、打断点一个断点标记了一个代码行,当Pycharm运行到该行代码时会将程序暂时挂起。注意断点会将对应的代码行标记为红色,取消断点的操作也很简单,在同样位置再次单......
  • 解决 Android真机调试 卸载后无法再次安装成功
    1、配置环境变量androidsdk中的tools目录和platform-tools目录都配置到系统环境变量path中; 2、运行cmd输入命令adbdevices查看当前连接设备的机器编号;......
  • IDEA的debug调试技巧
    来自B站全网最实用的IDEADebug调试技巧(超详细案例)https://www.bilibili.com/video/BV1xa411Y72S?spm_id_from=333.337.search-card.all.click&vd_source=a3ca5632ce12......
  • Shell脚本调试技术
    前言shell编程在unix/linux世界中使用得非常广泛,熟练掌握shell编程也是成为一名优秀的unix/linux开发者和系统管理员的必经之路。脚本调试的主要工作就是发现引发脚本错误......