美文网首页
TLS在反调试方面的应用

TLS在反调试方面的应用

作者: FallMR | 来源:发表于2017-02-21 09:00 被阅读0次

使用TLS进行反调试是使用在TLS回调函数中加入反调试代码的方法来进行的反调试手段

TLS回调函数是指,每当创建/终止进程的线程时会自动调用执行的函数。创建的主线程也会自动调用回调函数,且其调用执行先于EP代码。

那么很显然TLS反调试可以达到一些比常规反调试更好的效果

诶这个题目怎么OD加载不进去QAQΣ( ° △ °|||)︴

关于TLS本身的其他属性这里也不赘述 这里主要研究TLS的写法


一个VS2015下的简单demo(x86 release版本)

#include <Windows.h>
#include <stdio.h>

void NTAPI __stdcall TLS_CALLBACK(PVOID DllHandle, DWORD dwReason, PVOID Reserved)
{
    if (IsDebuggerPresent())
    {
        printf("Debugger detected\n");
    }
    else
    {
        printf("No debugger\n");
    }
}

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

EXTERN_C

#pragma data_seg (".CRT$XLB")
PIMAGE_TLS_CALLBACK _tls_callback =  TLS_CALLBACK;
#pragma data_seg ()

int main()
{
    printf("This is main()\n");
    return 0;
}

首先是TLS回调函数的函数原型

void NTAPI __stdcall TLS_CALLBACK(PVOID DllHandle, DWORD dwReason, PVOID Reserved);

需要知道的是TLS回调函数设计的本意是为了完成相应的初始化以及其他的一些初始化工作,比如加载一个dll的时候blablabla...
所以常规的用法可能更类似下面这种:

void NTAPI tls_callback(PVOID DllHandle, DWORD dwReason, PVOID Reserved)
{
    if (dwReason == DLL_THREAD_ATTACH)
    {
        MessageBox(0, L"DLL_THREAD_ATTACH", L"DLL_THREAD_ATTACH", 0);
    }

    if (dwReason == DLL_PROCESS_ATTACH)
    {
        MessageBox(0, L"DLL_PROCESS_ATTACH", L"DLL_PROCESS_ATTACH", 0);
    }
}

接下来需要解释的是这一段:

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

EXTERN_C

#pragma data_seg (".CRT$XLB")
PIMAGE_TLS_CALLBACK _tls_callback =  TLS_CALLBACK;
#pragma data_seg ()

使用TLS需要在程序中新建一个data段专门存放TLS数据,并且需要通知链接器在PE头中添加相关数据,所以有了上面这一段代码


demo的效果:

未加插件的OD

在加载完之前TLS回调函数便已经执行,如果稍加修改demo的代码为直接退出那么将会直接退出

相关文章

  • TLS在反调试方面的应用

    使用TLS进行反调试是使用在TLS回调函数中加入反调试代码的方法来进行的反调试手段 TLS回调函数是指,每当创建/...

  • android studio 调试经验

    放在 jniLibs 里面的带调试符号的第三方库,在用AS调试应用,或者打debug包的时候,默认也会被去除调试符...

  • 反调试与反-反调试

    1. 反调试与反-反调试 1.1 常用反调试 1.1.1 ptrace 为了方便应用软件的开发和调试,从Unix的...

  • TLS详解

    TLS详解 - 简书 应用层协议http、ftp、smtp等 TLS说明 TLS是建立在传输层TCP协议之上的协议...

  • 聊聊 Android HTTPS 的使用姿势

    HTTPS 简介 HTTPS 全称 HTTP over TLS。TLS是在传输层上层的协议,应用层的下层,作为一个...

  • 初识Https

    HTTPS = HTTP (应用层) + SSL/TLS(传输层) 那什么是SSL/TLS呢? SSL = Sec...

  • TLS详解

    一、为什么使用TLS 在SSL/TLS出现之前,很多应用层协议(http、ftp、smtp等)都存在着网络安全问题...

  • 我的逆向工程之路 - LLDB调试

    (基于越狱系统10.0.2) lldb调试就是Xcode里面的 控制台调试。越狱了,我们就能调试其他第三方的App...

  • TLS 证书生成和使用

    TLS 证书基础知识参考 TLS 如何保证网络通讯安全 这一篇主要介绍证书的生成,以及在Java项目中的应用 证书...

  • 关于android属性persistent的问题

    问题描述 在一次系统应用的运行调试中,出现下面的报错: java.lang.RuntimeException: U...

网友评论

      本文标题:TLS在反调试方面的应用

      本文链接:https://www.haomeiwen.com/subject/iuxywttx.html