基础知识常见算法识别

特征值识别

很多常见的算法,如AES、DES等,在运算过程中会使用一些常量,而为了提高运算效率,这些常量往往被硬编码在程序中

通过识别这些特征值,可以对算法进行一个大致判断

算法特征值(无特殊说明为十六进制)(备注)
TEA系列9e377b9(Delta值)
AES63 7c 77 7b f2 6b 6f c5 …(S盒)
AES52 09 6a d5 30 36 a5 38…(逆S盒)
DES3a 32 2a 22 1a 12 0a 02…(置换表)
DES39 31 29 21 19 11 09 01…(密钥变换数组PC-1)
DES0e 11 0b 18 01 05 03 1c…(密钥变换数组PC-2)
DES0e 04 0d 01 02 0f 0b 08…(S函数表格1)
BlowFish243f6a88 85a308d3 13198a2e 0370734(P数组)
MD567452301 efcdab89 98bbadcfe 10325476(寄存器初始值)
MD5d76aa478 e8c7bb756 24070db c1bdceee…(Ti数组常量)
SHA167452301 efcdab89 98badcfe 10325476 c3d2e1f0(寄存器初始值)
CRC3200000000 77073096 ee0e612c 990951ba(CRC表)
Base64字符串”ABCDEFGHIJKLMNNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"(字符串表)

通过这种简单的识别法,许多开发者为各种分析工具开发了常量查找插件,如IDA的FindCypt、PEiD的KANAL等
在IDA中,FindCrypt、PEiD和KANAL都是用于分析PE文件的插件。

FindCrypt插件可以识别PE文件中的加密算法。它可以识别多种常见的加密算法,包括RSA、AES、DES、RC4等。FindCrypt还可以识别一些自定义的加密算法。

PEiD插件可以显示PE文件的各种信息,包括文件头、节表、导入表、导出表等。PEiD还可以识别一些常见的PE文件保护技术,如壳、混淆等。

KANAL插件是PEiD的一个插件,用于分析PE文件中的加密算法。KANAL可以识别多种常见的加密算法,包括RSA、AES、DES、RC4等。KANAL还可以识别一些自定义的加密算法。

以下是这三个插件在IDA中的具体功能比较:

插件功能
FindCrypt识别PE文件中的加密算法
PEiD显示PE文件的各种信息,识别PE文件保护技术
KANAL分析PE文件中的加密算法

以下是这三个插件在IDA中的使用方法:

FindCrypt

  1. 在IDA中打开要分析的PE文件。
  2. 点击“Plugins”菜单,选择“FindCrypt”。
  3. FindCrypt会显示PE文件中找到的加密算法。

PEiD

  1. 在IDA中打开要分析的PE文件。
  2. 点击“Plugins”菜单,选择“PEiD”。
  3. PEiD会显示PE文件的各种信息。

KANAL

  1. 在IDA中打开要分析的PE文件。
  2. 点击“Plugins”菜单,选择“Krypto ANALyzer”。
  3. KANAL会显示PE文件中的加密算法。

使用注意事项

  • 这三个插件都是免费的,可以从网上下载
  • 这三个插件的使用方法比较简单,可以参考官方文档
  • 这三个插件只能识别已知的加密算法,对于未知的加密算法,这三个插件可能无法识别

除了上述功能之外,这三个插件在IDA中还有一些其他的功能:

  • FindCrypt插件可以将找到的加密算法添加到IDA的数据库中,方便以后的分析
  • PEiD插件可以将PE文件的信息导出到文本文件或HTML文件
  • KANAL插件可以将PE文件中的加密算法导出到文本文件或HTML文件

特征运算识别

当特征值不足以识别出算法时,深入二进制文件内部,通过分析程序是否使用了某些特征运算来推测程序是否使用了某些算法

算法特征运算(伪代码)(说明)
RC4i=(i+1)%256;j=(j+s[i])%256;swap(s[i],s[j]) ;t=(s[i]+s[j]%256; (密钥流生成)
RC4j=(j+s[i]+k[i])%256;swap(s[i],s[j]);循环256次(S盒变换)
Base64b1=c1>>2;b2=((c1&0x3)<<4)非c2>>4);b3=((c2&0xf)<<2)非(c3>>6);b4=c3&0x3f;(8位变6位)
TEA系列((x<<4)+kx)^ (y+sum) ^ ((y>>5)+ky)(轮函数)
MD5(X&Y)非((~X)&Z)(F函数) (X&Z)非(Y&( ~ Z))(G函数) X ^Y ^Z (H函数) Y ^(X非( ~ Z))(I函数)
AESx[j]=si%4] 循环4次 s[i][j]=x[j] 循环4次 整体循环4次(行位移)
DESL=R R=F(R,K)^ L(Feistel结构)

第三方库识别

为了提高编程效率,对于一些常用的算法,可以使用现成的库

对于动态链接库,函数名的符号信息可以被轻易地识别

而对于静态链接的第三方库来说,识别这些信息则比较困难

IDA识别第三方库

1.字符串识别
很多第三方库会将版本信息和该库使用的其他字符串(如报错信息等)以字符串的形式写入库中

在静态编译时,这些字符串会被一并放入二进制文件

通过寻找这些字符串,可以快速判断使用了哪些第三方库

2.函数签名识别

有时,确定了程序所使用的库后,还需要进一步识别具体的函数

之前简单介绍了如何使用IDA的签名识别功能识别C语言运行的函数库,实际上这个功能不仅能对C语言的运行库进行识别,IDA也可以通过对签名库快速匹配函数名,参数信息

IDA中自带了除C语言运行库外的常见库的签名文件

在IDA文件菜单中选择”Load File ->FLIRT Signature file"

在这里插入图片描述
如果IDA没有预置需要识别的库函数签名,那么可以在网上查找,如https://github.com/push0ebp/sig-database
https://github.com/Maktm/FLIRTDB

3.二进制比对识别
由于编译环境等各种情况的差异,签名有时无法完全匹配库函数

即使编译环境有一定区别,使用同一个库编译的二进制文件中的库函数也会存在许多相同之处

如果能够确定程序编写者使用了某个已知的库,并且我们能够获得一份含有符号且同样使用了该库的静态编译二进制文件,便可以利用二进制对比的方法来具体地确定每个函数

二进制对比得得常用工具是BinDiffhttps://www.zynamics.com/bindiff.html

这个没搞懂
这个工具bindiff

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

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

相关文章

双向链表(1)

前面说过在需要不停的找前驱时&#xff08;删除要找前驱等等&#xff09;&#xff0c;其时间复杂度很大。 这个图就是双向链表&#xff0c;相当于2个&#xff08;方向相反的&#xff09;单链表合起来 所以双向链表的结构设计就是比单链表多了一个指针域&#xff0c;以空间换时间…

Linux提权—服务漏洞,以MySQL-UDF提权为例

UDF(user defined function&#xff0c;用户自定义函数) 利用条件&#xff1a; 有对MySQL数据库进行创建&#xff0c;插入&#xff0c;删除的权限 secure_file_priv为空 利用过程 secure_file_priv的值为空或者是我们恰巧需要用到的目录&#xff0c;如下&#xff1a; 提权成…

Flink代码单词统计 ---批处理

flatMap&#xff1a;一对多转换操作&#xff0c;输入句子&#xff0c;输出分词后的每个词groupBy&#xff1a;按Key分组&#xff0c;0代表选择第1列作为Keysum&#xff1a;求和&#xff0c;1代表按照第2列进行累加print&#xff1a;打印最终结果 1.WordCount代码编写 需求&am…

Docker基础(一)

文章目录 1. 基础概念2. 安装docker3. docker常用命令3.1 帮助命令3.2 镜像命令3.3 容器命令3.4 其他命令 4. 使用案例 1. 基础概念 镜像&#xff08;Image&#xff09;&#xff1a;Docker 镜像&#xff08;Image&#xff09;&#xff0c;就相当于是一个 root 文件系统。比如官…

精酿啤酒:酵母的选择与发酵时间的影响

酵母是啤酒酿造过程中不可或缺的微生物&#xff0c;其选择和发酵时间对啤酒的口感、品质和风格产生着重要影响。Fendi Club啤酒在酵母的选择与发酵时间的控制方面有着与众不同的技巧和经验。 首先&#xff0c;酵母的选择对啤酒的发酵过程和品质重要。Fendi Club啤酒选用品质、高…

kubectl 命令行管理K8S

目录 陈述式资源管理方法 1.基本信息查看 查看版本信息 查看资源对象简写 查看集群信息 配置kubectl自动补全 node节点查看日志 查看 master 节点状态 查看命名空间 查看default命名空间的所有资源 创建命名空间yy 删除命名空间yy 在命名空间kube-public 创建副本…

vue2实现无感刷新token

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 &#x1f4d8; 引言&#xff1a; &#x1f4…

力扣用例题:2的幂

此题的解题方法在于根据用例调整代码 bool isPowerOfTwo(int n) {if(n1){return true;}if(n<0){return false;}while(n>2){if(n%21){return false;}nn/2; }if(n1){return false;}return true;}

Kubernetes基础(二十五)-Kubernetes GC原理

1 K8s 的垃圾回收策略 当给k8s一个资源对象设置OwnerReference的时候&#xff0c;删除该资源对象的owner, 该对象也会被连带删除。这个时候用的就是k8s的垃圾回收机制。 k8s目前支持三种回收策略&#xff1a; 1&#xff09;前台级联删除&#xff08;Foreground Cascading De…

129 Linux 系统编程7 ,make 的编写和解析

前文中&#xff0c;我们有多少个.c文件&#xff0c;就需要build 出来多少个.o文件 假设我们的项目很大&#xff0c;怎么管理这些 .c文件呢&#xff1f; 这里就要学习一个make文件的编写了。 makefile 本质上是一个脚本语言 脚本语言实际上就是将一系列命令放在一起执行 mak…

Java 存图方式

一、邻接矩阵 二、邻接表 以点为基本单位,尾插。 三、链式前向星 chain forward star 模拟链表,采用 头插 方法,以边为单位,记录每一条边的目标点。 head[i]:存储以结点 i 为起点的所有边的起始位置 edge[i]:存储第 i 条边的信息 1、初始化 定义三个数组: int m…

【前端素材】推荐优质后台管理系统Skydash平台模板(附源码)

一、需求分析 后台管理系统&#xff08;或称作管理后台、管理系统、后台管理平台&#xff09;是一种专门用于管理网站、应用程序或系统后台运营的软件系统。它通常由一系列功能模块组成&#xff0c;为管理员提供了管理、监控和控制网站或应用程序的各个方面的工具和界面。以下…