打造VC++伪装器

经典VC++开发实战宝典PDF:维护、学习与现代化应用指南 在软件开发领域,遗留系统维护和底层技术原理理解是持续存在的核心需求。以经典的《Visual C++开发实战宝典》为例,其PDF版本的热门搜索背后,反映了工程师对特定技术栈(如MFC框架、Windows GUI编程)的深度依赖和学习需求。理解其原理,如消息映射机制和文档-视图架构,不仅能帮助高效维护基于Visual C++ 6.0的遗留系统,解决诸如“microsoft visual c++ redistributable”缺失等运行时环境问题,更能深刻理解现代事件驱动和MVC设计模式的渊源。这种从经典框架中 阅读详情
打造VC++伪装器
                           楚茗
前几天,在一个黑客站点看到VC++伪装器这么一个小工具,突然感到很眼熟。对了,以前在看雪学院(www.pediy.com)看到过欺骗查壳工具的文章,赶紧去复习复习。当然了,现在我已经复习好了,这里我就告诉大家原理和带大家一起用VC打造一个简单的VC++伪装器。
首先我们简单的认识一下PE文件。因为只有对PE文件很熟悉的情况下读本文才会更加游刃有余。PE 的意思就是 Portable Executable(可移植的执行体)。它是 Win32环境自身所带的执行体文件格式。大概的PE文件格式如下:
DOS MZ header―所有PE文件(甚至32位的DLLs)必须以一个简单的DOS MZ header开始
DOS stub-DOS stub实际上是个有效的EXE,大多数情况下它是由汇编器/编译器自动生成
PE header-PE header是PE相关结构 IMAGE_NT_HEADERS的简称
Section table-IMAGE_SECTION_HEADER
Section 1-PE文件的真正内容划分成块,称之为sections,同sections中的代码/数据属性相同
Section 2
Section ...
Section n
    
上面的表格就是PE文件的物理结构。还有VC程序的基地址是 0x400000,也就是说exe程序运行时会被加载内存的该地址处。PE的各种结构中,涉及到很多地址,偏移。有些是指在文件中的偏移,有的是指在内存中的偏移。一定要搞清楚了才能真正的理解本文,当然套用其中的一些代码也是可以的。关于PE文件的更多知识,大家可以到看雪学院的论坛上查找。我在说下去就太多了。
其实大家在作木马免杀时使用到的修改程序入口点和添加花指令技术就是手工伪造。呵呵,我们这里就是用程序来做罢了。基本思路相同,就是先增加一个节写入VC++入口处的特征代码,然后JMP到原程序的入口点,最后修改程序的入口点到我们增加的那个节处。侦壳工具检测到VC的特征代码就把壳识别为VC++了。木马免杀中用到的G!X Protector v1.2和木马彩衣等可能也是这个原理。
编程语言:VC++
侦壳工具:Peid
特征码提取工具:OllyDbg
首先我们用OD打开一个MFC程序,来到程序的入口点,代码如下:
地址      16进制             反汇编
00401D70   |  55                push ebp
00401D71   |.  8BEC              mov ebp,esp
00401D73   |.  6A FF               push -1
00401D75   |.  68 50354000         push VC++伪装.00403550
00401D7A   |.  68 F61E4000      push <jmp.&MSVCRT._except_handler>;  SE 句柄安装
00401D7F   |.  64:A1 00000000     mov eax,dword ptr fs:[0]
00401D85   |.  50                   push eax
00401D86   |.  64:8925 00000000    mov dword ptr fs:[0],esp
00401D8D   |.  83EC 68              sub esp,68
00401D90   |.  53                  push ebx
16进制表示的内容就是我们需要的特征码。下面我带大家分析一下主要代码,如下:
  CFile myFile;
  _IMAGE_DOS_HEADER  myDosHeader;
  _IMAGE_NT_HEADERS  myNtHeader;
  _IMAGE_SECTION_HEADER  mySectionHeader;
  int NumberOfSections,myBufSize;
  DWORD VOffset=0,VSize=0,ROffset=0,RSize=0,myVOffset=0,myROffset=0;
  DWORD OldEP,NewEP,Jmp;

    BYTE VCBuf[33]={//VC++的特征码
    0x55,0x8b,0xec,0x6a,0xff,0x68,0x50,0x35,0x40,0x00,
    0x68,0xF6,0xE4,0x00,0x00,0x64,0xa1,0x00,0x00,0x00,
    0x00,0x50,0x64,0x89,0x25,0x00,0x00,0x00,0x00,0x83,
    0xec,0x68,0x53};
 
  BYTE myBuf[100]={0};

  CString m_bakname=mumapath+".bak";
  ::CopyFile((LPCTSTR)mumapath,(LPCTSTR)m_bakname,FALSE);  //备份文件
  if (!myFile.Open((LPCTSTR)mumapath,CFile::modeReadWrite|CFile::typeBinary,NULL))
    return;
  //判断文件的有效性
  myFile.Read(&myDosHeader,sizeof(_IMAGE_DOS_HEADER));
  if (myDosHeader.e_magic!=IMAGE_DOS_SIGNATURE)
  {
    AfxMessageBox("不是有效的MZ文件!");
    return;
  }
  myFile.Seek(myDosHeader.e_lfanew,CFile::begin);
  myFile.Read(&myNtHeader,sizeof(_IMAGE_NT_HEADERS));
  if (myNtHeader.Signature!=IMAGE_NT_SIGNATURE)
  {
    AfxMessageBox("不是有效的PE文件!");
    return;
  }

  NumberOfSections=myNtHeader.FileHeader.NumberOfSections;
  myNtHeader.FileHeader.NumberOfSections++;//由于自定义了一个段
  myFile.Seek(myDosHeader.e_lfanew,CFile::begin);
  myFile.Write(&myNtHeader,sizeof(_IMAGE_NT_HEADERS));
  for (int i=0;i<NumberOfSections;i++)
  {
    myFile.Read(&mySectionHeader,sizeof(_IMAGE_SECTION_HEADER));
    if (mySectionHeader.VirtualAddress>VOffset)
    {
      VOffset=mySectionHeader.VirtualAddress;
      VSize=mySectionHeader.Misc.VirtualSize;
    }
    if (mySectionHeader.PointerToRawData>ROffset)
    {
      ROffset=mySectionHeader.PointerToRawData;
      RSize=mySectionHeader.SizeOfRawData;
    }
  }//得到最大的Offset
  while (myVOffset<VOffset+VSize)
  {
    myVOffset+=0x1000;
  }
  while (myROffset<ROffset+RSize)
  {
    myROffset+=0x200;
  }

  //为的定义的段随便起个段名
  for (i=0;i<8;i++)
      mySectionHeader.Name[i]=0;
  mySectionHeader.Name[0]=‘C‘;
  mySectionHeader.Name[1]=‘h‘;
  mySectionHeader.Name[2]=‘u‘;
  mySectionHeader.Name[3]=‘M‘;
  mySectionHeader.Name[3]=‘i‘;
  mySectionHeader.Name[3]=‘n‘;
  //增加一个新段
  mySectionHeader.Misc.VirtualSize=0x1000;
  mySectionHeader.VirtualAddress=myVOffset;
  mySectionHeader.SizeOfRawData=0x200;
  mySectionHeader.PointerToRawData=myROffset;
  mySectionHeader.Characteristics=0xE0000020;
  myFile.Write(&mySectionHeader,sizeof(_IMAGE_SECTION_HEADER));
   
  //修改入口点到新入口点
  OldEP=myNtHeader.OptionalHeader.AddressOfEntryPoint;//原入口点
  NewEP=myVOffset;
  myNtHeader.OptionalHeader.AddressOfEntryPoint=NewEP;
  myNtHeader.OptionalHeader.MajorLinkerVersion=6;
  myNtHeader.OptionalHeader.MinorLinkerVersion=0;  
  myNtHeader.OptionalHeader.SizeOfImage=myVOffset+0x1000;
  myFile.Seek(myDosHeader.e_lfanew,CFile::begin);
  myFile.Write(&myNtHeader,sizeof(_IMAGE_NT_HEADERS));
      
  //写入特征码
  myBufSize=sizeof(VCBuf);
  memcpy(myBuf,VCBuf,myBufSize);
  myFile.SetLength(myROffset+0x200);
  myFile.Seek(-0x200,CFile::end);
  myFile.Write(&myBuf,myBufSize);
  //跳回原入口点
  Jmp=OldEP-(NewEP+myBufSize)-5;
  BYTE JmpBuf=0xE9;
  myFile.Write(&JmpBuf,1);
  myFile.Write(&Jmp,sizeof(Jmp));

  AfxMessageBox("伪装成功!",MB_OK|MB_ICONINFORMATION,0);    

原理和代码就是这样。大家现在知道为什么要熟悉PE文件了?要正确的寻址当然要熟悉PE的结构了。如果看的不是很明白就去了解和熟悉PE文件格式吧。
我们拿delphi和VB写的程序做测试,修改后,用侦壳工具Peid看看,显示“Microsoft Visual C++”,成功!而且该伪装对一些压缩壳也有作用哦,UPX加过壳的作测试,也显示。根据上面的原理,你不是还可以作出伪装delphi等的伪装工具呢?赶快动手试试吧。 
告别误杀与龟速:Nuitka 编译打包实战,打造安全高效的 Python 可执行文件 本文详细介绍了如何通过Nuitka编译打包Python程序,解决PyInstaller常见的启动慢和杀毒软件误报问题。Nuitka将Python代码编译为C语言,生成高效的原生机器码,显著提升执行速度和安全性。文章包含环境配置、核心参数解析、实战案例及安全加固技巧,帮助开发者打造安全高效的Python可执行文件。 阅读详情

相关推荐

黑客风—代码雨.7z

使用最基础的C/C++知识以及简单的WinAPI函数(用于美化界面,就几个) 来制作的代码雨,修改代码后可以改变代码雨中的字符,数量,,长度以及速度(代码中有备注)。

C++装B用假黑客软件

C++装B用假黑客软件

pyz258的博客 7510

EXE伪装器

EXE伪装器EXE伪装器EXE伪装器EXE伪装器EXE伪装器EXE伪装器EXE伪装器EXE伪装器EXE伪装器EXE伪装器EXE伪装器EXE伪装器EXE伪装器EXE伪装器EXE伪装器EXE伪装器

C++巧妙利用虚函数访问私有成员

在C++中,利用C++编译器在实现虚函数调用时的某些伎俩,我们可以在类外直接调用到类的私有成员函数!!代码如下,代码中有详细的说明。 [cpp] view plaincopy //hacker.cpp: C++语言的黑客行为   #include    class Coo{   private:       int d; //特意将d放在

1958

程序伪装器

程序伪装器

黑客C++计算机破坏

该程序代码只有短短几行 可以实现计算机无限重启,且无法关闭。需要通过修改注册表来停止该程序,运行前一定要小心,尽量不要运行,否则计算机可能需要重装系统,给您带来不便

CefFlashBrowser:专为Flash内容打造的浏览器,让经典游戏和课件重获新生

还在为无法重温童年Flash游戏而烦恼吗?当主流浏览器纷纷放弃Flash支持,那些承载着无数回忆的经典内容仿佛被尘封在数字历史中。CefFlashBrowser正是为解决这一挑战而生的专用Flash浏览器,它内置最新Flash Player插件,完美支持网页Flash内容和本地SWF文件播放,更有专业的SOL存档管理系统,让你轻松管理游戏进度。这款工具不仅能让你的童年回忆重获新生,还能让教育机构的

gitblog_01101的博客 462

小小黑客代码

用于研究代码的编辑,可供参考哦,希望采纳

Flash内容重焕新生:一站式浏览器解决方案让经典永存

当现代浏览器纷纷告别Flash支持,那些承载着无数人童年回忆的经典游戏、教学课件和互动内容是否就此消失?别担心,一个专门为Flash内容打造的浏览器解决方案应运而生,让这些珍贵数字遗产在现代电脑上继续绽放光彩。 ## 三步开启你的Flash怀旧之旅 ### 第一步:获取并运行专属浏览器 从项目仓库克隆最新版本:`git clone https://gitcode.com/gh_mirrors/

gitblog_01084的博客 407

SAP产品合规(Product Compliance)管理—规格主数据 CG02/CG02WB

SAP产品合规(Product Compliance)管理—规格主数据概览 CG02/CG02WB

Lucas1211的博客 1430

Mac上快速部署DeepSeek模型:Ollama终端操作全指南

本文详细介绍了在Mac上使用Ollama终端快速部署DeepSeek模型的完整指南。从硬件要求、Ollama安装、模型下载运行,到高级配置、可视化界面及常见问题解决,提供了全流程操作步骤与优化技巧,帮助开发者高效搭建本地AI助手,实现稳定、私密的离线使用体验。

weixin_29251567的博客 551

YimMenu:如何打造你的终极GTA5安全游戏增强菜单

YimMenu是一款专为GTA5设计的开源游戏增强工具,致力于保护玩家免受公开崩溃攻击并显著提升游戏体验。这款免费的GTA5辅助菜单提供了全方位的安全防护机制和丰富的功能模块,让你在洛圣都的冒险更加安全顺畅。无论你是新手玩家还是资深游戏爱好者,YimMenu都能为你带来全新的游戏体验。 ## 🛡️ 为什么你需要GTA5安全增强工具? 在GTA5在线模式中,玩家们经常面临三大核心挑战: **

gitblog_00755的博客 682

告别手动复制粘贴!用Python脚本+pywinauto实现PC微信消息自动发送(附完整源码)

本文详细介绍了如何利用Python和pywinauto实现PC微信消息的自动化发送,告别繁琐的手动操作。从环境搭建、UI控件定位到构建健壮的发送流程,再到高级功能扩展和项目打包部署,全面解析了自动化办公的实现方案,显著提升工作效率。

weixin_30315723的博客 585

UE4SS终极配置指南:从原理到实战,打造稳定游戏模组环境

游戏模组开发与内存修改是游戏逆向工程和高级定制中的常见需求,其核心原理在于通过动态链接库注入技术,在不修改原始游戏文件的前提下,实现对游戏运行时内存的访问与逻辑干预。这项技术为游戏功能扩展、界面定制和机制重写提供了底层支持,具有极高的灵活性和强大的定制能力。在虚幻引擎生态中,UE4SS框架凭借其专为UE4/UE5设计的原生架构,成为实现此类功能的主流技术方案。它通过巧妙的DLL伪装机制(如xinput1_3.dll)实现自动注入,并围绕核心库、Lua脚本和配置文件构建了一套完整的工具链。理解其工作流和配置逻

474

光伏5G多合一融合终端|光伏多合一融合终端|光伏多合一群调群控网关|分布式光伏群控群调|光伏AGC/AVC系统这几者之间什么技术关系,多少钱一套预算?

RCL-0923光伏电站电压\功率自动控制装置(光伏AVC/AGC),能够接收调度DMS下发的调节目标(电压或无功),按既定策略的调节目标计算光伏电站无功功率出力需求,支持总有、无功,最大可调范围、逆变器个数等数据的上送,通过选择控制设备并进行无功功率出力分配,并将最终控制指令自动下达给被控制设备,最终实现光伏电站无功功率控制,实现无功功率、并网点电压的监测和控制,跟踪调度中心下发的电压或无功调节目标值,实现分布式电源的可观可测,可调可控。光伏5G多合一融合终端的功能:群调群控/AGC/AVC功能。

分布式DTU物联网DTU 2607

微信小程序 - 实现嵌套H5页面唤起微信支付的实现方案+完整流程源码,微信小程序webview(H5页面)调用微信小程序支付,嵌套h5页面怎么实现小程序支付(Vue2/3移动端H5网页、公众号网页等)

h5嵌入微信小程序微信支付,H5网页嵌入到微信小程序内如何支付,微信小程序webview组件交互,内联h5页面并网页实现微信支付,微信H5页面实现微信小程序支付,微信小程序嵌套webview实现小程序微信支付,小程序中内嵌H5网页支付怎么办,用网页的支付还是小程序的支付?支付没反应,支付报错怎么办,微信小程序内嵌h5,h5调用小程序支付功能解决方案,H5网页cors跨域,真机测试无法唤起支付,无法唤起支付,uniapp微信小程序,h5小程序调用微信支付,微信小程序内嵌H5页面,如何实现微信支付功能,微信小程

🏆 前端领域优质创作者 1万+

终极GTA5安全增强菜单:YimMenu完全使用指南

YimMenu是一款专为GTA5设计的开源游戏增强工具,它不仅提供了全面的游戏功能扩展,更重要的是内置了强大的安全防护机制,能够有效防御各种公开崩溃攻击,显著提升玩家的游戏体验。这款免费的游戏增强菜单让玩家在洛圣都的冒险更加安全顺畅,无论是单人模式探索还是在线模式游玩,YimMenu都能为你带来全新的游戏体验。 ## 快速开始:5分钟完成安装配置 想要体验YimMenu的强大功能?首先确保你的

gitblog_00418的博客 480

融合双主干网络提升YOLOv8性能一种基于SOTA思想的目标检测改进

YOLOv8采用了单一的主干网络进行特征提取,通常是基于CSPDarknet作为骨干网络,在目标检测过程中通过不同的卷积层提取不同尺度的信息。虽然这种设计在大多数应用场景下表现出色,但在面对复杂背景、细节丰富的物体或小物体检测时,YOLOv8有时难以保持良好的精度。在本文中,我们提出了一种基于双主干网络的YOLOv8改进方案,通过结合先进的SOTA思想,全面提升了YOLOv8在目标检测任务中的表现。双主干网络架构。

博客 1154

YimMenu终极指南:免费GTA5增强工具完全使用教程

YimMenu是一款专为GTA5设计的强大开源辅助工具,它不仅提供了全面的游戏增强功能,更重要的是内置了强大的安全防护机制,能够有效防御各种公开崩溃攻击,显著提升玩家的游戏体验。这款免费的游戏增强菜单让玩家在洛圣都的冒险更加安全顺畅,无论是单人模式探索还是在线模式游玩,YimMenu都能为你带来全新的游戏体验。 ## 🎯 YimMenu核心优势:为什么选择这款GTA5增强工具? YimMen

gitblog_00509的博客 366

60、磁悬浮主动隔振系统的LQR控制研究

本研究针对磁悬浮主动隔振系统,提出了一种结合ANN建模、LQR控制与MPGA优化的综合控制方案。通过建立系统的动力学与状态空间模型,利用混合训练算法的ANN精确描述MSVI的非线性和滞后特性,并设计基于最小力传递率的LQR控制器。为优化LQR的Q和R矩阵,引入多群体遗传算法(MPGA),有效克服传统GA的早熟收敛问题,提升搜索效率与控制性能。仿真结果表明,在单频、扫频、随机及冲击激励下,该方法显著降低传递力幅值,隔振效果远优于被动系统。研究验证了所提方法的有效性,为磁悬浮隔振技术的实际应用奠定了基础,并展望

linux6sysadmin的博客 127

【2026最新版】PCL点云处理算法汇总(C++长期更新版)

PCL学习目录。博客长期更新,最近一次更新时间为:2026年10月4日。

点云侠的博客 63万+

打造干净可靠的Windows镜像下载站:从校验、分发到安装全指南

系统镜像下载与安装历来是PC用户和企业IT运维的基础需求,而文件来源不清、校验信息缺失常导致安装后出现捆绑软件或系统异常。哈希校验(SHA1/SHA256)作为文件完整性验证的核心手段,配合官方直链与UUP dump合成等可靠来源,构成了干净镜像的信任基石。在实际操作中,ESD转ISO封装、Rufus/Ventoy启动盘制作、安装后WSL与Docker环境的快速搭建,都是高频搜索场景。本文从镜像站的资源筛选、校验发布、分发方案到系统安装与排错,完整梳理了一条可复制的可靠装机路径,帮助普通用户与站长在杂乱信息

weixin_29251567的博客 187

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

终极GTA5安全增强菜单:YimMenu完整使用指南

YimMenu是一款专为GTA5设计的开源游戏增强菜单,它不仅提供了丰富的游戏功能,更重要的是内置了强大的安全防护机制,能够有效防御各种公开崩溃攻击,显著提升玩家的游戏体验。这款免费的GTA5增强工具让玩家在洛圣都的冒险更加安全顺畅,无论是单人模式探索还是在线模式游玩,YimMenu都能为你带来全新的游戏体验。🚗💨 ## 📋 快速上手指南:5分钟开启你的增强之旅 想要体验YimMenu的

gitblog_01064的博客 464

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: DetectSandboxie[VB]
下一篇: 修改SSDT做简单的进程保护
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值