首页 > 其他分享 >【加密与解密】第四章③

【加密与解密】第四章③

时间:2023-01-14 17:22:05浏览次数:43  
标签:语句 加密 jmp 解密 else 数组 跳转 识别 第四章

数据结构

主要是对局部变量,全局变量,数组等的识别。

1.局部变量

局部变量是函数内定义的变量,存放的内存区域称之为栈区。生命周期就是从函数进入到返回释放。


函数在入口处申请了预留栈空间和局部变量空间,也就是sub rsp,30h。局部变量空间在高地址。在应用程序被编译成release版本的时候,需要有更高的性能,所以在取局部变量的时候选用寄存器,当不够的时候再采用栈空间。

2.全局变量

全局变量一般会用固定的地址去访问全局变量。

3.数组

数组是相同数据类型的组合,以线性方式连续存储在内存中。数据是从低地址到高地址顺序排列的。
数组中有4个类型为int的集合。内存大小就是

比如下面这个例子可以见得一个字符4个字节,就可以推算出来数组中的位置

①数组寻址公式

编译器采用数组寻址公式来定位一个数组元素的地址。因此,掌握数组寻址公式,进行逆向分析的时候可以快速识别编译器访问的是哪个元素。一维数组寻址公式如下。

多维数组也适用。

可以这么理解第一个int【3】是指三个为一组的一维数组要排到第二个,再从第二排第一个开始定位。

②一维数组



可以看出,编译器访问数组的代码是利用数组寻址公式去访问的。当数组下标为常量的时候,公式可以直接计算出数组相对于数组首地址的偏移。

逆向的时候如果由以上特征,就怀疑是一个数组访问。

控制语句

主要介绍的是两种识别控制语句的方法,特征识别法和图形识别法。

1.if语句

真为非0,假为0.

特征识别:有一个jxx用于向下跳转,且跳转的目的if_end中没有jmp指令。
图形识别:虚线箭头表示条件跳转jxx,实线就是无条件跳转jmp。

2.if...else

比if语句多出一个else。当if表达式为真的时候就跳过else。


如果if成立就不jnz,接着运行,不成立就jnz,再跳出。
特征识别:有一个jxx用于向下跳转,且跳转的目的else中有jmp。else代码尾部没有jmp,else的代码会执行if_else_end代码。
图形识别:会有一个向下的虚线箭头,所以虚线箭头中会有一个向下的实线箭头。

3.if...else if...else语句

其实就是if...else多嵌套一层。

特征识别:多几个if中嵌套。
图形识别:如上。

4.switch...case语句

是比较常用的多分支结构。switch语句通常比if语句有更高的效率。编译器也有多种优化方案,比如switch分支小于6的时候直接用if...else语句实现,大于等于6的时候就会进行优化。


case表如下。

当大于等于6的时候,编译器会采用case表的方式实现switch语句。这样就可以避免使用if语句来提高性能。

这里有一个值的留意的地方,为什么要把argc减去1。答案就是argc减n为了switch表空闲空间减少,如下有个例子。

当case项较多的时候,编译器直接用if语句来实现switch语句。就有另外一个优化方案-判定树。将每一个case值作为一个节点,然后再节点中找到一个值,成立一个二叉平衡树。




这里已经将整个判断过程一分为二.

5.转移指令机器码的计算.

①call/jmp direct

例子如下

也就是在跳转的时候会先进行转移量的计算.

②call/jmp memory direct


在32位系统当中这里是绝对地址。然而在x64系统当中就是相对地址。

循环语句

1.do循环

先执行语句块,再执行表达式判断。

特征识别:有一个jxx指令用于向上跳转,且跳转的目的语句当中没有jxx指令。
图形识别:有一个向上的虚线箭头。

2.while循环

先进行表达式判断,再执行语句块

循环的特点是向低地址跳转。需要注意的是while比do多一次if判断
,循环上效率不如do。
特征识别:会先有一个jmp向上跳转的指令,然后下面有一个jxx跳转指令。
图形识别:因为有jmp向上跳转,实现箭头。还有一个向下的虚线箭头。

3.for循环

是由赋初值,循环条件,循环步长。

自增就是圈中的地方。
特征识别:多了一个jmp跳转用于自增。
图形识别:因为多了一个跳转,所以会比while循环多一个向下的箭头。

数学运算符

本节讲的是release版本中编译器优化过的四则运算。

1.整数加法和减法

①加法和减法

加法是add,减法是sub,但很多时候用lea来简化

②常量折叠

当出现两个以上常量运算的时候,编译器可以在编译期间计算出结果。这样在程序允许中就可以不用计算。

2.整数的乘法

有有符号(imul)无符号(mul)两种。周期较长,所以经常用lea比例因子寻址优化乘法指令。

3.整数的除法

除法指令周期较长所以一般用其他指令来代替除法指令。目前本人境界实在看不懂,待我重新看看书。

标签:语句,加密,jmp,解密,else,数组,跳转,识别,第四章
From: https://www.cnblogs.com/Corax0o0/p/17052114.html

相关文章

  • 背包加密
    背包加密算法背包加密算法是第一个通用公钥加密算法。它是由RalphMerkle和MertinHellman于1978年开发的。由于它是公钥密码术,因此需要两个不同的密钥。一个是用于加......
  • 这几类网站强烈建议启用 HTTPS 加密,以免信息泄露造成重大损失
    HTTPS其实是有两部分组成:HTTP+SSL/TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。......
  • MD5简述及常见解密网址推荐
    什么是md5MD5(Message-DigestAlgorithm5)(信息-摘要算法5),一种被广泛使用的[密码散列函数](https://baike.baidu.com/item/密码散列函数/14937715?fromModule=lemma_in......
  • 前端Aes-128-ecb加密解密
    安装:npminstallcrypto-js  注意密码需要16位importutf8from'crypto-js/enc-utf8';importaesfrom'crypto-js/aes';importecbfrom'crypto-js/mode......
  • AEAD加密算法简介
    copyfrom:https://ez.analog.com/ez-blogs/b/engineerzone-spotlight/posts/authenticated-encryption如果仅仅加密,显然只能保证confidentiality,不能证明message是否被......
  • 【课程作业】西瓜书 机器学习课后习题 : 第四章
    目录​​简介​​​​说明​​​​4.1​​​​4.2​​​​4.3​​​​结语​​简介Hello!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭昵称:......
  • 【加密与解密】第四章②
    4.条件指令设置条件指令的形式是SETccr/m8,其中r/M8是表示8位寄存器或者单字节内存单元。条件设置指令格局处理器定义的16种条件测试一些标志位。把结果记录到操作数当中......
  • 闲鱼猪手配置文件解密
    因为太闲,突然想起这个上古大坑了众所周知,有个很好用的Xposed模块叫闲鱼猪手,可惜不知道什么原因,作者已经跑路了,好在原作者是把配置文件放在Gitee上的,通过Commit记......
  • 第四章:视图层
    三板斧介绍"""HttpResponse 返回字符类型render 返回HTML页面,并且可以在返回浏览器之前给HTML文件传值redirect 重定向"""#视图函数必须要返回一个HttpResponse......
  • 【加密与解密】第四章①
    通过分析汇编代码来理解其代码功能,然后用高级语言重新描述这段代码,逆向分析原始软件的思路,这就是逆向工程。32位软件逆向技术启动函数首先被执行的是启动函数的相关代码......