首页
社区
课程
招聘
[转帖]TLS回调函数,Anti-od实例
2010-9-22 12:32 6166

[转帖]TLS回调函数,Anti-od实例

2010-9-22 12:32
6166
转载链接:http://www.ucooper.com/tls-anti-od-example.html

请用原版OD进行测试

.386

.model   flat,stdcall

option   casemap:none

include windows.inc

include user32.inc

include kernel32.inc

includelib user32.lib

includelib kernel32.lib

.data?

dwTLS_Index dd ?

OPTION    DOTNAME

;; 定义一个TLS节         

.tls SEGMENT                        

TLS_Start LABEL DWORD

dd    0100h    dup ("slt.")

TLS_End   LABEL DWORD

.tls   ENDS

OPTION    NODOTNAME

.data

TLS_CallBackStart dd TlsCallBack0

TLS_CallBackEnd    dd 0

szTitle            db "Hello TLS",0

szInTls            db "我在TLS里",0

szInNormal         db "我在正常代码内",0

szClassName        db "ollydbg"        ; OD 类名

;这里需要注意的是,必须要将此结构声明为PUBLIC,用于让连接器连接到指定的位置,

;其次结构名必须为_tls_uesd这是微软的一个规定。编译器引入的位置名称也如此。

PUBLIC _tls_used

_tls_used IMAGE_TLS_DIRECTORY <TLS_Start, TLS_End, dwTLS_Index, TLS_CallBackStart, 0, ?>

.code

;***************************************************************

;; TLS的回调函数

TlsCallBack0 proc Dllhandle:LPVOID,dwReason:DWORD,lpvReserved:LPVOID

     mov     eax,dwReason ;判断dwReason发生的条件

     cmp     eax,DLL_PROCESS_ATTACH ; 在进行加载时被调用

     jnz     ExitTlsCallBack0

     invoke FindWindow,addr szClassName,NULL ;通过类名进行检测

     .if     eax     ;找到

             invoke    SendMessage,eax,WM_CLOSE,NULL,NULL

     .endif

     invoke MessageBox,NULL,addr szInTls,addr szTitle,MB_OK

     mov     dword ptr[TLS_Start],0

     xor     eax,eax

     inc     eax

ExitTlsCallBack0:

     ret

TlsCallBack0   ENDP

;****************************************************************

Start:

    invoke   MessageBox,NULL,addr szInNormal,addr szTitle,MB_OK

    invoke   ExitProcess, 1

    end Start

应对方法:

OllyDbg载入这个例子将会暂停在入口点。由于TLS回调函数是在实际的入口点执行之前被调用的,OllyDbg应该配置一下使其在TLS回调被调用之前中断在实际的loader。

可以通过选择选项->调试选项->事件->第一次中断于->系统断点来设置中断于ntdll.dll内的实际loader代码。这样设置以后,OllyDbg将会中断在位于执行TLS回调的ntdll!LdrpRunInitializeRoutines()之前的ntdll!_LdrpInitializeProcess(),这时就可以在回调例程中下断并跟踪了。如,在内存映像的.text代码段上设置内存访问断点,可以断在TLS回调函数。

参考自《加密与解密》及看雪论坛

TLS回调函数,Anti-od 原理分析:http://www.ucooper.com/tls-anti-od-reason.html

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 576
活跃值: (152)
能力值: ( LV9,RANK:680 )
在线值:
发帖
回帖
粉丝
playboysen 16 2010-11-26 13:11
2
0
这个不错 最近正好需要这方面的资料吔
游客
登录 | 注册 方可回帖
返回