IDA密码算法匹配插件findcrypt2升级指南

IDA密码算法匹配插件findcrypt2升级指南

使用IDA Pro进行二进制逆向分析时,遇到最多的场景之一便是:初始化idb时需要对二进制做自动化加解密算法识别。 本篇的主要目的是,结合分析目前的密码识别插件的现况,自已动手实现功能更强的findcrypt3插件。

现状

IDA Pro在很早以前,就有一个findcrypt插件,这个插件的代码是公开的,地址是:http://www.hexblog.com/ida_pro/files/findcrypt.zip。此插件集合了当时比较常见的一些加解密与Hash算法的一些特征,使用了此插件的IDA Pro,能很好的识别这些算法,这个功能非常的实用。

经过一些年的发展,此插件推出了版本2,即:findcrypt2,同样,它的代码同样可以在其官网找到。地址是:http://www.hexblog.com/ida_pro/files/findcrypt2.zip

查看findcrypt2的代码,发现其最后修改时间是2006年的2月,距离现在2018年已经有十几个年头了。这里面涉及到的算法已经不能满足现如今的算法识别需求了!并且,代码在算法解析上有多处Bug,需要进行多处修缮才能在现在的系统上运行起来。

yara的流行,让算法识别有了新的玩法,一个典型的例子便是findcrypt-yara项目,它是一个基于yara规则实现的findcrypt插件,地址是:https://github.com/polymorf/findcrypt-yara。但这个插件的缺点比较明显:

  1. 规则编写繁琐。这点上很明显,针对不同的加解密与Hash算法,可以在其开发库(通常由C/C++语言)中直接提取后,加入到findcrypt2插件,即可集成进来,但yara是基于特定的匹配规则来识别文件的特征,每一个算法,都需要为其编写规则描述,这极大的增加了规则提取的工作量。

  2. 代码的粒度控制。很多情况下:例如二进制大小端的处理使用同一套识别特征,或者对代码进行解密处理后再应用识别算法,或者对不同的算法标识输出不同的参数,这些场景使用findcrypt2可以很好的完成工作,但findcrypt-yara却由于先天基因问题办不到。

基于这两个致命的原因,让我有了改造升级findcrypt2的想法,而不是动手扩充findcrypt-yara的规则。

动手

首先,确定实验环境是macOS 10.12系统,然后IDA Pro版本是众所周知的7.0版本。假设IDA Pro安装目录为/Applications/IDAPro7.0。将IDA的sdk解压到/Applications/IDAPro7.0/ida.app/Contents/MacOS/sdk/目录下。,将findcrypt2的代码下载下来,解压到/Applications/IDAPro7.0/ida.app/Contents/MacOS/sdk/plugins/findcrypt2目录下。然后在findcrypt2目录下打开命令行,执行如下命令:

 

$ make NDEBUG=1 __MAC__=1 $ make NDEBUG=1 __MAC__=1 __EA64__=1

这两条命令是分别生成32位与64位的插件。如果不出意外,此时是会编译出错的。

移植

查看makefile的内容,如下:

 

PROC=findcrypt O1=consts O2=sparse !include ..\plugin.mak # MAKEDEP dependency list ------------------ $(F)consts$(O) : $(I)llong.hpp $(I)pro.h consts.cpp findcrypt.hpp $(F)findcrypt$(O): $(I)area.hpp $(I)bytes.hpp $(I)fpro.h $(I)funcs.hpp \ $(I)help.h $(I)ida.hpp $(I)idp.hpp $(I)kernwin.hpp \ $(I)lines.hpp $(I)llong.hpp $(I)loader.hpp $(I)moves.hpp \ $(I)nalt.hpp $(I)name.hpp $(I)netnode.hpp $(I)pro.h \ $(I)segment.hpp $(I)sistack.hpp $(I)ua.hpp $(I)xref.hpp \ findcrypt.cpp findcrypt.hpp $(F)sparse$(O) : $(I)llong.hpp $(I)pro.h findcrypt.hpp sparse.cpp

找sdk/plugins目录下的任何其他的一个项目,对着进行修改后,代码如下:

 

PROC=findcrypt O1=consts O2=sparse _LINTFLA

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值