首页
社区
课程
招聘
[讨论]这个函数是什么意思?
发表于: 2013-10-18 16:04 6486

[讨论]这个函数是什么意思?

2013-10-18 16:04
6486
static void __stdcall KeyStorage_Set(unsigned char Index, void *Value)
{
        __asm {
                xor eax, eax
                        mov al, Index
                        mov edx, Value
                        call skip_key_seh1
                        mov  ecx, [esp+0x0c]
                push ebx
                        mov  dword ptr [ecx], 0x10017
                        mov  ebx, [ecx+0xB0]
                inc ebx
                        shl ebx, 2
                        mov  eax, [ecx+0xA8]
                mov  [ecx+ebx], eax
                        inc  dword ptr [ecx+0x0b8]
                inc  dword ptr [ecx+0x0b8]
                xor  eax, eax
                        mov  [ecx+20], eax
                        mov  [ecx+24], eax
                        pop ebx
                        ret
skip_key_seh1:
                xor      ecx,ecx
                        push dword ptr fs:[ecx]
                mov  dword ptr fs:[ecx],esp
                        inc  byte ptr [ecx]
                nop
                        nop
                        pop  dword ptr fs:[ecx]
                add  esp,4
        }
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 72
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我QQ: 31990839
2013-10-18 16:06
0
雪    币: 124
活跃值: (469)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
反调试的一种手段,实际进入的是这个函数esp指向的函数
2013-10-19 09:13
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这句(call skip_key_seh1)怎么返回的?
2013-10-19 10:38
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
真能反调试,原理是什么?
2013-10-19 11:01
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
static void __stdcall KeyStorage_Set(unsigned char Index, void *Value)
{
        __asm {
                xor eax, eax
                        mov al, Index
                        mov edx, Value
                        call skip_key_seh1//调用SHE安装函数,会把下面这条语句的地址入栈,做为异常处理函数
                       
                        mov  ecx, [esp+0x0c]//这里中异常处理函数的入口,反调试方法我还没有分析出来
                        push ebx
                        mov  dword ptr [ecx], 0x10017
                        mov  ebx, [ecx+0xB0]
                        inc ebx
                        shl ebx, 2
                        mov  eax, [ecx+0xA8]
                        mov  [ecx+ebx], eax
                        inc  dword ptr [ecx+0x0b8]
                        inc  dword ptr [ecx+0x0b8]
                        xor  eax, eax
                        mov  [ecx+20], eax
                        mov  [ecx+24], eax
                        pop ebx
                        ret
skip_key_seh1://将call的下面那个地址安装为she处理函数
                xor      ecx,ecx
                        push dword ptr fs:[ecx]
                        mov  dword ptr fs:[ecx],esp
                        inc  byte ptr [ecx]//产生异常,转到上面的CLL后面那句
                        nop
                        nop
                        pop  dword ptr fs:[ecx]
                        add  esp,4
        }
}
2013-10-19 14:29
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
那个异常处理函数代码大体上是这样的
        ContextRecord->ContextFlags = 0x10017;
        //ContextRecord->某个元素 = Value;
        //某个元素的算法是 (index + 1) * 4
       
        ContextRecord->Eip = ContextRecord->Eip + 2;
        ContextRecord->Dr6 = 0;
        ContextRecord->Dr7 = 0;
        return ExceptionContinueExecution;

不过不知道为什么要这么写!
2013-10-19 15:31
0
游客
登录 | 注册 方可回帖
返回
//