首页
社区
课程
招聘
[原创]牢记VC程序内的三大检测函数
2020-11-1 16:02 8882

[原创]牢记VC程序内的三大检测函数

2020-11-1 16:02
8882

牢记VC程序内的三大检测函数

<br/>

 

  VC编译的程序中,时常会出现一些常见的检测函数,为了节省逆向的时间,我们有必要记住这些检测函数的特征,今天我就记录一下VC程序的三大检测函数。
<br/>
  如果是在IDA中分析VC程序, Shift+F5 加入VC的签名搞定,但是在OD中就需要经验了。

 

 

<br/>

 

  加入签名后,就可以看到函数名了。

 


<br/>

一、CheckStackVars

  看名称就知道知道这是一个检测堆栈相关的函数,它的主要特征:
  (1)call 上面一行代码是lea edx, XXXX。
  (2)函数内部存在代码cmp xxx,0xCCCCCCCC

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.text:00463934                 push    eax
.text:00463935                 lea     edx, dword_463960
.text:0046393B                 call    j_@_RTC_CheckStackVars@8 ; 检测堆栈
.text:00463940                 pop     eax
 
// 内部
.text:004661E4                 mov     ecx, [ebx+4]
.text:004661E7                 mov     eax, [ebp+var_4]
.text:004661EA                 mov     edx, [ecx+edi]
.text:004661ED                 cmp     dword ptr [edx+eax-4], 0CCCCCCCCh
.text:004661F5                 jnz     short loc_466209
.text:004661F7                 mov     eax, [ecx+edi+4]
.text:004661FB                 add     eax, edx
.text:004661FD                 mov     edx, [ebp+var_4]
.text:00466200                 cmp     dword ptr [eax+edx], 0CCCCCCCCh
.text:00466207                 jz      short loc_466219

<br/>

二、Security_Cookie

  安全cookie 以前因为栈溢出的问题是在太严重,所以VS引进了Security_Cookie,主要用来防止栈溢出的。主要特征:

1
2
3
4
5
6
7
8
  // 外部 call上面有xor xxx,xxx
.text:00463948                 xor     ecx, ebp
.text:0046394A                 call    j_@__security_check_cookie@4 ; 安全cookie
 
 // 内部对比cookie
.text:00466270                 cmp     ecx, ___security_cookie
.text:00466276                 bnd jnz short $failure$4
.text:00466279                 bnd retn

<br/>

三、CheckEsp

  检测栈顶,同样也有外部和内部特征

1
2
3
4
5
6
7
8
9
// 外部 call 上面有代码 cmp ebp, esp
.text:00463955                 cmp     ebp, esp
.text:00463957                 call    j___RTC_CheckEsp ; 检测ESP
 
// 内部调用了一个库函数,第二个参数为0,函数外平衡栈,8个字节。
.text:00466251                 push    0               ; int
.text:00466253                 push    eax             ; void *
.text:00466254                 call    j_?_RTC_Failure@@YAXPAXH@Z ; _RTC_Failure(void *,int)
.text:00466259                 add     esp, 8

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞2
打赏
分享
最新回复 (4)
雪    币: 2063
活跃值: (3823)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lhxdiao 2020-11-2 11:10
2
0
跟Linux GCC自动加的stack check差不多
雪    币: 83
活跃值: (1037)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
killpy 2 2020-11-3 01:46
3
0
666
雪    币: 2714
活跃值: (4498)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guduzhe 2021-11-17 19:03
4
0
汇编指令bnd是啥作用
雪    币: 2140
活跃值: (3523)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
R0g 2 2021-11-18 16:39
5
0
检测堆空间
安全cookie(Canary)
检测ESP
游客
登录 | 注册 方可回帖
返回