首页
社区
课程
招聘
[原创]异常处理机制探索与分析 (代码在33楼)
发表于: 2008-2-5 21:29 23326

[原创]异常处理机制探索与分析 (代码在33楼)

zhuwg 活跃值
11
2008-2-5 21:29
23326

各位新年快乐:rose :rose
本文成型感谢shoooo大牛,下文还是称为大S
大S问偶 int3具体是怎么执行的 偶无法回答.于是认真学习了1下

我们执行int3 立刻会进入系统中断门


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (33)
雪    币: 347
活跃值: (30)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
2
虽然偶坐了沙发,但是偶和没看一样
2008-2-5 22:36
0
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
现在的精华缩水了? 不是原创也成精华? 后面的解释需要吗?必要吗?
2008-2-5 22:37
0
雪    币: 47147
活跃值: (20465)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
我们正在制定新的精华制度,会分成不同档次的。
这篇文章后面解释我感觉还是很必要的,并不是你以为自己懂了,别人也知晓。能把这些基础问题讲解清楚,就是一种做学问的态度。
关于“int3具体怎么执行”,我想论坛大部分人是不知的,作为一种常识普及也是有必要的。
2008-2-5 22:48
0
雪    币: 146
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
我是不知道,....
但是也许搜google,会搜到这里来
2008-2-5 23:15
0
雪    币: 66
活跃值: (16)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
实际sysenter之后再执行几句特殊得语句就转到int2e得地址


偶记得2e号中断是KiSystemService

lkd> u KiSystemService L 50
nt!KiSystemService:
804df631 6a00            push    0
804df633 55              push    ebp
804df634 53              push    ebx
804df635 56              push    esi
804df636 57              push    edi
804df637 0fa0            push    fs
804df639 bb30000000      mov     ebx,30h
804df63e 8ee3            mov     fs,bx
804df640 ff3500f0dfff    push    dword ptr ds:[0FFDFF000h]
804df646 c70500f0dfffffffffff mov dword ptr ds:[0FFDFF000h],0FFFFFFFFh
804df650 8b3524f1dfff    mov     esi,dword ptr ds:[0FFDFF124h]
804df656 ffb640010000    push    dword ptr [esi+140h]
804df65c 83ec48          sub     esp,48h
804df65f 8b5c246c        mov     ebx,dword ptr [esp+6Ch]
804df663 83e301          and     ebx,1
804df666 889e40010000    mov     byte ptr [esi+140h],bl
804df66c 8bec            mov     ebp,esp
804df66e 8b9e34010000    mov     ebx,dword ptr [esi+134h]
804df674 895d3c          mov     dword ptr [ebp+3Ch],ebx
804df677 89ae34010000    mov     dword ptr [esi+134h],ebp
804df67d fc              cld
804df67e 8b5d60          mov     ebx,dword ptr [ebp+60h]
804df681 8b7d68          mov     edi,dword ptr [ebp+68h]
804df684 89550c          mov     dword ptr [ebp+0Ch],edx
804df687 c74508000ddbba  mov     dword ptr [ebp+8],0BADB0D00h
804df68e 895d00          mov     dword ptr [ebp],ebx
804df691 897d04          mov     dword ptr [ebp+4],edi
804df694 f6462cff        test    byte ptr [esi+2Ch],0FFh
804df698 0f858efeffff    jne     nt!Dr_kss_a (804df52c)
804df69e fb              sti
804df69f e9dd000000      jmp     nt!KiFastCallEntry+0x8d (804df781) // <----

: )
2008-2-5 23:15
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
7
苦恼啊,这些根本就看不明白。。。。
2008-2-5 23:24
0
雪    币: 97697
活跃值: (200839)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
8
Thanks again for sharing your efforts zhuwg!
2008-2-6 01:00
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
9
kanxue老大取消这个的精华吧
这个其实没写完,后面还有偶自己的一些代码没贴出来...
因为调试发现了问题
后面部分应该给出的int3 int1的还原代码没贴..
硬编码的东西贴出来偶有点怕楼上炉子大牛...
2008-2-6 22:06
0
雪    币: 66
活跃值: (16)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
一定要贴出来一定要贴出来  不然偶就成千古罪人了啊千古罪人
2008-2-6 22:12
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
11
大年三十,没想到炉子大牛也在论坛啊.
祝新年快乐
按照国际惯例,没有自己代码是不能给精华的
2008-2-6 22:18
0
雪    币: 66
活跃值: (16)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
12
那就自己添上一行代码

MessageBox(0,1,2,3,4,5,6,7,8,9,0);  貌似我还把参数个数搞错了- -!

新年快乐 :)

不水了。。不然kanxue老大就要愤怒了  哈哈
2008-2-6 22:20
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
13
好拉.下面的实现代码由炉子大牛给出
这样一来就达到精华的标准拉
2008-2-6 22:23
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
14
向大家拜年
祝新年快乐

.还有.向大家道歉..
偶的一些文章存在问题,按照国际惯例是不能给予精华的
kanxue老大请取消精华
其实每个文章都应该配有自己写的实现代码,之所以没贴出来是偶的
代码是硬编码的
就是这样

WPOFF();
mov eax,0x11111111
mov [eax],0x22222222
WPON();

也就是硬修改,注意上面代码有以下问题
1.没有关中断sti cti
2.没有升dpc-dispatch_level
3.没有lockpages
4.没有spinlock
以上不是每个都必须,但是某些必须.之所以偶不这么写
原因很简单,为了更快的测试偶的想法有无严重问题
但是这种代码贴出来是肯定不行的,换了机器肯定没法运行
如果发生中断,线程切换,页被换出的任意一个那么就直接BSOD了
向所有鼓励和支持偶的大牛们表示感谢,更向那些批评和指点偶的大牛表示感谢
向被偶搞BSOD的大牛表示道歉
祝福各位新年快乐

那个int3代码,偶还原的时候是直接硬性写回去的,
一时找不到怎么动态获取int3处理函数真实地址的办法,只好先写一部分,看看有无大牛批评指点
实话承认,这些东西比较偏,所以只好写1部分看看有无感兴趣的大牛哦

还有,那个某人提到的主场问题.偶不好怎么说拉.
米办法,一些东西有点偏,所以只好各大论坛发1下,看看有大牛无意中能看见不.
要是发到某地方,既米人看,也米人回,偶文章就白写了  

偶想实现的东西是向系统中加入一个自己的异常处理
实现myint3和myint1,就是mykitrap3和mykitrap1
系统发生int3和int1的时候直接进入mykitrap3和mykitrap1
完全不经过那些被hook的函数,实现完整异常处理流程模拟

这也是偶的喜欢做法之一,对于那些邪恶的hook,完全模拟被hook的过程
从而本质上无视hook,干净利落做掉hook

新的一年到来了,老的保护技术应该把他留在上一年把
新的一年应该是VM的天下了,光靠1个邪恶驱动就敢横行霸道的时代也留在上一年把
本来想在年前完成所有代码,看来是不行的了.

年后偶希望分析1下异常的本质过程,偶的猜测是异常是平权的
--------------------------------------------------------------------------+
number  | Exception             | Exception Handler               |
--------------------------------------------------------------------------+
0       | Divide Error            | divide_error()                  |
1       | Debug                | debug()                         |
2       | Nonmaskable Interrupt      | nmi()                           |
3       | Break Point            | int3()                  |
4       | Overflow            | overflow()                      |
上面只是一小部分
那些反断点的anti一定是接管了 int3()的某些异常流程
我们是否可以改造od?让常规断点改用Divide Error ?
既然断点本质上是发生异常,程序中断下来
我们可否把要设置断点的地方改成
xor,eax,eax
div eax
这样触发的是除0异常,一样能够在这里中断下来,进入我们的处理过程
但是不会落入壳的int3陷阱,这样的好处是很简单,不需要写驱动
也不会改系统内核,却绕开了陷阱,不知是否可行
希望大牛予以指点.谢谢
2008-2-7 11:00
0
雪    币: 146
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
15
虽然偶不懂,但偶支持纯粹的人!
2008-2-7 11:10
0
雪    币: 47147
活跃值: (20465)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
16
精华有两种含义,一是技术层面的认可,另一个是分享层面的认可,更多的是一种鼓励。其中鼓励的成份更多些,这样论坛才能有更多的好文章,大家都能进步。

从论坛角度来说,提倡鼓励,如果文章有不妥,可以一起来交流,让发帖者不断修正自己的认识,共同进步,而不是抛几句打击人的话就消失,这样做,只会让他人下次不再愿意与大家分享心得的了。

在这感谢zhuwg能与大家分享心得,闭门造车也能进步,但在技交流中我想进步的更快些,交流和分享是一精神

目前精华的没分等级,08年我们将会改善这点的,以避免一些争议。

大家新年好!
2008-2-7 11:18
0
雪    币: 234
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
我也是没看懂过
反正只知道是一堆无法编译的CODE

若是可以
楼主能将你那大多数虚拟码
转成真正能运行的EXE 就比较具体
就是没那抽象慨念脑袋消化与吸收
呵呵
2008-2-7 13:18
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
这到是没错 不过根据你的意思 你在培养新人  提高他的积极性
看样子你是抓一个就不肯放过了  也好
2008-2-7 15:13
0
雪    币: 241
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
顶楼主,代不代码无所谓,关键是要把原理讲清楚。。。。。感谢楼主这样的愿意分享经验的兄弟。。。。。这年头,愿意共享和指导他人的人越来越少了。。。。
2008-2-7 16:30
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
新年好!!!
2008-2-7 18:27
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
向zhuwg学习,学习他实事求是、永求上进的精神,坛主的思想境界又是如此之高,更是让新手们在学习中充满了信心。在这里我也向大家拜个年,祝大家在新的一年里事业有成、身体健康!
2008-2-7 21:59
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
楼主,你忘了最重要的问题!
现在是双核和64的天下了,
就算你CLI,也是有蓝屏的可能的!!除非你在每个CPU的线程中CLI一下

要说到终极ANTI,我的方法是分页上动手脚,或者在驱动中退到实模式去解码。。。。。。
前提是你必须了解64位CPU的分页机制,AMD和INTER的还不一样~漫漫找资料吧
2008-2-7 22:45
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
23
.不懂,向大牛学习。双核和64位的东西。还靠大牛指点。
2008-2-8 11:03
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
不错,新年好,文章也写得不错,学习了,谢谢。
2008-2-8 12:07
0
雪    币: 134
活跃值: (84)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
25
建议给这篇文章“加精”!!!!!!!!!!!!!!!
2008-2-8 12:10
0
游客
登录 | 注册 方可回帖
返回
//