增加区段的VC嵌汇编代码

编译的特征与识别 0x00: 软件加壳就和通信加密一样,如ssl,是不想赤裸的站在别人面前,但通常情况下这只是增加了攻击的难度,并没有避免被脱掉衣服的情况。对于脱衣服的人来说,这衣服是纽扣的还是拉链的就特别的重要,纽扣还没见过能拉掉的的。但不管你怎么加壳,最终还是要被还原出来执行的。闲话不说,进入正题,先在此总结编译器的特征,编译器的特征就像是内衣最后的遮掩,把内衣完全那啥才叫脱完衣服。只有以编译器的特征才能识别 阅读详情

// 增加区段.cpp : Defines the entry point for the console application.
//


#include <windows.h>
#include <stdio.h>
#include <winbase.h>


bool OpenMyFile(char fileName[]);
LPVOID AddSection(LPVOID ImageBase,char sectionName[],DWORD SectionNumber);
DWORD ToAlign(DWORD SectionNumber,DWORD AlignSize); //取整 第二个参数表示以多少进行取整

DWORD addNumber;  //新区段的字节数
DWORD VAValue;    //保存原入口VA值
char chao[MAX_PATH]="MessageBoxA GetProAddress LoadLibraryA user32.dll kernel32.dll";
DWORD addRess;    //保存GETMODULEHANDL地址

int main(int argc, char* argv[])
{
  addRess  =(DWORD)GetProcAddress(GetModuleHandle("kernel32.dll"),"GetModuleHandleA");

  addNumber = 100;

  char fileName[] = "text.exe";   //欲测试的程序
  

  if(!OpenMyFile(fileName))
    printf("failed!!!/n");


  return 0;
}


bool OpenMyFile(char fileName[])
{

  HANDLE hFile;
  hFile = CreateFile(fileName,      //打开文件
          GENERIC_READ|GENERIC_WRITE,
          FILE_SHARE_READ|FILE_SHARE_WRITE,
          NULL,OPEN_EXISTING,
          FILE_ATTRIBUTE_NORMAL,
          NULL);
  if(!hFile)
    return false;
  
  DWORD fileSize = GetFileSize(hFile,NULL); //得到文件大小

  HANDLE hMap;
  hMap = CreateFileMapping(hFile,NULL,   
              PAGE_READWRITE,0,
              fileSize+0x2000,0);
  
  if(!hMap)
    return false;

  LPVOID ImageBase;
  ImageBase = MapViewOfFile(hMap,
              FILE_MAP_ALL_ACCESS,
              0,0,0);

  if(!ImageBase)
    return false;

  //判断是否为有效的PE文件
  PIMAGE_DOS_HEADER pDos;
  pDos = (PIMAGE_DOS_HEADER)ImageBase;
  if('ZM'!=pDos->e_magic)
    return false;

  PIMAGE_NT_HEADERS pNt;
  pNt = (PIMAGE_NT_HEADERS)((DWORD)ImageBase+pDos->e_lfanew);
  if('EP' !=pNt->Signature)
    return false;
  
  LPVOID newSectionName;   //指向新区段节名
  newSectionName = AddSection(ImageBase,".fan",addNumber);
  DWORD len = strlen(chao);   //把新区段要用到的字符COYP到其中
 _asm
 {
    mov esi,pNt
    mov ebx,dword ptr[esi+28h]   //入口RVA值 
    add ebx,dword ptr[esi+34h]   //与映像值相加
    mov VAValue,ebx
    mov eax,newSectionName
    push dword ptr[eax+0ch]     //得到新区段虚拟RVA
    pop dword ptr[esi+28h]       //修改到新入口
    mov ecx,dword ptr[esi+28h]   //把入口值加上字符串长度
    add ecx,len           //加上字符长度
    inc ecx
    add ecx,4           //加上原入口RVA值  
    add ecx,4           //加上GETMODULHAND地址的四个字节
    mov dword ptr[esi+28h],ecx
    lea esi,chao
    mov edi,dword ptr[eax+14h]
    add edi,ImageBase
    mov ecx,len
    inc ecx
    cld
    rep movs byte ptr[edi],byte ptr[esi]
    
    lea esi,addRess         //写入GETMODULEHANDLE的地址
    mov ecx,4
    cld
    rep movs byte ptr[edi],byte ptr[esi]

    lea esi,VAValue         //把原入口RVA值写到字符串后
    mov ecx,4
    cld
    rep movs byte ptr[edi],byte ptr[esi]
    
    lea esi,fan           //完成进入前原入口前的一些任务 如写病毒代码
    mov ecx,30h
    cld
    rep movs byte ptr[edi],byte ptr[esi]
    
 }

  UnmapViewOfFile(ImageBase);
  CloseHandle(hMap);
  CloseHandle(hFile);

  return true;
fan:
  //在此处填写要在程序执行前想执行的代码
 _asm
 {  
      call zhi   //占五个字节
zhi:  pop ebx    
    sub ebx,5  //此时EBX指向 CALL ZHI这条指令
    sub ebx,4  //此时EBX指向存放原入口的RVA值
    push ebx  
  
    push ebp
    mov ebp,esp
    sub esp,10h //存放要用到的数据
  
    sub ebx,4
    mov esi,ebx
    sub ebx,0Dh
    push ebx       //此时EBX指向KERNEL32 DLL字符串
    call dword ptr[esi]  //得到KERNEL32基址
      
    add esp,10h       //堆栈平衡  
    pop ebp 
    pop ebx
    jmp dword ptr[ebx]    //跳回到原程序入口
          
 }



}


LPVOID AddSection(LPVOID ImageBase,char sectionName[],DWORD SectionNumber)
{
    PIMAGE_NT_HEADERS pNt;
    DWORD fileAlign;   //文件对齐大小
    DWORD meryAlign;   //内存对齐大小
    LPVOID oldSection; //指向最后一个区段
    LPVOID newSection; //指向新的区段节表
    
  _asm
  {
    mov esi,ImageBase
    add esi,dword ptr[esi+3ch]
    mov pNt,esi  
    mov cx,word ptr[esi+6]
    movzx ecx,cx
    inc word ptr[esi+6]   //增加区段数目加一
    push dword ptr[esi+3ch]
    pop  fileAlign
    push dword ptr[esi+38h]
    pop meryAlign
    add esi,0F8h       //让ESI指向节表首地址
    mov eax,28h
    mov ebx,ecx
    imul ebx
    add esi,eax      //让ESI指向节表尾地址前
    mov newSection,esi
    sub esi,28h
    mov oldSection,esi
    
  }

   //以下是为新区段给名称
    int i=0;  
      char *newS =(char*)newSection;

    while(sectionName[i]!='/0')
     {    
      *newS=sectionName[i];
      ++newS;  
      ++i;
     }


    //增加新区段其它信息
 _asm
 {  
      mov esi,newSection
    push 0E00000E0h
    pop dword ptr[esi+24h]
    push SectionNumber    //新区段的内存大小
    pop dword ptr[esi+8h]
    
 }
    
  DWORD newFileSize =ToAlign(SectionNumber,fileAlign);  //新区段大小文件取整得到其文件大小
    _asm mov esi,newSection
  _asm mov eax,newFileSize
  _asm mov dword ptr[esi+10h],eax  //将新区段文件大小写到区段信息中

  //接下来就是写新区段的文件偏移和内存RVA值 这个值是根据原最后一个区段的信息算出的
_asm
{
    mov esi,oldSection
    mov ebx,dword ptr[esi+08h]    //虚拟大小
  add ebx,dword ptr[esi+0ch]  //虚拟偏移
    mov ecx,dword ptr[esi+10h]  //文件大小
  add ecx,dword ptr[esi+14h]  //文件偏移
  push fileAlign        //文件取整
  push ecx
  call ToAlign
  add esp,8
  mov esi,newSection
  mov dword ptr[esi+14h],eax 
  push meryAlign
  push ebx
  call ToAlign
  add esp,8
  mov dword ptr[esi+0ch],eax
//新区段RVA值加虚拟大小进行取整得新映像大小
  add eax,dword ptr[esi+08h]
  push meryAlign
  push eax
  call ToAlign
  add esp,8
  mov ebx,pNt
  mov dword ptr[ebx+50h],eax //修正映像大小
//新区段前SectionNumber个字节清零
  push dword ptr[esi+14h]
  pop edi
  add edi,ImageBase
  mov ecx,SectionNumber     //把新区段数据SectionNumber个字节置零
  xor eax,eax
  cld
  rep stos byte ptr[edi]
  mov eax,esi
  
}
       
}

//区段取整
DWORD ToAlign(DWORD SectionNumber,DWORD AlignSize)
{

  DWORD size = SectionNumber%AlignSize;      //取余
  DWORD size2 = SectionNumber/AlignSize;   //取整
  if(size == 0)  //如果余数为0,则证明已是其整数倍
    return SectionNumber;
  else
      return (++size2)*AlignSize;
 
}

 

VC实现SMC加密技术 前言SMC是一种局部代码加密技术,通过对一段代码进行加密来达到增加逆向工程难度或者免杀的目的。 编写SMC代码不是汇编语言的专利。——《加密与解密 第三版》 是的,SMC不仅能使用汇编上实现,还能很容易的使用VC实现,但是有一个比较致命缺陷:要精准的定位某个函数非常麻烦,所以我们就要以区块为加密的基础单位。预备知识需要一点点的PE结构基础就ok啦。加密算法既然是加密,就必然需要加密算法。Inte 阅读详情

相关推荐

UPX加壳脱壳实战:从工具使用到逆向分析入门

本文详细介绍了UPX加壳脱壳工具的实战应用,从工具获取、环境搭建到加壳脱壳操作,再到逆向分析入门。UPX作为一款高效的可执行文件压缩工具,不仅能显著减小程序体积,还能提供基础的代码保护功能。文章通过具体案例和命令演示,帮助读者快速掌握UPX的核心用法及逆向分析技巧。

weixin_42537919的博客 1085

X86逆向教程8:向程序中插入新区段

本节课我们不去破解程序,本节课学习给应用程序插入一些代码片段,这里我就插入一个弹窗喽,当然你也可以插入一段恶意代码,让使用的人中招,这里有很多原理性的东西我就不多罗嗦了毕竟是新手入门教程,如果想去了解工具的原理的话可以去系统学习PE文件结构的一些内容,好了废话不多说直接开搞。 -----------------------------------------------------------...

weixin_30906701的博客 458

EXE文件打包与加密全攻略:从Python到C++的跨平台保护方案

在软件分发过程中,打包与加密是保障程序可移植性和安全性的核心技术。打包技术通过将代码、解释器和依赖库整合为独立可执行文件,解决了运行环境缺失和依赖冲突问题,实现了跨平台部署。其原理在于创建自包含的应用程序环境,确保用户无需配置即可直接运行。代码混淆和加壳技术则在此基础上,通过重命名变量、压缩代码结构以及动态解密执行,大幅增加逆向工程难度,保护核心算法和商业逻辑。这些技术广泛应用于商业软件、内部工具和桌面应用开发中,尤其在Python的PyInstaller打包、PyArmor加密以及C++的Qt应用保护等场

weixin_33924312的博客 386

Pe 简单增加区段

Pe 简单增加区段 原由 这几天要写个Xor加密的壳子,原来已经写过2遍,但是源码丢掉了,只能很比较无奈的重新再写。但是要增加区段啊,用LordPE增加要修改一些相关的信息,不只是在区段的界面增加一个新的区段,就很麻烦。因此写一个增加区段的工具,很简单,供大家参考。 总共用了一天时间写完,速度还可以,因为毕竟有自己写的Pe库,就很方便。 代码 #include <stdio.h> #include <Windows.h> #include <winnt.h> #inclu

YoseZang的博客 1043

从逆向工程到软件防护:基于Exeinfo PE与OllyDbg的攻防实战

逆向工程是分析软件内部运行机制、理解程序逻辑的关键技术,其核心原理在于通过静态与动态分析手段,解析二进制可执行文件的结构与行为。在软件安全领域,逆向分析不仅用于漏洞挖掘,更是构建有效防护体系的技术基础。通过Exeinfo PE等工具进行静态特征分析(如识别编译器、探测保护壳、检查导入表),可以评估软件的暴露面;而OllyDbg等动态调试器则能深入跟踪程序执行流,揭示核心验证算法与潜在弱点。这种“以攻促防”的思维,其技术价值在于能将攻击手法转化为防护设计,例如针对静态分析采用代码混淆、字符串加密,针对动态调试

clhq71932的博客 507

VC代码实现CD的刻录源码

VC代码实现CD,DVD刻录的源代码,代码详尽清楚,用户可以清楚的了解如何控制刻录设备,如何进行刻录,比NERO简单,NERO用到的数据结构太过复杂

PE文件增加区段

该程序主要是对PE文件增加区段,如果对您有帮助请点一个赞,那方面写的不好的请直接评论批评,我一定会尽最大努力改正 #include <stdio.h> #include <stdlib.h> #include <windows.h> int main () { HANDLE hfile = CreateFileA( "C:\\Users\\486\\Desktop\\WP\\magic.exe", GENERIC_ALL, FILE_SHARE_R

weixin_52971884的博客 1088

postman响应体:“msg“: “请求缺失签名Sign“、 “msg“: “请求缺失时间戳“

请求标头有Sign、Timestamp,但是直接将网址复制到postman时,Headers没有自动生成这两个参数,所以运行时会报错。

m0_46862648的博客 1706

FPS游戏自瞄透视之模块动态加载

用OD附加游戏进程, 进入OD主界面以后, 我们CTRL+G 跳转到地址 00401000(系统默认通常游戏领空的起始地址)的时候发现了错误。   也就是说代码段不在这了, 那跑哪去了?   为什么会有这样的错误呢? 首先我们先来看看什么是基地址 我们随便找一个其他游戏CE附加     如上图,基地址  00D0DF1C  实际上是可以继续拆分,我们直接写00D0DF...

l198738655的博客 3047

AI Agent技术架构与规模化应用:2025年技术深度解析

2025年,AI Agent(人工智能智能体)迎来了规模化应用的拐点时刻。根据Gartner等权威机构预测,企业软件中整合自主型AI的比例将从2024年的不足1%跃升至2028年的33%。本文深入剖析AI Agent的核心技术架构,从规划模块、记忆模块、工具调用模块到底层实现原理,结合Python和Go语言的实际代码示例,全面阐述AI Agent的技术实现路径。同时,本文探讨多智能体协作系统、企业级部署架构以及未来的技术演进方向,为开发者和技术决策者提供系统性的技术参考。关键词:AI Agent、大语言模型

shao.bing的专栏 1348

算法竞赛入门到进阶 --- 完整学习路线(含知识点讲解)

前言: 咳咳,接触算法竞赛也有一年了,却从来都没有进行过一次系统的学习,稀里糊涂的就这么搞了半年,如今,我决定认认真真的进行一次系统的复盘。嗯嗯,先把大体路线列出来,然后往后每天搞几篇,可能大三能完成,可能永远也不能写完这些,我只能慢慢来,一起共勉吧。冲了!(主要是太菜了,不系统学习下,怕是铜牌都拿不到呀!) 算法竞赛入门到进阶一、sort函数自定义排序二、c++容器的使用1.vector动态数组2.stack栈3.queue队列4.list链表5.set集合6.map映射三、二进制子集生成四、bfs.

qq_43514659的博客 2万+

任鸟飞逆向,FPS游戏(UE4,U3D引擎)方框绘制,骨骼透视,自瞄.子弹追踪.无后BT功能的原理 和反外挂策略

几何基础,多种矩阵的学习,世界坐标到屏幕坐标的两种转换方法,三种绘制方框的原理,hookd3d,hookopengl,骨骼透视,主播的秘密,FPS各种BT功能的原理 和检测对抗原理,UE4引擎,U3D引擎的逆向 和实战。 游戏安全的建议策略方针 , 反外挂的思路和检测对抗 等等.

任鸟飞2217777779的博客 2万+

S7-1200控制S120变频器

②:硬件目录下,添加实物S120设备进行组态(其它现场设备--PROFINET IO--DRIVES......②:双击S120进行IP地址和设备名称设置(注:此处要与STATER软件设置S120一致)M10.0接通时,电机开始运行,M10.0断开,电机停止,调试完成。①:将S7-1200与S120进行通讯连线。④:STATER软件下设置与组态一致的报文。①:点击添加新设备,按实物进行设备组态。②:打开OB1,编写启动停止程序。①:查看S120报文地址。②:模块下添加DO矢量。③:子模块下添加报文。

weixin_38261173的博客 4868

OllyDBG 入门系列(七)-汇编功能

 OllyDBG 入门系列(七)-汇编功能今天我们的目标程序是 MyUninstaller 1.34 版。这是一个非常小的程序卸载工具,VC6编写,大小只有61K。我拿到的这个是上次闪电狼兄弟给我的,附带在里面的简体中文语言文件是由六芒星制作的。这个程序有个毛病:就是在列出的可卸载程序上双击查看属性时,弹出的属性窗口的字体非常难看,应该就是系统字体(SYSTEM_FONT):screen.widt

Welcom to zougangx's blog 718

word 2013 长篇文档排版案例教程

office 2013 制作长文格式模板

1万+

SAP MTO模式实战:从库存管理到成本核算的深度解析

本文深入解析SAP MTO(Make-to-Order)模式在制造业中的应用,从库存管理到成本核算的全流程实战技巧。通过对比MTS模式,详细阐述MTO的核心逻辑、库存管理配置、成本核算路径及与PP模块的集成要点,帮助企业实现按单生产的高效管理,优化库存水平和资金占用。

weixin_29204205的博客 709

加密与解密工具大礼包 2010年新品

经常逆向工程发现 应该搞个加密与解密的工具包,用起来也方便些。找了一下 果然有一个。如果不想下载 可以直接这里购买http://item.taobao.com/auction/item_detail-0db1-9b8c87022ec55fb3a0c6c8041695a730.htm里面包含如下软件:├─PE 工具│├─PE资源││├─资源编辑│││├─eXeScope│││├─reshac...

测试 588

物联网设备数据是如何流转的:基于EMQX与TDengine的前后端分离项目实践

背景 在我写了TDengine极简实战:从采集到入库,从前端到后端,体验物联网设备数据流转这篇文章后,不少读者朋友评论、私信说可不可以提供代码参考学习下,那必须是可以的。那篇文章主要介绍了数据采集、数据传输、数据转发、数据解析、数据存储、数据查询、数据呈现、数据导出、消息推送的物联网设备数据流程过程,作为体验 TDengine 的极简实战项目,没引入过多的业务设计(复杂功能)以及异步解耦设计(消息中间件)。 在整理代码的过程中,我发现虽然整个项目并不复杂,但是涉及到的技术点较多,有必要对关键的组件进行说明

Heartsuit的博客 9412

IDA Pro逆向工程实战:核心操作、快捷键与效率提升技巧

逆向工程是软件安全分析、漏洞挖掘和恶意代码研究的基础技术,其核心在于深入理解程序底层逻辑与执行原理。通过静态分析工具对二进制代码进行反汇编与控制流还原,工程师能够洞察软件内部工作机制,识别潜在安全风险。这一技术对于漏洞挖掘、软件保护方案评估及恶意软件分析具有重要价值,广泛应用于安全研究、数字取证与软件兼容性测试等领域。在众多逆向工具中,IDA Pro凭借其强大的反汇编引擎、交叉引用分析与伪代码生成能力,成为从业者的首选。掌握其核心视图切换、交叉引用追踪与快捷键操作,能极大提升分析效率。本文聚焦于IDA Pr

weixin_34357887的博客 466

ROS与Qt5人机交互界面开发:添加rviz显示界面

最后,点击"完成"以创建新的Qt5应用程序项目。通过结合ROS和Qt5,您可以创建强大的人机交互界面,以实现丰富的机器人控制和数据可视化。在本教程中,我们将在主窗口中创建一个简单的按钮,用于启动rviz显示界面。在Qt Creator的槽函数编辑器中,为按钮添加一个槽函数,该函数将在单击按钮时调用。在上面的代码中,我们使用QProcess类启动了一个新的进程,并执行"rviz"命令来启动rviz显示界面。当您单击Qt5应用程序中的按钮时,将会启动一个新的rviz窗口,显示机器人数据的可视化界面。

CodeJolt的博客 2067

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VMProtect1.09分析

前言 有段时间没有写文章了,感觉快要断了线了,最近略有时间,闲暇又手痒抄起OllyDBG撸几发。这次把玩的对象是VMProtect的一个低级版本VMProtect1.09,只所以选择这个版本,还是因为想再回顾一遍VMProtect的核心脉络,减少高版本里夹带的各种垃圾指令干扰,也正好做一个记录,以前的分析都是随手分析完就算了,以后争取看过的东西都有个记录,方便自己和别人参考。 环境准备 VMProt

小蓝人敌法的专栏 1229

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OD Anti Debug 研究笔记

V盾网络验证 Anti Debug 1.V盾debug.exe 0044B77C . FF15 D0F24700 call dword ptr ds:[<&KERNEL32.CreateThre>; \CreateThread 创建线程api CreateThread (OD附加程序后 按T可以看到程序调用的线程地址) 001...

575

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

任鸟飞FPS类型游戏绘制和游戏安全,反外挂研究(二)

我们接着上文继续,如果没有看上文基础的同学建议先看完上文再继续本文章 本文章中均以单机游戏为例,每一种功能仅提供给网络安全工作者反外挂建议和安全对抗方法.请勿用作非法用途 另外提示对于此类游戏安全和反外挂研究,单机和网络游戏的原理毫无区别,区别仅仅在于个别数据网络验证部分 先整理cs1.6数据如下: (属于基础范畴,任鸟飞2020前80课即可轻松搞定这里不赘述) 矩阵地址 hl.exe+1820100//这个暂时先不要管,下文会有详细讲解的地方 高低朝向值 hl.exe+19E10C4 //从低到高 8

任鸟飞2217777779的博客 6502

C++实现PE文件添加新节区(加壳器)

最近潜心研究二进制安全,接触到了shellcode还有加壳脱壳有关的内容,于是心血来潮,想用自己不怎么成熟的编程功夫来实现写一个加壳器,并记录下代码编写过程中遇到的坑。 (以下文章中区段==节区) PE文件格式 pe(Portable Executable)其实就是在windows系统上的程序文件,这种文件格式在windows系列操作系统上基本上是通用的,我们平时见到的.exe、.dll、.obj...

Anansi的博客 3271
上一篇: SMC之抛砖引玉(VC++6.0)
下一篇: 软件保护壳技术专题 - 反调试器技术
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值