能力值:
(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.
|
能力值:
( 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);
}
|
能力值:
( LV9,RANK:180 )
|
-
-
4 楼
要问Nooby
|
能力值:
( 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");
}
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我试过,是应用程序模块一加载就下断了。
另外,TLS的确是在MSVCRT没加载时就执行了。测试时发现的。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
Debug SubProcess.....
hardbreak----->NtContinue.....
check OEP....
|
能力值:
( LV9,RANK:150 )
|
-
-
8 楼
漫谈TLS_CallBack:原理、编程、手工感染及检测
http://www.team509.com/modules.php?name=News&file=article&sid=73
|
能力值:
( LV9,RANK:250 )
|
-
-
9 楼
TLS非常神奇 一起学习~
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
附件無法下載,有人能上傳一下嗎?謝謝!
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
奇怪。DELPHI 编译出来的都有TLS这段。但如何实现象《漫谈TLS_CallBack:原理、编程、手工感染及检测》所提到的却无相关资料...郁闷
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
tls 很强悍啊,不过用IDA很容易找到.然后函数开始改成int 3,OD就断下来了
|
能力值:
(RANK:170 )
|
-
-
13 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
看了漫谈TLS_CallBack:原理、编程、手工感染及检测这篇文章,可是我用VC6.0编译里面的第一个例子TLS_CallBack_test,结果编译的PE文件中,指向回调函数地址的地方总是为0,如果手动把它改了以后就可以了,这是为什么呀,为什么编译器没把TLS回调函数地址写进去?
|
|
|