首页
社区
课程
招聘
[原创]用单步跟踪Anti-Debugger
发表于: 2006-8-22 10:18 7616

[原创]用单步跟踪Anti-Debugger

2006-8-22 10:18
7616
在调试器中,拙劣的debugger是用0xcc 来跟踪代码,但od就是用标志位进行单步跟踪,简单的说就是把TF置位,如果我们有自己的单步跟踪代码,od如果同时也跟踪了,就会“无视”我们自己的代码....达到anti的目的
代码如下:
;===============================cut==============================
;Author:Comic.Liu
        .386
        .model        flat,stdcall
        option        casemap        :none

        include                windows.inc
        include                user32.inc
        includelib        user32.lib
        include                kernel32.inc
        includelib        kernel32.lib
        .const

        .data
                szT                db        'Title',0
                szM                db        'You Are Passed',0
        .code
SEH        proc        pExcept:DWORD,pFrame:DWORD,pContext:DWORD,pDispatch:DWORD
                pushad
                assume        esi:ptr EXEPTION_RECORD,edi:ptr CONTEXT

                mov        esi,[pExcept]
                mov        edi,[pContext]

                mov        ebx,[edi].regEip
                inc        ebx
                cmp        byte ptr[ebx],0
                org        $-1
                popfd
                jz        fin
                or        [edi].regFlag,100h
                jmp        fin1
fin:                inc        [edi].regEip
fin1:                popad
                mov        eax,ExceptionContinueExecution
                ret

SEH        endp

start:
                assume        fs:nothing
                push        offset SEH
                push        fs:[0]
                mov        fs:[0],esp

                pushfd
                pushfd
                or        dword ptr[esp],100h
                popfd
                ;进入这一段代码就翘翘了
                nop
                ret
                ;=======End============
                ;不过可以用OD里的F4直接跳过上面那一段,到下面
                popfd
                invoke        MessageBox,NULL,offset szM,offset szT,NULL

                pop        fs:[0]
                add        esp,4
                invoke        ExitProcess,0
       
        end        start
;==========================finish===========================
程序在nop处以Single Step事件进入seh
在seh里面,修改eip跳过代码:ret

如果od跟踪,就截断了single step,seh就不会运行了,然后就出错

[课程]Android-CTF解题方法汇总!

收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
2
这个太普通了,有经验的遇到popfd会不由自主看一下[esp+1]里面那个是不是奇数。
2006-8-22 10:21
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
恩,但是如何在不爆破(如果有crc)的情况下anti呢?特别是当crash代码和修补的代码比较乱/长的时候怎么办

ps:领会精神~~,不一定用popfd的~
2006-8-22 10:32
0
游客
登录 | 注册 方可回帖
返回
//