首页
社区
课程
招聘
[原创]对于VEH函数 表链 分析记录(对于某些游戏不知道异常处理函数可能有帮助)
发表于: 2017-6-1 15:11 4653

[原创]对于VEH函数 表链 分析记录(对于某些游戏不知道异常处理函数可能有帮助)

2017-6-1 15:11
4653

首先大神原帖震楼:http://m.pediy.com/showthread.php?t=211188&highlight=VEH

在看雪潜水这么久,第一次处女技术贴,大神们直接无视吧。


对于只玩OD的小白来说,原帖很多地方都不懂。无奈,OD搞起吧。

原题重点:

首先要明白VEH链表和VCH链表的成员都是存在进程默认堆里边的,每安装一个就专门申请16字节的空间.而有一个全局变量LdrpVectorHandlerList中保存了VEH链表和VCH链表的入口位置.
0:000> d ntdll!LdrpVectorHandlerList


以下为 RtlAddVectoredExceptionHandler  函数内部


77A08419      $  8BFF             mov edi,edi

77A0841B      .  55               push ebp

77A0841C      .  8BEC             mov ebp,esp

77A0841E      .  64:A1 18000000   mov eax,dword ptr fs:[0x18]

77A08424      .  8B40 30          mov eax,dword ptr ds:[eax+0x30]

77A08427      .  56               push esi

77A08428      .  6A 10            push 0x10                         

77A0842A      .  6A 00            push 0x0                             

77A0842C      .  FF70 18          push dword ptr ds:[eax+0x18]            

77A0842F      .  E8 925CFDFF      call RtlAllocateHeap                    

77A08434      .  8BF0             mov esi,eax

77A08436      .  85F6             test esi,esi

77A08438      .  74 62            je short 77A0849C

77A0843A      .  53               push ebx                                 

77A0843B      .  57               push edi

77A0843C      .  FF75 0C          push dword ptr ss:[ebp+0xC]             ;  需要加密的函数地址

77A0843F      .  C746 08 01000000 mov dword ptr ds:[esi+0x8],0x1

77A08446      .  E8 142DFEFF      call RtlEncodePointer                   ;  加密函数

77A0844B      .  8B5D 10          mov ebx,dword ptr ss:[ebp+0x10]

77A0844E      .  6BDB 0C          imul ebx,ebx,0xC                    

77A08451      .  81C3 4447AB77    add ebx,77AB4744                  ;  LdrpVectorHandlerList

77A08457      .  53               push ebx             

77A08458      .  8946 0C          mov dword ptr ds:[esi+0xC],eax           ;  写入加密地址

77A0845B      .  8D7B 04          lea edi,dword ptr ds:[ebx+0x4]           ;  77AB4744+4

77A0845E      .  E8 0CBCFDFF      call RtlAcquireSRWLockExclusive

77A08463      .  393F             cmp dword ptr ds:[edi],edi               ;  edi=77AB4748

77A08465      .  75 17            jnz short 77A0847E

77A08467      .  64:8B0D 18000000 mov ecx,dword ptr fs:[0x18]

77A0846E      .  8B45 10          mov eax,dword ptr ss:[ebp+0x10]

77A08471      .  8B49 30          mov ecx,dword ptr ds:[ecx+0x30]

77A08474      .  83C0 02          add eax,0x2

77A08477      .  83C1 28          add ecx,0x28

77A0847A      .  f0:0fab01        lock bts dword ptr ds:[ecx],eax          ;  PEB+28H处的值是5H

77A0847E      >  837D 08 00       cmp dword ptr ss:[ebp+0x8],0x0           ;  判断1,0写入表连方式

77A08482      .  0F84 A2C70100    je 77A24C2A

77A08488      .  8B07             mov eax,dword ptr ds:[edi]        ;  List头 - 记录最后一个函数

77A0848A      .  8906             mov dword ptr ds:[esi],eax

77A0848C      .  897E 04          mov dword ptr ds:[esi+0x4],edi

77A0848F      .  8970 04          mov dword ptr ds:[eax+0x4],esi           ;  记录第一个函数

77A08492      .  8937             mov dword ptr ds:[edi],esi       ;  把新添加的异常函数写入表头

77A08494      >  53               push ebx     

77A08495      .  E8 8FBBFDFF      call RtlReleaseSRWLockExclusive

77A0849A      .  5F               pop edi

77A0849B      .  5B               pop ebx      

77A0849C      >  8BC6             mov eax,esi

77A0849E      .  5E               pop esi

77A0849F      .  5D               pop ebp

77A084A0      .  C2 0C00          retn 0xC


从上面可以看到 LdrpVectorHandlerList 是存在于 Ntdll 中的一个基址(更加不同系统可能变吧)


77AB4744  00000000

77AB4748  0083A788  最后一个 VEH 处理函数机构。(大神贴有写这个结构)

77AB474C  0083A728  最前一个 VEH 处理函数机构。


这样就可以通过自己写算法,把所有表链中的 VEH 处理函数都拿出来了。

此外,如何有效的直接在自己的程序中 获取 LdrpVectorHandlerList  呢?

 以上纯属小白看法,有错的地方大神们来纠正吧。。。。。



[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 2347
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习了  可以d出来的话用符号获取可以吗
2017-6-1 17:20
0
雪    币: 639
活跃值: (1187)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
3
空白即是正义 学习了 可以d出来的话用符号获取可以吗
除了符号?还有其他方法吗?
2017-6-2 15:52
0
雪    币: 2347
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
qqwawzymu 除了符号?还有其他方法吗?
特征吧...
2017-6-2 16:13
0
游客
登录 | 注册 方可回帖
返回
//