学黑客自己编写病毒(黑客学的是什么编程)

hacker|
115

如何自学成为一名黑客?

想要自学成为一名黑客的话,首先你有对网络以及精神设备是有基本掌握的能力,然后可以通过对应的编程代码像比如说,Java跟html都是一个学习的方向,当你对这些基础代码了解之后也是可以慢慢的去自学。

网络病毒是怎样制作出来的?

病毒是一种计算机指令代码。用户运行了这些代码后,或是出现一个小小的恶作剧,或是产生一些恶意的结果,如破坏系统文件造成系统无法运行、数据文件统统删除、硬件被破坏、非法侵入内部数据库偷窃或篡改数据等等。

病毒的制造者往往出于炫耀自己的编程能力与控制力、或是因自己计算机使用中不慎染毒而产生的报复心理制毒传毒。也有一些是因为保护自己的知识产权而制作的一个可控“定时炸弹”。如果用户正常使用将不会发作;如果用户不及时缴纳费用或者私下传播该应用软件,那么

“定时炸弹”就会被引爆。

最早由冯.诺伊曼提出了这种可能性,20世纪70年代中期有几位美国科普作家在他们的科幻小说中描写了计算机病毒。1983年11月3日Fred.Cohen博士研制出一种在运行过程中不断复制自身的破坏性程序,Len.Adleman将其命名为计算机病毒(Computer

Viruses)。

计算机和网络给我们生活提供的便利,远非计算机病毒带来的不便所能比拟的。只要我们了解病毒的传播方式,依靠专业人员的支持,就可以抵御病毒带来的各种危害,从而更为有效地利用计算机网络技术改进我们的生活。

常见病毒简介:

引导型-引导型病毒是感染磁盘引导区或主引导区的一类病毒,是感染率仅次于“宏病毒”的常见病毒。由于这类病毒感染引导区,当磁盘或硬盘在运行时,引发感染其他*.exe、*.com、*.386等计算机运行必备的命令程序,造成各种损害。常见的品种有tpvo/3783,Windows系统感染后会严重影响运行速度、某些功能无法执行,经过杀毒以后,必须重装Windows操作系统,才能正常运行。

文件型-文件型病毒是感染文件的一类病毒,是目前种类最多的一类病毒。黑客病毒Trojan.BO就属于这一类型。BO黑客病毒则利用通讯软件,通过网络非法进入他人的计算机系统,获取或篡改数据或者后台控制计算机。从而造成各种泄密、窃取事故。

混合型-这类病毒既感染命令文件、又感染磁盘引导区与主引导区。能破坏计算机主板芯片(BIOS)的CIH毁灭者病毒属于该类病毒。CIH是一个台湾大学生编写的一个病毒,当时他把它放置在大学的BBS站上,1998年传入大陆,发作的日期是每个月的26日。该病毒是第一个直接攻击计算机硬件的病毒,破坏性极强,发作时破坏计算机Flash

BIOS芯片中的系统程序,导致主板与硬盘数据的损坏。1999年4月26日,CIH病毒在中国、俄罗斯、韩国等地大规模发作,仅大陆就造成数十万计算机瘫痪,大量硬盘数据被破坏。

宏病毒-是一类主要感染WORD文档和文档模板等数据文件的病毒。宏病毒是使用某个应用程序自带的宏编程语言编写的病毒,目前国际上已发现三类宏病毒:感染WORD系统的WORD宏病毒、感染EXCEL系统的EXCEL宏病毒和感染Lotus

Ami

Pro的宏病毒。目前,人们所说的宏病毒主要指Word和Excel宏病毒。从96年下半年开始在我国广泛流行。如Tw

No-A、美丽杀、PaPa等。

与以往的病毒不同,宏病毒有以下特点:

①感染数据文件:宏病毒专门感染数据文件,彻底改变了人们的“数据文件不会传播病毒”的错误认识。

②多平台交叉感染:宏病毒冲破了以往病毒在单一平台上传播的局限,当WORD、EXCEL这类软件在不同平台(如WINDOWS、WINDOWS

NT、OS/2和MACINTOSH等)上运行时,会被宏病毒交叉感染。

③容易编写:以往病毒是以二进制的计算机机器码形式出现,而宏病毒则是以人们容易阅读的源代码形式出现,所以编写和修改宏病毒比以往病毒更容易。从96年底至今短短半年宏病毒种类已从三十多种急剧增加到1000多种。

④容易传播:别人送一篇文章或发一个E-mail(电子邮件)给你,如果它们带有病毒,只要你打开这些文件,你的计算机就会被宏病毒感染了。此后,你打开或新建文件都可能带上宏病毒,这导致了宏病毒的感染率非常高。

如何编译病毒

你这个问题提得有点过早,你先学好编程是怎么样的,在学怎样编病毒。或者到黑客基地下载个攻击工具,自己慢慢琢磨吧

怎么编程病毒?

搂主`你多C语言懂多少呀?通常只要在病毒代码的开始计算出delta offset,通过变址寻址的方式书写引用数据的汇编代码,即可保证病毒代码在运行时被正确重定位。假设ebp 包含了delta offset,使用如下变址寻址指令则可保证在运行时引用的数据地址是正确的:

;ebp 包含了delta offset 值

401000:

mov eax,dword ptr [ebp+0x402035]

402035:

db "hello world!",0

在书写源程序时可以采用符号来代替硬编码的地址值,上述的例子中给出的不过是编译器对符号进行地址替换后的结果。现在的问题就转换成如何获取delta offset的值了,显然:

call delta

delta:

pop ebp

sub ebp,offset delta

在运行时就动态计算出了delta offset 值,因为call要将其后的第一条指令的地址压入堆栈,因此pop ebp 执行完毕后ebp 中就是delta的运行时地址,减去delta的编译时地址“offset delta”就得到了delta offset 的值。除了用明显的call 指令外,还可以使用不那么明显的fstenv、fsave、fxsave、fnstenv等浮点环境保存指令进行,这些指令也都可以获取某条指令的运行时地址。以fnstenv 为例,该指令将最后执行的一条FPU 指令相关的协处理器的信息保存在指定的内存中fpu_addr:

fnop

call GetPhAddr

sub ebp,fpu_addr

GetPhAddr:

sub esp,16

fnstenv [esp-12]

pop ebp

add esp,12

ret

delta offset 也不一定非要放在ebp 中,只不过是ebp 作为栈帧指针一般过程都不将该寄存器用于其它用途,因此大部分病毒作者都习惯于将delta offset 保存在ebp 中,其实用其他寄存器也完全可以。

在优化过的病毒代码中并不经常直接使用上述直接计算delta offset 的代码,比如在Elkern开头写成了类似如下的代码:

call _start_ip

_start_ip:

pop ebp

;使用

call [ebp+addrOpenProcess-_start_ip]

addrOpenProcess dd 0

;而不是

call _start_ip

_start_ip:

pop ebp

sub ebp,_start_ip

call [ebp+addrOpenProcess]

为什么不采用第二种书写代码的方式?其原因在于尽管第一种格式在书写源码时显得比较罗嗦, 但是addrOpenProcess-_start_ip 是一个较小相对偏移值,一般不超过两个字节,因此生成的指令较短,而addrOpenProcess在32 Win32编译环境下一般是4 个字节的地址值,生成的指令也就较长。有时对病毒对大小要求很苛刻,更多时候也是为了显示其超俗的编程技巧,病毒作者大量采用这种优化,对这种优化原理感兴趣的读者请参阅Intel手册卷2中的指令格式说明。

API 函数地址的获取

在能够正确重定位之后,病毒就可以运行自己代码了。但是这还远远不够,要搜索文件、读写文件、进行进程枚举等操作总不能在有Win32 API 的情况下自己用汇编完全重新实现一套吧,那样的编码量过大而且兼容性很差。

Win9X/NT/2000/XP/2003系统都实现了同一套在各个不同的版本上都高度兼容的Win32 API,因此调用系统提供的Win32 API实现各种功能对病毒而言就是自然而然的事情了。所以接下来要解决的问题就是如何动态获取Win32 API的地址。最早的PE病毒采用的是预编码的方法,比如Windows 2000 中CreateFileA 的地址是0x7EE63260,那么就在病毒代码中使用call [7EE63260h]调用该API,但问题是不同的Windows 版本之间该API 的地址并不完全相同,使用该方法的病毒可能只能在Windows 2000的某个版本上运行。

因此病毒作者自然而然地回到PE结构上来探求解决方法,我们知道系统加载PE 文件的时候,可以将其引入的特定DLL 中函数的运行时地址填入PE的引入函数表中,那么系统是如何为PE引入表填入正确的函数地址的呢?答案是系统解析引入DLL 的导出函数表,然后根据名字或序号搜索到相应引出函数的的RVA(相对虚拟地址),然后再和模块在内存中的实际加载地址相加,就可以得到API 函数的运行时真正地址。在研究操作系统是如何实现动态PE文件链接的过程中,病毒作者找到了以下两种解决方案:

A)在感染PE 文件的时候,可以搜索宿主的函数引入表的相关地址,如果发现要使用的函数已经被引入,则将对该API 的调用指向该引入表函数地址,若未引入,则修改引入表增加该函数的引入表项,并将对该API 的调用指向新增加的引入函数地址。这样在宿主程序启动的时候,系统加载器已经把正确的API 函数地址填好了,病毒代码即可正确地直接调用该函数。

B)系统可以解析DLL 的导出表,自然病毒也可以通过这种手段从DLL 中获取所需要的API地址。要在运行时解析搜索DLL 的导出表,必须首先获取DLL 在内存中的真实加载地址,只有这样才能解析从PE 的头部信息中找到导出表的位置。应该首先解析哪个DLL 呢?我们知道Kernel32.DLL几乎在所有的Win32 进程中都要被加载,其中包含了大部分常用的API,特别是其中的LoadLibrary 和GetProcAddress 两个API可以获取任意DLL 中导出的任意函数,在迄今为止的所有Windows 平台上都是如此。只要获取了Kernel32.DLL在进程中加载的基址,然后解析Kernel32.DLL 的导出表获取常用的API 地址,如需要可进一步使用Kernel32.DLL 中的LoadLibrary 和GetProcAddress 两个API 更简单地获取任意其他DLL 中导出函数的地址并进行调用。

1条大神的评论

  • avatar
    访客 2022-09-28 下午 11:53:01

    以往的病毒不同,宏病毒有以下特点:①感染数据文件:宏病毒专门感染数据文件,彻底改变了人们的“数据文件不会传播病毒”的错误认识。②多平台交叉感染:宏病毒冲破了以往病毒在单一平台上传播的局限,当WORD、EXC

发表评论