阅读:2794回复:19
大侠们,有谁知道?
大侠们,有谁知道cih1.2版本的开始代码
push ebp lea eax,[esp-04h*2] xor ebx,ebx xchg eax,fs:[ebx] 以及结束代码 xor ebx,ebx pop dword ptr fs:[ebx] pop eax pop ebp 到底是起什么作用的? 我把这段代码插入到pe文件中去,文件执行总是非法操作, 而且我看了一下堆栈,也不平衡。 |
|
沙发#
发布于:2002-08-07 10:23
那是SEH,结构化异常处理
你不用直接用那代码,只要学会用SEH就行了 :( :( :( |
|
|
板凳#
发布于:2002-08-07 13:02
谢谢,但是为了保证正常运行,是否要一个SEH?
还有,怎样给分? |
|
地板#
发布于:2002-08-07 15:10
谢谢,但是为了保证正常运行,是否要一个SEH? 如果确定不会出错,就不用,减小代码尺寸,但如果估计可能会出错,就用。 给分?看到你的主贴下面的给分按钮没有? |
|
|
地下室#
发布于:2002-08-07 15:22
谢谢花猫!
|
|
5楼#
发布于:2002-08-07 15:43
花猫,你具体分析一下啊,我也不懂啊!
|
|
|
6楼#
发布于:2002-08-07 16:19
花猫,你具体分析一下啊,我也不懂啊! 没什么分析的啊,这就是汇编形式的 try catch |
|
|
7楼#
发布于:2002-08-07 17:37
lea eax,[esp-04h*2]是干吗?
|
|
|
8楼#
发布于:2002-08-07 18:06
lea eax,[esp-04h*2]是干吗? 执行后eax=esp-8 |
|
|
9楼#
发布于:2002-08-08 15:57
倒......
|
|
10楼#
发布于:2002-08-08 23:14
[quote]lea eax,[esp-04h*2]是干吗? 执行后eax=esp-8 [/quote] 太简练了点。。。。。。。 |
|
|
11楼#
发布于:2002-08-09 09:49
大侠们,有谁知道cih1.2版本的开始代码 你楼掉一点内容,完整的CIH - SEH初始化应是: ============================================== MyVirusStart: push ebp ; ************************************* ; * Let\'s Modify Structured Exception * ; * Handing, Prevent Exception Error * ; * Occurrence, Especially in NT. * ; ************************************* lea eax, [esp-04h*2] xor ebx, ebx xchg eax, fs:[ebx] call @0 @0: pop ebx lea ecx, StopToRunVirusCode-@0[ebx] push ecx push eax =============================================== FS:0 处是当前线程的TEB (TIB),结构如下 (winnt.h) typedef struct _NT_TIB { struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList; PVOID StackBase; PVOID StackLimit; PVOID SubSystemTib; union { PVOID FiberData; DWORD Version; }; PVOID ArbitraryUserPointer; struct _NT_TIB *Self; } NT_TIB; typedef NT_TIB *PNT_TIB; EXCEPTION_REGISTRATION_RECORD 在C头文件中没有,它实际是汇编结构 EXCEPTION_REGISTRATION 的引用 (EXSUP.INC) _EXCEPTION_REGISTRATION struc prev dd ? // 前一个 RECORD ... handler dd ? // 当前exception_handler函数入口。 _EXCEPTION_REGISTRATION ends 然后我们再来看上面那段代码: 此时: esp + 00: eax // Previous Address of EXCEPT.._RECORD esp + 04: ecx // Address to StopToRunVirusCode esp + 08: ebp 对于NT,在后面修改IDT时,会发行异常,将导致控制权转移到StopToRunVirusCode,CIH便会自动放弃感染转而执行原PE程序。 对95,不会有异常发生,因而有无这段代码无所谓。 这种方式也可作为系统是否是NT的判断方式。 |
|
|
12楼#
发布于:2002-08-09 10:03
其实要判断是否9X,只要在最开始用
mov eax,[esp] test eax,80000000h jz IsNT 就行了 |
|
|
13楼#
发布于:2002-08-09 10:58
哇,茅塞顿开,真是高手呀!
|
|
14楼#
发布于:2002-08-09 12:06
哇,茅塞顿开,真是高手呀! 说Who呢? |
|
|
15楼#
发布于:2002-08-09 13:19
其实要判断是否9X,只要在最开始用 The 29a have some tips without API:GetVersionEx. |
|
|
16楼#
发布于:2002-08-09 14:12
[quote]其实要判断是否9X,只要在最开始用 The 29a have some tips without API:GetVersionEx. [/quote] 看过,但没仔细看 |
|
|
17楼#
发布于:2002-08-09 14:30
花猫,糊涂!
很久没有上来,发现你对他们太不负责了吧。 的确是自己构造异常处理,但应该让他们知道为什么要处理,还有这种解释“执行后eax=esp-8 ”也太那个了……………… |
|
|
18楼#
发布于:2002-08-09 15:36
花猫,糊涂! 没太多时间 现在大家都转到我的专门的病毒论坛了 看我的签名 |
|
|
19楼#
发布于:2002-10-14 15:04
esp-8是你的cih执行完后,把控制交回系统的EIP值。
|
|
|