邪恶八进制信息安全团队技术讨论组's Archiver

金州 2005-12-19 03:16

[转载]SEH 於病毒的应用

文章作者:henrynote

SEH 於病毒的应用
前话:

由於小弟技术很烂,有错的地方,请多多指正,不要客气。谢谢啦…这篇文章是我的第一篇,可能会
错误百出,所以不要期待这是一篇好文章。希望能共同进步!

*这篇文章只出於研究病毒用途,请不要用此技术制造具有破坏性的病毒。谢谢!如有任何人用此技术
造成任何破坏,於本人无关!


简介:

  SEH 是什麽?不知道是什麽东东的话,就先去看看hume写的《SEH in ASM 的研究》或者
《Win32 Exception handling for assembler programmers by Jeremy Gordon》,再回来看这篇
烂文章吧!
  

1.为什麽要在病毒里使用seh呢?   

  任何程序都有可能有错误出现的,在我们的病毒里也是一样。病毒通常是用户在不知不觉下
做手脚,如果我们的病毒出了错,那麽就有可能弹出一个个讨厌的错误信息框,这样一来我们的病毒
就没有什麽意思了。不被用户察觉是十分重要的,所以我们要用SEH来处理我们病毒里有可能出现的错
误。这是 SEH 於病毒中的应用之一,相信你在看完成SEH 的文章後,应该知道怎样使用SEH去处理在
病毒里所产生的异常。

  在我们的病毒里还有一样很重要的是--避免被侦察到,不然我们的病毒在开始运行的时候就被
发现和杀掉,那麽我们的心血就泡汤了!所以我们要令我们的病毒不容易给 反病毒引擎 发现。

  当一个程序运行时,反病毒引擎会模拟程序的代码,如果它找到的疑点多的话,那麽这个程序
大多是被病毒感染了!这时反病毒引擎会做出适当的处理。所以我们可以在病毒里使用SEH设计一个陷阱
给AVs的Emulator。这样就可避免被捕!哈哈!




2.如何用SEH於你的病毒去搞定Emulator?


  o当!o当!入正题!既然它那麽喜欢要模拟我们的代码,我们就在病毒一开始就安装一个SEH,
该处理异常程序就是我们的病毒,然後制造一个异常。这样就进入异常处理程序(我们的病毒)继续执行
。而仿真器却会以为是这是个普通异常处理程序,但是有些AVs会在遇到错误代码之后试图继续模拟下一
个指令,那麽我们就让它进入一个死循环!哈哈!How? 看看下面的代码:

*部分代码是引用benny's polymorphic engine

start:    call Set_SEH    ;这句其实就是 push offset CONTINUE
          ;      JMP Set_SEH
CONTINUE:  mov esp, [esp+8]  ;恢复堆栈, 当一个异常产生时,系统会挂起程序,并呼叫处理程序,                  
                           ;传送处理程序的参数里,在[ESP+8]处储存的是旧的堆栈的地址
           

    push offset Start_Virus ;----_ 把Start_Virus 的地址压进堆栈里,当作返回地址
    ret      ;----  跟着来一个ret,跳到Start_Virus去,是不是很magic?  

   
  

Set_SEH:  sub edx, edx        ;Edx =0

    ;如果你使用的是masm,应该加下面一句,不然就会引起编译错误
    ;Assume fs:nothing

    push dword ptr fs:[edx]  ;把指去 _EXCEPTIONAL_REGISTRATION_RECORD 结构的指针压到堆栈
    mov fs:[edx], esp  ;安装一个seh 框架
    mov [edx],edx    ;注意这里引起一个异常,因为edx=0, 所以会引起一个读写内存冲突的异常,
         
          ;如果Emulator 不理会异常,不进入seh 处理程序(即 CONTINUE: ),继续模
          ;拟下个指令,也就是jmp start,那麽就会进入一个死循环,这可能会造成当
           jmp start       ;机


Start_Virus:   .....
    .....

自己试试看吧!
明白了吗?不明白?没关系,没有什麽人什麽都懂,写信给我,我们来讨论一下吧!我的qq:50527053,icq 72424549
email:henrynote@msn.com



*後话
  SEH 的应用很广,不只是在病毒里有用(废话),最常用的当然是用来处理在可预知的异常,SEH 技术也可以用於
  返跟踪等等!
  写这篇的文章的目的是为了和各位初学者分享学习结果,我也是初学者,希望能与大家一同进步。
  在这里要感谢很多人,所有帮助过我的朋友,有鼓励我写这篇文章的-老罗,还有很多大哥。

--------------------------------------------------------------------------------------------------------------
如需转载,请注明本文由henrynote着! Henry's WorkShop :[url]http://hackit2000.virtualave.net[/url]
Thankyou For Very Much !

页: [1]
© 1999-2008 EvilOctal Security Team