SMC之抛砖引玉(VC++6.0)

用C/C++实现SMC动态代码加密技术 摘要:所谓SMC(Self Modifying Code)技术,就是一种将可执行文件中的代码或数据进行加密,防止别人使用逆向工程工具(比如一些常见的反汇编工具)对程序进行静态分析的方法,只有程序运行时才对代码和数据进行解密,从而正常运行程序和访问数据。计算机病毒通常也会采用SMC技术动态修改内存中的可执行代码来达到变形或对代码加密的目的,从而躲过杀毒软件的查杀或者迷惑反病毒工作者对代码进行分析。由 阅读详情

 SMC是什么意思?它的英文名叫“Self Modifying Code”,顾名思义,就是“代码自修改”
先来个简单的,来改数据

代码:
CString cs1,cs2; 
cs1="123456789"; 
cs2="abcdefghi"; 
__asm 
{ 
  mov esi,cs1//A函数地址 
  mov edi,cs2//B函数地址 
  mov ecx,9h 
  rep movsb 
} 
MessageBox(cs2); 

通过MOVSB命令来改变数据
下面来看怎样代码:

代码:
void CSMCDlg::OnOK() 
{
  msgboxB();
  BOOL (CSMCDlg::*pa)(void)=&CSMCDlg::msgboxA;
  BOOL (CSMCDlg::*pb)(void)=&CSMCDlg::msgboxB;
     __asm
     {
       mov esi,pa
       mov edi,pb
      mov ecx,pb
      sub ecx,esi//长度要注意,这里因为A.B写得很近所以可以这样得出
      rep movsb
    }
  msgboxB();  
}
BOOL CSMCDlg::msgboxA()
{  
  ::MessageBox(m_hWnd,"123456789","LILI",0);
  return true;
}
BOOL CSMCDlg::msgboxB()
{
  ::MessageBox(m_hWnd,"987654321","LILI",0);
  return true;
}
#pragma comment(linker, "/SECTION:.text,ERW")//.text段一定要改成可读写

这就是SMC的基本原理,用一段代码来覆盖别一段代码(注意代码的长度)

先占个位,以后有什么新的关于SMC的心得就写在这里
当然也希望大家谈谈自己对SMC的心得!
-----------------------------------------------------------------------------
今天想了个笨办法,来得到函数的(机器码的)长度:

代码:
BOOL CSMCDlg::msgboxA()
{  
  ::MessageBox(m_hWnd,"123456789","LILI",0);
  return true;
}
int CSMCDlg::Aend()
{
  return 0;
}

.......................
其它代码
.........................

BOOL CSMCDlg::msgboxB()
{
  ::MessageBox(m_hWnd,"987654321","LILI",0);
  return true;
}
int CSMCDlg::Bend()
{
  return 1;
}

在一个函数(A)的结尾写一个无用的函数(Aend),并取得它的地址,两个地址相减,就得到了函数(A)的长度

代码:
void CSMCDlg::OnOK() 
{
  int Alen,Blen;
  msgboxB();
  BOOL (CSMCDlg::*pa)(void)=&CSMCDlg::msgboxA;
  BOOL (CSMCDlg::*pb)(void)=&CSMCDlg::msgboxB;
  int (CSMCDlg::*paend)(void)=&CSMCDlg::Aend;
  int (CSMCDlg::*pbend)(void)=&CSMCDlg::Bend;//这两个函数的代码不能一样,否则会被VC++优化,变成两个指针指向同一地址
  __asm
  {
    mov eax,pa
    mov ebx,paend
    sub ebx,eax
    mov Alen,ebx
    mov eax,pb
    mov ebx,pbend
    sub ebx,eax
    mov Blen,ebx
     mov esi,pa
     mov edi,pb
    mov ecx,Alen//这里长度应该不会有错误了的
    rep movsb
  }
  msgboxB();  
}

 

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

相关推荐

codesys【轴组】SM3_Robotics

附加轴: 获取附加轴坐标: SMC_POSINFO (STRUCT)enable不必再调用Power,但可以利用单一轴上电去激活轴组使能。暂停: MC_GroupInterrupt。a:轴坐标,c:笛卡尔坐标,v:坐标数组。点动: SMC_GroupJog2。移动,回零,错停,待命,停止,关闭。(轴上电)是批量调用。

cfqq1989的博客 1万+

__arm_smccc_smc

_arm_smccc_smc是一个用于ARM架构的汇编指令,它主要用于在不同的执行级别之间进行通信。具体来说,这个指令允许一个执行级别(例如EL1)通过发送一个请求到一个更高的执行级别(例如EL3),然后等待响应。需要注意的是,由于__arm_smccc_smc是一个底层的汇编指令,因此它的使用需要对ARM架构有深入的了解,并且需要确保你的代码符合相关的安全和兼容性要求。如果你不熟悉这些要求,那么最好避免直接使用这个指令,而是使用更高层次的编程接口来完成你的任务 #1 #2。

peterhunter0320的博客 2411

kernel通过psci的smc让从cpu boot的过程

kernel会调用smp_init 来让从核cpu 起来. void __init smp_init(void) { unsigned int cpu; idle_threads_init(); cpuhp_threads_init(); /* FIXME: This should be done in userspace --RR */

jason的笔记 1万+

OPTEE学习笔记 - AArch64 RPC(一)

https://cloud.tencent.com/developer/article/1611280 https://blog.csdn.net/magicse7en/article/details/115104303 https://chromium.googlesource.com/chromiumos/third_party/arm-trusted-firmware/+/v1.2/docs/interrupt-framework-design.md

orlando19860122的专栏 3816

【转】ATF中SMC深入理解

好久没有来看过ATF中的代码了,最近看到了关注很久公众号的文章,链接我放在文末。以前对于ATF中的SMC我只是知道是什么?以及是怎么用的,但是还是不够深入。这里来看一下。感谢前辈的文章:https://mp.weixin.qq.com/s/4QbBP6BlXxBWqgSUZHYFmw在文章开始之前提几个问题:Android手机中至少运行着几个操作系统OS?如何进入安全操作系统?异常等级和安全操作系统之间的关系?SMC调用的实质、约定及流程是什么?随着智能手机的普及,手机上数据的价值越来越高,如电子支付密码(

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 7460

SMCCC规范解析

本文档定义了在 Armv7 和 Armv8 架构中与安全监视器调用 (SMC) 和管理程序调用 (HVC) 指令一起使用的通用调用机制。SMC 指令用于生成同步异常,该异常由运行在 EL3 中的 Secure Monitor 代码处理。参数和返回值在寄存器中传递。由安全监视器处理后,由指令产生的调用可以传递到受信任的操作系统或安全软件堆栈中的某个其他实体。HVC 指令用于生成同步异常,该异常由运行在 EL2 中的管理程序处理。参数和返回值在寄存器中传递。管理程序还可以捕获由来宾操作系统(在 EL1 处)发出

baron-周贺贺-代码改变世界ctw 2746

29. secure world对smc请求的处理------monitor模式中的处理

历经一年多时间的系统整理合补充,《手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解》一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件,从用户空间到内核空间的顺序对TEE技术详细阐述,读者可从用户空间到TEE内核一步一步了解系统安全的所有内容,同时书中也提供了相关的示例代码,读者可根据自身实际需求开发TA。目前该书已在天猫、京东、当当同步...

shuaifengyun的专栏 9003

arm smc calling convention

arm smc 调用规范,arm 安全编程规范

arm64-reboot流程

ARM64-reboot流程 文章目录ARM64-reboot流程1. 用户态reboot 执行流程2. 内核系统调用3. PSCI 电源状态协调接口3.1 kernel发起的`PSCI`复位3.2 TrustZone的异常处理 1. 用户态reboot 执行流程 当命令行输入reboot命令时,busybox会vfork一个子进程,调用reboot函数: 此时,reboot函数进入到libc,libc里面封装了Linux的系统调用: 2. 内核系统调用 这样就进入到了Linux的系统调用部分的代码:校

weixin_38878510的博客 4651

CODESYS运动控制之SMC_Interpolator.docx

前面已经介绍了G代码格式、G代码编辑器的添加以及用G代码来描述一个图形的轨迹。G代码编写完成之后,怎么才能运行?这时就需要插补器。 决定坐标轴联动过程中各坐标轴的运动顺序、位移、方向和速度的协调过程即为插补。(interpolation),在CNC中,插补功能由软件或者软硬件结合来实现,称为插补器。(CNC是计算机数字控制机床(Computer numerical control,即数控机床)的简称,是一种由程序控制的自动化机床)。

ATF已到uboot和linux流程

附件是一个可编辑的visio文档。文档中给出了ARMv8冷启动后使用功能ATF功能引导uboot和linux的流程图。

TEE安全系统SMC深入理解

1、TEE背景在文章开始之前提几个问题:Android手机中至少运行着几个操作系统OS?如何进入安全操作系统?异常等级和安全操作系统之间的关系?SMC调用的实质、约定及流程是什么?随着智能手机的普及,手机上数据的价值越来越高,如电子支付密码(包括传统密码、指纹、人脸),带版权信息的数据等。为了进一步保护这些数据的安全,ARM提出了trustzone技术,其原理是将cpu的工作状态和其它相关硬件资源...

内核工匠 6100

使用DeepSeek、MCP和AKShare实现智能金融问答系统技术方案

DeepSeek是由深度求索公司开发的大规模语言模型,最新版本DeepSeek-V3采用混合专家(MoE)架构,拥有671B参数,激活37B参数,在多项基准测试中表现优异3。要使用DeepSeek的API服务:访问DeepSeek平台注册账号获取API Key(形如AKShare是基于Python的金融数据接口库,提供股票、基金、期货、宏观经济等领域的海量数据。主要特点包括:免费开源,数据源丰富支持多种数据格式(DataFrame/JSON)持续更新维护安装命令。

Kin 3174

SMP多核启动(二):PSCI

前面我们知道了SMP多核启动有两种方式,上一篇讲了spin-table。但是因为这个玩意只能启动从核,功能太单一了。现在社区几乎很少使用spin-table这种方式,取而代之的是psci,他不仅可以启动从处理器,还可以关闭,挂起等其他核操作,现在基本上arm64平台上使用多核启动方式都是psci。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 6413

新手如何结合pbootCMS和宝塔面板快速构建网站

摘要: 新手可通过pbootCMS(轻量CMS)和宝塔面板(可视化工具)快速搭建网站,无需命令行。步骤包括:1) 准备服务器(Linux/CentOS7.x)和域名;2) 安装宝塔面板并配置LNMP环境(PHP7.4+MySQL5.7);3) 创建网站目录,上传并解压pbootCMS源码,设置文件权限;4) 运行安装向导,填写数据库信息和管理员账号;5) 测试前台/后台功能,优化性能并绑定域名。全程约30-60分钟,宝塔简化运维,pbootCMS便于内容管理,适合零基础用户。注意定期更新和备份以保障安全。

qinzhenyan的博客 1643

别再手动测接口了!用Pytest+Requests+Allure搭建你的第一个自动化框架(附完整源码)

本文详细介绍了如何使用Pytest+Requests+Allure搭建Python接口自动化测试框架,涵盖环境准备、核心组件封装、测试用例设计、报告生成及CI/CD集成等关键步骤。通过实战案例和完整源码,帮助开发者快速构建高效的接口自动化测试解决方案,提升测试效率和质量。

weixin_42546508的博客 321

【DeepSeek】SMC 调用约定

EL3 (BL31)EL1/EL2 (调用者)EL3 (BL31)EL1/EL2 (调用者)fill:#333;important;important;fill:none;准备参数 x0=FuncID, x1-x7=Args1. 读取 x02. 解析服务类型3. 查表找到 Handler设置返回 x0=RetCode, x1-x4=Out检查 x0 判断结果SMC执行服务逻辑ERET核心规则:x0 是身份证:EL3 靠它识别你要干什么。x1-x7 是快递包:里面装着具体的参数。

ruofengdeyu的博客 363

CTFshow-pwn入门-前置基础pwn32-pwn34

CTFshow-pwn入门-前置基础pwn32-pwn34

你们de4月天的博客 1133

ARM64 SMP多核启动(下)- PSCI

ARM64 SMP多核启动(下)- PSCI

M120674的专栏 2582

《第二十二篇》Cross-Attention:注意力机制详解-代码实现和公式详解《二》

本文详细介绍了Cross-Attention的原理、公式和实现。Cross-Attention用于Transformer解码器和Encoder-Decoder结构,通过查询向量(Q)与键、值向量(K、V)的交互实现序列对齐。核心公式为softmax(QK^T/√d_k)V,其中Q来自Decoder,K、V来自Encoder。文章还给出了多头注意力机制公式和PyTorch实现代码,包括投影计算、注意力分数计算和输出处理。代码示例展示了如何构建一个完整的Cross-Attention模块,并演示了其在解码器查询

guoguozgw的博客 2213

CSI Tools 工具的安装 Intel 5300 + Ubuntu14.04

在 ubuntu14 系统上面安装 CSI Tools,2020最新教程,亲测可用,只要保证和我做法一致绝对可以安装好。

WS的小屋 1万+

18. OP-TEE中secur world和non-secure world的切换过程

历经一年多时间的系统整理合补充,《手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解》一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件,从用户空间到内核空间的顺序对TEE技术详细阐述,读者可从用户空间到TEE内核一步一步了解系统安全的所有内容,同时书中也提供了相关的示例代码,读者可根据自身实际需求开发TA。目前该书已在天猫、京东、当当同步...

shuaifengyun的专栏 1万+

《自然语言处理实战入门》文本分类 ---- 使用词向量与SVM 进行文本分类

文本分类用电脑对文本集(或其他实体或物件)按照一定的分类体系或标准进行自动分类标记。 它根据一个已经被标注的训练文档集合, 找到文档特征和文档类别之间的关系模型, 然后利用这种学习得到的关系模型对 新的文档进行类别判断 。文本分类从基于知识的方法逐渐转变为基于统计 和机器学习的方法。

shiter编写程序的艺术 2389

CODESYS学习笔记

记录一下学习CodeSys遇到的一些知识点。

joyopirate的博客 1万+

PCIE的MSI中断处理机制与优化策略

PCIe设备的。

xiaoheshang_123的博客 519

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: Asm的魅力(二)
下一篇: 增加区段的VC嵌汇编代码
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值