Win32病毒入门–ring3篇

Win32病毒入门–ring3篇

声明

一篇讲述病毒原理的理论性文章,任何人如果通过本文中讲述的技术或利用本文中的代码写出恶性病毒,造成的任何影响均与作者无关。

前言

病毒是什么?病毒就是一个具有一定生物病毒特性,可以进行传播、感染的程序。病毒同样是一个程序,只不过它经常做着一些正常程序不常做的事情而已,仅此而已。在这篇文章中我们将揭开病毒的神秘面纱,动手写一个病毒(当然这个病毒是不具有破坏力的,仅仅是一个良性病毒)。

如果你有一定的病毒编写基础,那么就此打住,这是一篇为对病毒编程完全没有概念的读者编写的,是一篇超级入门的文章 😛

这是一篇完整、详细的入门文章,但是如果读者对编程还没有什么认识我想也不可能顺利地读下去。本文要求读者:

1) 有基本的C/C++语言知识。因为文章中的很多结构的定义我使用的是C/C++的语法。

2) 有一定的汇编基础。在这篇文章中我们将使用FASM编译器,这个编译器对很多读者来说

可能很陌生,不过没关系,让我们一起来熟悉它 😛

3) 有文件格式的概念,知道一个可执行文件可以有ELF、MZ、LE、PE之分。

1. PE文件结构

————-

DOS下,可执行文件分为两种,一种是从CP/M继承来的COM小程序,另一种是EXE可执行文件,

我们称之为MZ文件。而Win32下,一种新的可执行文件可是取代了MZ文件,就是我们这一节

的主角 — PE文件。

PE(Portable Executable File Format)称为可移植执行文件格式,我们可以用如下的表

来描述一个PE文件: Continue reading “Win32病毒入门–ring3篇”

Rootkit FAQ(how to…)

常见问题解答 : 如何入门rootkit?

来源:rootkit.com 作者:Clandestiny 翻译:fqh

“Help!我是一名新手!我需要一款rootkit入侵朋友的机器…我想编写自己的rootkit…我想开始开发代码… 该从哪里入手?”

此类问题在rootkit.com上不断地出现,并且重复回答一些人问的相同问题浪费了大量时间,我想到我们应当编辑一个短小的文档来对它们进行一般性的叙述。下面的论述远非完整的,社区中有经验的人可以提建议来对它进行拓展。

你 想知道从哪里入门?好的,首先,如果你来到这里是为了寻找入侵你朋友机器的既成方法,你可来错了地方!Rootkit.com主要是一个知识性的网站,它 目的是提供一些有关rootkit开发的资料和相关编程的文章。另一方面,如果你是一名想学习如何编写自己的rootkit的新手,你需要一些如何入门的 建议,请接着阅读…不幸的是,rootkit开发和软件开发需要相当多你必须掌握的前提知识:

1. 首先,你得学习一种语言。C / C++最好的选择。不像其他语言,C具有内嵌汇编语言的能力。虽然大多数程序员极少使用到汇编语言,但是rootkit的开发有时需要汇编语言的灵活性, 所以x86汇编应当成为你的辅助编程语言。Randall Hyde的《Art Of Assembly》是汇编编程最好的参考资料之一。该书有印刷和电子书两种可获取的版本。
《Art of Assembly》 (下载版) 的下载网址是http://webster.cs.ucr.edu/AoA/DOS/

2. 你需要学习一些操作系统的理论。虽然大学的设计操作系统理论课程不是必需的,但阅读大学计算机学科教材的若干章节是有益的。特别是进程﹑线程﹑内存管理等知识,你得了解。
这方面很好的书籍有两本:
《Operating System Concepts》 ,Silberschatz, Galvin, 和 Gagne著
《Operating Systems》Deitel & Deitel著

3. 你得应用理论知识,理解真实世界中的操作系统比如windows实际上是如何工作的。虽然Windows不公开源代码,但是有很多牛人热衷于对系统内核工 作原理进行逆向分析,并公开了他们的发现。弄一本此类的书吧,比如Sven Schreiber写的《Undocumented Windows 2000 Secrets》 或者Prasad Dabak, Milind Borate,和 Sandeep Phadke写《Undocumented Windows NT》。

4. 如果你想着手开发内核rootkit,你还得学习如何编写内核模式驱动程序(KMD)。很不幸,互联网上关于内核编程的教程,适合初学者的很少。不过,Four-4写出了几篇很好的win32汇编版的教程,它们可在http://www.assembly-journal.com/sitemap.php获 取。除此之外,这方面的书籍还有一些:包括Art Baker 和Jerry Lozano蓍的《The Windows 2000 Device Driver Book》以及Walter Oney蓍的《Programming The Microsoft Windows Driver Model》。

5. 学习逆向代码分析的基础知识,也就是说对于没有源代码的二进制文件也能(通过逆向分析)了解到(代码功能等)有关信息。练习逆向分析软件的保护机制(序列 号,时间检验,脱壳,演示软件的功能限制等等)是发展这个技能的有趣方式。有很多程序员编写了训练用的小型程序。这些程序称之“crackmes”和” “reversemes”,我们可用它们来进行练习。在http://www.crackmes.dehttp://www.reversemes.de上收集了大量这样的小程序。http://www.woodmann.com上有大量高手写的关于逆向工程的资源。http://bib.universitas-virtualis.org/上也有若干优秀教程和文章。逆向分析同样需要一些特别的工具,包括反汇编器和调试器。IDA Pro是首选的反汇编器,SoftICE (内核调试器)和OllyDebug是可供使用的调试器。其他各式各样的此类工具可从http://protools.cjb.net获取

6. 最后,本站讨论了一些入侵工具和rootkit,如果你需要理解它们的资料,我推荐Greg Hoglund的《Exploiting Software》(本站就有)和《Shell Coder’s Handbook》。两者都会提供给你很好的入门知识。《Exploiting Software》有一章节介绍了基本的rootkit技术。一般,基于它们的数据拦截方法,Rootkit可以分为两种:要么是挂勾,要么是直接内核对 象操作(DKOM)。为了理解挂勾技术,以下链接可能对你有帮助。

API 检测技术(API Spying Techniques)
http://www.internals.com/articles/apispy/apispy.htm
挂勾高级函数(Advanced Function Hooking)
http://www.phrack.org/show.php?p=58&a=8
挂勾Windows NT服务表(Windows NT Service Table Hooking)
http://www.wiretapped.net/~fyre/sst.html
挂勾Windows NT系统服务(Hooking Windows NT System Services)
http://www.windowsitlibrary.com/Content/356/06/2.html
挂勾Windows NT系统调用(Windows NT System-Call Hooking)
http://www.ddj.com/articles/1997/9701/
为了理解DKOM,你可以阅读fuzen_op 写的FU rookit的源代码,它可在本站中获取