首页
社区
课程
招聘
[求助]关于TLS编程
发表于: 2008-12-15 19:13 11692

[求助]关于TLS编程

2008-12-15 19:13
11692
收藏
免费 7
支持
分享
最新回复 (13)
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
2
关键看tls回调函数的执行与OD对OEP处的cc的先后关系.
本论坛有位网友说tls的回调函数是在msvcrtXX.dll的装载之前执行的(如果导入msvcrtXX库的话).
貌似他做过测试.http://bbs.pediy.com/showthread.php?t=81543&highlight=tls
如果真是这样的话:
那你要想在tls中下文章,不得一定确保OD不是在PE的所有模块装载完毕之后进行CC设断的 ?

我也不是很懂, 打算今天好好看下这个tls.
2009-2-21 05:37
0
雪    币: 357
活跃值: (3593)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
3
case EXCEPTION_DEBUG_EVENT:
                        Exception_Conut++;
                        if (Exception_Conut == 2 && debugevent->u.Exception.ExceptionRecord.ExceptionAddress != (PVOID)dwAddressOfCallBacks)
                        {
                                Print_Text("入口不是 tls addr,删除 tls addr 硬断\r\n");
                                Deletehardwarebreakbyaddr(dwAddressOfCallBacks);
                        }
2009-2-21 05:56
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
4
要问Nooby
2009-2-21 10:05
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
#include "stdafx.h"
#include <windows.h>
#include "winbase.h"
#pragma comment(linker, "/INCLUDE:__tls_used")

int main();

void do_anti(){
	ExitThread(0);
}

void NTAPI Anti_CC_In_OEP(PVOID h, DWORD reason, PVOID pv){
	if( reason == DLL_PROCESS_ATTACH ){
		IMAGE_DOS_HEADER *dos_head=(IMAGE_DOS_HEADER *)GetModuleHandle(NULL);
		IMAGE_NT_HEADERS32 *nt_head=(IMAGE_NT_HEADERS32 *)(((DWORD)dos_head)+((DWORD)dos_head->e_lfanew));
		BYTE *OEP=(BYTE *)(nt_head->OptionalHeader.AddressOfEntryPoint+(DWORD)dos_head);
		if(*OEP==0xcc){
			do_anti();
		}
		OEP=(BYTE *)main;
		if(*OEP==0xcc){
			do_anti();
		}
	}
	return;
}

#pragma data_seg(".CRT$XLB")
	PIMAGE_TLS_CALLBACK p_thread_callback[] = {Anti_CC_In_OEP,0};
#pragma data_seg()

int main(){
	printf("Hello,World");
}
2009-2-21 12:01
0
雪    币: 152
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我试过,是应用程序模块一加载就下断了。
另外,TLS的确是在MSVCRT没加载时就执行了。测试时发现的。
2009-2-21 12:04
0
雪    币: 107
活跃值: (419)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
Debug SubProcess.....
hardbreak----->NtContinue.....
check OEP....
2009-2-21 21:52
0
雪    币: 2290
活跃值: (20)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
8
漫谈TLS_CallBack:原理、编程、手工感染及检测
http://www.team509.com/modules.php?name=News&file=article&sid=73
2009-2-27 15:28
0
雪    币: 264
活跃值: (11)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
9
TLS非常神奇 一起学习~
2009-2-27 19:13
0
雪    币: 197
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
附件無法下載,有人能上傳一下嗎?謝謝!
2009-2-27 20:04
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
奇怪。DELPHI 编译出来的都有TLS这段。但如何实现象《漫谈TLS_CallBack:原理、编程、手工感染及检测》所提到的却无相关资料...郁闷
2009-3-1 03:58
0
雪    币: 88
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
tls 很强悍啊,不过用IDA很容易找到.然后函数开始改成int 3,OD就断下来了
2009-3-23 22:33
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
13
机器上有份:)
上传的附件:
2009-3-23 23:14
0
雪    币: 221
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
看了漫谈TLS_CallBack:原理、编程、手工感染及检测这篇文章,可是我用VC6.0编译里面的第一个例子TLS_CallBack_test,结果编译的PE文件中,指向回调函数地址的地方总是为0,如果手动把它改了以后就可以了,这是为什么呀,为什么编译器没把TLS回调函数地址写进去?
2009-5-13 08:48
0
游客
登录 | 注册 方可回帖
返回
//