TLS回调函数实现反调试
创始人
2024-05-08 16:12:26
0

title: TLS回调函数实现反调试.md
date: 2022-06-16 23:40:49.231
updated: 2022-06-16 23:41:11.924
url: /archives/tls回调函数实现反调试
categories:
tags:

  • 逆向

TLS回调函数实现反调试

TLS-线程局部存储

先于我们OEP执行

#include
#include
#include
#include
#include   
#include   
#include 
#include 
#pragma comment(linker,"/INCLUDE:__tls_used")  
// 告诉链接器我要用到TLSDWORD isDebug = 0;void NTAPI TLS_CALLBACK1(PVOID DllHandle, DWORD Reason, PVOID Reserved) {if (Reason == DLL_PROCESS_ATTACH){::MessageBoxA(0,"TLS函数执行1",0,0);//不接受内核调试信息/*NtSetInformationThread(GetCurrentThread(),ThreadHideFromDebugger,0,0);NtSetInformationProcess(GetCurrentProcess(),ProcessDebugPort,(PVOID)&isDebug,sizeof(DWORD),NULL);*/}}void NTAPI TLS_CALLBACK2(PVOID DllHandle, DWORD Reason, PVOID Reserved) {if (Reason == DLL_PROCESS_ATTACH){::MessageBoxA(0, "TLS函数执行2", 0, 0);}}int main()
{::MessageBoxA(0,"Main函数启动了",0,0);
}
//新建一段数据放入TLS这个目录里面
#pragma data_seg(".CRT$XLX")			
PIMAGE_TLS_CALLBACK pTLS_CALLBACKs[] = { TLS_CALLBACK1,  TLS_CALLBACK2, NULL };
#pragma data_seg()

image-20220616180649848

描述了TLS的结构体

image-20220616180820595

对应

在这里插入图片描述

可以理解为函数指针的数组

实例

#include   
#include   
#include 
#include 
#pragma comment(linker,"/INCLUDE:__tls_used")  
// 告诉链接器我要用到TLSDWORD dwDebugPort;
typedef NTSTATUS(__stdcall* pNtQueryInformationProcess)(IN HANDLE           ProcessHandle,IN PROCESSINFOCLASS ProcessInformationClass,OUT PVOID           ProcessInformation,IN ULONG            ProcessInformationLength,OUT PULONG          ReturnLength);void NTAPI TLS_CALLBACK1(PVOID DllHandle, DWORD Reason, PVOID Reserved) {if (Reason == DLL_PROCESS_ATTACH){::MessageBoxA(0,"TLS函数执行1",0,0);//不接受内核调试信息HMODULE hModule = LoadLibrary(TEXT("Ntdll.dll"));pNtQueryInformationProcess ntQueryInformationProcess = (pNtQueryInformationProcess)GetProcAddress(hModule, "NtQueryInformationProcess");ntQueryInformationProcess(GetCurrentProcess(), ProcessDebugPort, &dwDebugPort, sizeof(dwDebugPort), NULL);//dwDebugPort 为0表示没用被调试,反之则是}}//void NTAPI TLS_CALLBACK2(PVOID DllHandle, DWORD Reason, PVOID Reserved) {
//
//	if (Reason == DLL_PROCESS_ATTACH)
//	{
//		::MessageBoxA(0, "TLS函数执行2", 0, 0);
//
//	}
//
//}int main()
{     char str[] = "wust_is_good!";for (int i = 0; i < 14; ++i) {str[i] ^= dwDebugPort;}::MessageBoxA(NULL,str,"提示", MB_OK);
}
//新建一段数据放入TLS这个目录里面
#pragma data_seg(".CRT$XLX")			
PIMAGE_TLS_CALLBACK pTLS_CALLBACKs[] = { TLS_CALLBACK1,  /*TLS_CALLBACK2,*/ NULL };
#pragma data_seg()

如果直接运行

在这里插入图片描述

本地调试运行

在这里插入图片描述

一堆乱码

由于dwDebugPort是全局变量, 发现不是调试,置为0,0异或任何数都是该数本身

题目 Dest0g3 520迎新赛 tttea

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注意到是xxtea的特征值

在这里插入图片描述

加密方式也是xxtea,实现部分把输入的44位flag ,组成11位int 类型的数据进行xxtea加密,最后与密文对比

原本是直接写的东西,直接魔改xxtea直接弄,发现跑出来是乱码,直接动态调试

构造flag

flag{12345678912345678912345678912345678911}

注意到字符串,image-20220616193828367

image-20220616193859423

发现TLS和反调试函数

image-20220616193937181

该字符串地址后24正好是key的位置

由于TLS一般在程序难以发现

最好使用查看PE文件的软件看各个段

PE结构里->数据目录表(常见的导出表、导入表等)->TLS表

所以,加入TLS_CALLBACK,在TLS表里会找到TLS回调函数,这是找到TLS回调的一个方法

image-20220616194825241

image-20220616194121230

image-20220616194354897

2个反调试

image-20220616194413039

这个是异或

所以真正的delta为0x66403319 ^ 0x12345678,即0x74746561

EXP

#include   
#include   
#include #define MX (((z>>6^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(p&3)^e] ^ z))) void xxtea_decode(uint32_t* v, int n, DWORD delta)
{char* key = (char*)δuint32_t y, z, sum;unsigned p, rounds, e;rounds = 6 + 52 / n;sum = rounds * delta;y = v[0];do{e = (sum >> 2) & 3;for (p = n - 1; p > 0; p--){z = v[p - 1];y = v[p] -= MX;}z = v[n - 1];y = v[0] -= MX;sum -= delta;} while (--rounds);
}int main()
{DWORD delta = 0x74746561;char enc[] = { 3, 35, 34, 47, 54, 136, 253, 67, 33, 232, 91, 101, 49, 30, 59, 166, 75, 184, 220, 136, 128, 25, 132, 111, 151, 114, 33, 38, 173, 100, 238, 187, 136, 4, 77, 6, 47, 38, 229, 107, 129, 75, 245, 115 };xxtea_decode((uint32_t*)enc, 11, delta);printf("%s", enc);return 0;
}
//Dest0g3{73dd38c2-9d45-4f7a-9bd0-90a1e9907c1}

相关内容

热门资讯

黎真主党领导人重申绝不会放弃武...   △黎巴嫩真主党领导人纳伊姆·卡西姆  当地时间11日,黎巴嫩真主党领导人纳伊姆·卡西姆在真主党烈...
警惕“过保”网络设备成境外间谍...   记者从国家安全部了解到,办公室的路由器依然闪烁,客厅里的摄像头仍在转动,这些陪伴我们多年的设备,...
“满仓”以待 我国最大储气库开...   央视网消息:记者从中国石油获悉,我国最大储气库——新疆油田呼图壁储气库11月10日全面启动冬季天...
使用游戏外挂软件牟利25万余元...   近日,福建省泉州网警在泉州某小区抓获涉嫌组织他人使用外挂软件进行代打牟利的嫌疑人肖某以及员工等6...
四川阿坝红旗特大桥发生垮塌,今... 极目新闻记者 唐佳燕 刘琴 邓波 谢茂 11月11日,网传四川省阿坝州马尔康市红旗特大桥发生垮塌。视...
生娃基本不花钱!“医育结合”伴...   央视网消息:近年来,国家医保局加快建立全周期的生育保障体系,助力“怀得上、孕得优、生得安、育得好...
【理响中国·薪火“燃”青春】迈...   编者按:大江奔流,激扬青春浪潮;薪火相传,燃动理想之光。2025年,光明网策划推出“理响中国·薪...
中国有约丨千年醋韵 看国际友人...   中国日报网11月11日电 11月10日下午,“中国有约·相约山西”2025国际媒体采访团走进太原...
来昌吉感受棉粮煤的“吨位”   来昌吉感受棉粮煤的“吨位”  半月谈记者 曹志恒 苟立锋  新疆昌吉回族自治州,古称庭州,自古为...
​企业支付违约金能税前扣除吗 企业支付违约金能税前扣除吗根据《中华人民共和国企业所得税法》第八条:企业实际发生的与取得收入有关的、...