re--SMC

参考:http://t.csdnimg.cn/g7fUY

参考:http://t.csdnimg.cn/qi3q5

简介

SMC,即Self Modifying Code,动态代码加密技术,指通过修改代码或数据,阻止别人直接静态分析,然后在动态运行程序时对代码进行解密,达到程序正常运行的效果。

SMC的实现方式有很多种,可以通过修改PE文件的Section Header、使用API Hook实现代码加密和解密、使用VMProtect等第三方加密工具等。

所谓SMC技术,就是一种将可执行文件中的代码或数据进行加密,防止别人使用逆向工程工具(比如一些常见的反汇编工具)对程序进行静态分析的方法,只有程序运行时才对代码和数据进行解密,从而正常运行程序和访问数据。计算机病毒通常也会采用SMC技术动态修改内存中的可执行代码来达到变形或对代码加密的目的,从而躲过杀毒软件的查杀或者迷惑反病毒工作者对代码进行分析。现在,很多加密软件(或者称为“壳”程序)为了防止Cracker(破解者)跟踪自己的代码,也采用了动态代码修改技术对自身代码进行保护。

  在自己的软件中使用SMC(代码自修改)技术可以极大地提高软件的安全性,保护私有数据和关键功能代码,对防止软件破解也可以起到很好的作用。但是,SMC技术需要直接读写对内存中的机器码,需要对汇编语言和机器码有相当的了解,具体的实现一般都是采用汇编语言。由于汇编语言晦涩难懂,不容易掌握,这使得很多想在自己的程序中使用SMC技术进行软件加密的C/C++程序员望而却步。从理论上讲,只要支持指针变量和内存直接访问,象C/C++这样的高级语言一样可以使用SMC技术,利用C/C++语言的一些特性,比如函数地址和变量地址直接访问等特性,实现了几种对运行中的代码和数据进行动态加密和解密的方法。首先是利用Windows可执行文件的结构特性,实现了一种对整个代码段进行动态加密解密的方法;接着又利用C/C++语言中函数名称就是函数地址的特性,实现了一种对函数整体进行加密解密的方法;最后采用在代码中插入特征代码序列,通过查找匹配特征代码序列定位代码的方式,实现了一种对任意代码片断进行解密解密的方法。

SMC一般有俩种破解方法

第一种是找到对代码或数据加密的函数后通过idapython写解密脚本。

第二种是动态调试到SMC解密结束的地方dump出来。

在计算机中,dump的中文意思为“转储”,一般指将数据导出、转存成文件或静态形式,即将动态(易失)的数据,保存为静态的数据(持久数据)。像程序这种本来就保存在存储介质(如硬盘)中的数据,是没有必要dump。

SMC的实现是需要对目标内存进行修改的,.text一般是没有写权限的。那么就需要拥有修改目标内存的权限:

在linux系统中,可以通过mprotect函数修改目标内存的权限
在Windows系统中,VirtualProtect函数实现内存权限的修改
因此也可以观察是否有这俩个函数来判断是否进行了SMC。 

大致思路---

有错误地址

点进去,看汇编

大量的数据,可以直接尝试下断点动态调试。用本地win就好

F8步过,进入数据处,这里会提示是否让IDA自己根据RIP生成代码,选no,因为这里IDA已经不能自主分辨主函数的结构了。

No了后,从上方的main头一直选到第一个retn处,按C后选择Force强制转换为代码,之后直接F5反编译就好了。

例题过几天补

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/12270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CANoe】CAPL中生成报告常用的测试函数

文章目录 一、常用函数1、测试标题、描述、Comment2、测试步骤3、延时4、报告中插入图片5、报告中插入窗口截图二、实例源码三、报告效果一、常用函数 1、测试标题、描述、Comment testCaseTitle("TC 3.1", "Test Case 3.1"); testCaseDescription

[动画详解]LeetCode151.翻转字符串里的单词

💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到动画详解LeetCode算法系列 用通俗易懂的动画让算法题不再神秘 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成…

pdf怎么标注红色方框?五种PDF标注红色方框方法

pdf怎么标注红色方框?在当今数字化时代,PDF文档已成为我们日常工作和学习中不可或缺的一部分。然而,如何在海量的PDF文件中快速、准确地标注出重要信息,让内容更加醒目呢?今天,我将向大家介绍五种PDF标注红…

DeepSort / Sort 区别

推荐两篇博文,详细介绍了deepsort的流程及代码大致讲解: https://blog.csdn.net/qq_48764574/article/details/138816891 https://zhuanlan.zhihu.com/p/196622890 DeepSort与Sort区别: 1、Sort 算法利用卡尔曼滤波算法预测检测框在下一帧的状态,将该状态与下一帧的检测结…

Context Pattern上下文模式

使用情景 全局使用的配置,数据库的连接。MVC中的跨层数据传输携带请求ID,用户信息等用户权限信息线程上下文 跨层数据共享 统一调用参数 携带多个事务需要处理的对象 携带用户信息 使用ThreadLocal

413 Request Entity Too Large

问题 平台上传文件接口报:413 Request Entity Too Large。 原因 从字面意思就能看出来,是上传文件过大导致的。 一般解决 一般情况下修改nginx配置文件中client_max_body_size参数的大小就行了。可以在http{ }中设置。也可以在server{ }中设置。还可…

如何写好设计文档

一、明确目的 在编写设计文档之前,首先要明确为什么需要写这份文档。设计文档是软件开发过程中的重要沟通工具,它有助于确保团队成员对项目有共同的理解,促进协作,便于变更管理,并提供历史记录。 二、编写方法 为目…

网络工程师----第二十八天

计算机基础 第五章:运输层 运输层的两个协议: 1、传输控制协议TCP: TCP最主要的特点: (1)TCP是面向连接的。应用程序在使用TCP协议之前,必须先建立连接。在传送数据完毕后,必须释放已经建立的TCP连接。…

Mimikatz安装 lsass进程 SAM NTML

目录 什么是Mimikatz Mimikatz在windows上安装及使用 mimkatz语法 lsass进程 SAM NTML 什么是Mimikatz Mimikatz是一款开源的Windows安全工具,由法国安全研究员Benjamin Delpy开发。它最初被设计为用于学习C语言和进行Windows安全性实验的工具。然而&#xf…

Linux第四节--常见的指令介绍集合(持续更新中)

点赞关注不迷路!本节涉及初识Linux第四节,主要为常见的几条指令介绍。 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 ✨ 加关注👀 期待与你共同进步! 1. more指令 语法:more [选项][文件]…

AuroraFOC使用指南一(STM32F405双路FOC)

一. 简介 哈喽,感谢各位选择AuroraFOC开发板,在这里将对其进行一个详细的介绍,方便大家使用。并且对提供的工程文件和上位机的操作也进行了详细的说明。 有什么疑问或者好的建议 可以微信联系: WU1356742146 最后再次感谢大家的支持。 Aur…

SpringBoot实现 QQ邮箱验证码

SpringBoot实现 QQ邮箱验证码 文章目录 SpringBoot实现 QQ邮箱验证码一、开通SMTP校验码1.登录qq邮箱2.开启SMTP服务3.发送手机短信4.得到授权码 二、回到spring项目中1.导入所需依赖2.验证码工具类3.具体实现逻辑(serviceimpl) 三、测试qq邮箱验证码 一、开通SMTP校验码 1.登…

数据不平衡:使用其他机器学习方案,修改算法

数据不平衡: 神经网络在面对不均衡数据时,是束手无策的。有些机器学习方法,像决策树就不会受到不均衡数据的影响。 修改算法: 梨是多数派,需要调整门槛位置,使得更偏向于苹果。只有非常置信的时候&#x…

15-ps命令

常用选项 aux axjf a:显示一个终端所有的进程u:显示进程的归属用户及内存使用情况x:显示没有关联控制终端j:显示进程归属的进程组idf:以ASCII码的形式显示出进程的层次关系 ps aux其中| more是只显示一部分内容&…

iOS——runtime

什么是runtime 我们都知道,将源代码转换为可执行的程序,通常要经过三个步骤:编译、链接、运行。 C 语言 作为一门静态类语言,在编译阶段就已经确定了所有变量的数据类型,同时也确定好了要调用的函数,以及函…

如何通过ETL工具对数据进行去重

在数据处理流程中,数据去重是一个至关重要的环节,它能够确保数据分析的准确性和效率。ETL(Extract, Transform, Load)工具作为数据集成的重要组成部分,提供了强大的功能来帮助用户实现数据的抽取、转换和加载&#xff…

sudo -u postgres -i 和 psql -U postgres 啥差别

sudo -u postgres -i 和 psql -U postgres 这两个命令在 Ubuntu 或其他 Linux 系统中用于与 PostgreSQL 数据库交互,但它们的作用和用途有所不同。 sudo -u postgres -i 这个命令使用 sudo 来以 postgres 用户的身份启动一个交互式 shell。-u postgres 指定了要使…

数据结构第一次实验

删除进程未完成 代码&#xff1a; #include "stdio.h" #include <stdlib.h> #include <conio.h> #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0// PCB struct pcb{// char name[10];// char state;// int super;int ntime;int …

(第17天)【leetcode题解】232、用栈实现队列 225、用队列实现栈

目录 232、用栈实现队列题目描述思路代码 225、用队列实现栈题目描述思路代码 232、用栈实现队列 题目描述 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a;…

高级查询(一)

解决需求&#xff1a;Excel都可以轻松搞定 分组查询原理&#xff1a; 语法&#xff1a; SELECT …<列名> FROM <表名> [WHERE<条件表达式> ] GROUP BY 参与分组的列 可以与 聚合函数作用的列 一块显示 注意 SELECT列表中只能包含&#xff1a; 1、被分…