zhangyj
驱动牛犊
驱动牛犊
  • 注册日期2002-07-17
  • 最后登录2009-07-17
  • 粉丝0
  • 关注0
  • 积分103分
  • 威望50点
  • 贡献值1点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:2794回复:19

大侠们,有谁知道?

楼主#
更多 发布于:2002-08-06 23:32
大侠们,有谁知道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文件中去,文件执行总是非法操作,
而且我看了一下堆栈,也不平衡。
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-07 10:23
那是SEH,结构化异常处理
你不用直接用那代码,只要学会用SEH就行了 :( :( :(
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
zhangyj
驱动牛犊
驱动牛犊
  • 注册日期2002-07-17
  • 最后登录2009-07-17
  • 粉丝0
  • 关注0
  • 积分103分
  • 威望50点
  • 贡献值1点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-07 13:02
谢谢,但是为了保证正常运行,是否要一个SEH?

还有,怎样给分?
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-08-07 15:10
谢谢,但是为了保证正常运行,是否要一个SEH?

还有,怎样给分?

如果确定不会出错,就不用,减小代码尺寸,但如果估计可能会出错,就用。
给分?看到你的主贴下面的给分按钮没有?
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
zhangyj
驱动牛犊
驱动牛犊
  • 注册日期2002-07-17
  • 最后登录2009-07-17
  • 粉丝0
  • 关注0
  • 积分103分
  • 威望50点
  • 贡献值1点
  • 好评度9点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-07 15:22
谢谢花猫!
longge
驱动中牛
驱动中牛
  • 注册日期2002-07-10
  • 最后登录2005-06-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-08-07 15:43
花猫,你具体分析一下啊,我也不懂啊!
除了记忆什么都带不走; 除了足迹什么都留不下。
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-08-07 16:19
花猫,你具体分析一下啊,我也不懂啊!

没什么分析的啊,这就是汇编形式的
try catch
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
longge
驱动中牛
驱动中牛
  • 注册日期2002-07-10
  • 最后登录2005-06-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-08-07 17:37
lea eax,[esp-04h*2]是干吗?
除了记忆什么都带不走; 除了足迹什么都留不下。
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-08-07 18:06
lea eax,[esp-04h*2]是干吗?
 

执行后eax=esp-8
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
zhangyj
驱动牛犊
驱动牛犊
  • 注册日期2002-07-17
  • 最后登录2009-07-17
  • 粉丝0
  • 关注0
  • 积分103分
  • 威望50点
  • 贡献值1点
  • 好评度9点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-08-08 15:57
倒......
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-08-08 23:14
[quote]lea eax,[esp-04h*2]是干吗?
 

执行后eax=esp-8 [/quote]

太简练了点。。。。。。。

[color=red]大头鬼! :P[/color]
matt
驱动中牛
驱动中牛
  • 注册日期2001-07-24
  • 最后登录2016-02-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-08-09 09:49
大侠们,有谁知道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文件中去,文件执行总是非法操作,
而且我看了一下堆栈,也不平衡。



你楼掉一点内容,完整的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的判断方式。

System Internals http://sys.xiloo.com
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-08-09 10:03
其实要判断是否9X,只要在最开始用
mov eax,[esp]
test eax,80000000h
jz IsNT
就行了
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
zhangyj
驱动牛犊
驱动牛犊
  • 注册日期2002-07-17
  • 最后登录2009-07-17
  • 粉丝0
  • 关注0
  • 积分103分
  • 威望50点
  • 贡献值1点
  • 好评度9点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-08-09 10:58
哇,茅塞顿开,真是高手呀!
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-08-09 12:06
哇,茅塞顿开,真是高手呀!

说Who呢?
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
Nouk
驱动中牛
驱动中牛
  • 注册日期2001-08-22
  • 最后登录2006-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-08-09 13:19
其实要判断是否9X,只要在最开始用
mov eax,[esp]
test eax,80000000h
jz IsNT
就行了

The 29a have some tips without API:GetVersionEx.
Taiwan's Driver Developer
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-08-09 14:12
[quote]其实要判断是否9X,只要在最开始用
mov eax,[esp]
test eax,80000000h
jz IsNT
就行了

The 29a have some tips without API:GetVersionEx. [/quote]
看过,但没仔细看
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
flyfox
驱动中牛
驱动中牛
  • 注册日期2001-04-05
  • 最后登录2012-08-03
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望22点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-08-09 14:30
花猫,糊涂!
很久没有上来,发现你对他们太不负责了吧。
的确是自己构造异常处理,但应该让他们知道为什么要处理,还有这种解释“执行后eax=esp-8 ”也太那个了………………
一剑西来,天外飞仙
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-08-09 15:36
花猫,糊涂!
很久没有上来,发现你对他们太不负责了吧。
的确是自己构造异常处理,但应该让他们知道为什么要处理,还有这种解释“执行后eax=esp-8 ”也太那个了………………
 

没太多时间
现在大家都转到我的专门的病毒论坛了
看我的签名
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
ooze
驱动牛犊
驱动牛犊
  • 注册日期2001-09-26
  • 最后登录2004-03-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-10-14 15:04
esp-8是你的cih执行完后,把控制交回系统的EIP值。
Be a true hacker of Windows NT alike
游客

返回顶部