加密算法分析经验小结

加密算法分析经验小结

注:随便写点,供自己以后再分析算法时候看,免得走弯路

分析加密算法是一件很头大的事情,这里针对通用的加密算法,譬如MD5,AES之类,谈谈分析经验。

通用加密算法都不可小觑,其作者莫出科学家之外,就算不是科学家,搞出来那也成了科学家。这类算法由于浸泡了深厚的数学功力,在我等看来高深莫测。这里不说其原理等等,单表如何逆向分析并重写出来。

从反汇编角度,这类算法往往有以下特点:

1、代码很长,不下于1、2千行;

2、处理流程简单,往往一筒子到底,中间很少有跳转或者判断;

3、有很明显的密码表。比如 mov eax, dword ptr[401234 + esi]之类;

4、主要有2-4个关键函数,特点如上面列的3条,其中前面的函数往往用来初始化密钥,后面的函数才是加密数据。

如果打算把这类函数给分析完全,可以参考以下几点经验:

1、根据密码表找到该加密算法。这类算法密码表一般都是固定的,如果不固定,虽都可以改来改去,那也就不搞深了。利用密码表里的数据,GooGle一下基本就可以找到是什么算法;

2、算法流程很长,但实际上是有法可徇的。操作流程基本都重复。如果运气好,主加密流程或许是个循环,那就更好办。如果运气不好,是一筒子下去,中间连个跳转都没有,那说明作者写代码时候或许用了宏,既然用到宏,说明那么多代码其实都在重复一种或者二种操作。为什么可以这么说呢?因为我们碰到的加密算法基本都2、3千行代码,虽然说反汇编代码比高级语言源代码长,但是我们很少见到长达1千行高级语言的加密算法。因此可以肯定地说我们面对的数千行代码其实都在重复一、二种运算流程。

4、网上有一些分析算法的软件,可以搞过来分析一下,或许有所启发。不可尽信,也不可不信(跟心诚没关系,汗。。);

3、现在我们知道了算法的名称、来历,通过官方资料和自己分析,或许可以搞明白这个算法的流程了。

下面把这个令人头大的算法还原成我们可用的代码。大体一下几条思路:

1、如果确定了是某种算法,尽量找源代码。这就要求平时多搜集、留意,免得临时抱佛脚;

2、搞不到算法,但是可以搞到类似的算法代码,可以看看能不能根据该代码修改一下,搞成自己用的。比如你碰到一个变形DES算法,那么考虑一下能否用标准DES改写一下。当然这需要分析透彻代码和反汇编代码;

3、如果头脑够灵活,把代码上面说的那几个宏操作分析一下,自己写出来;

4、如果象我这种头脑不灵便,那就可以把代码一句一句翻译成高级语言。比如说:

        mov eax, ebx
        xor eax, dword ptr [401234 + esi]

    那就定义上变量 r_eax, r_ebx, r_esi 和密码表 T_401234,然后翻译成 r_eax = r_ebx ; r_eax ^= T_401234[r_esi];
    这意味着要把数千行代码都这么翻译过来。这种垒长城的工作即没有技术含量,也浪费时间。一般需要一天半写代码+半天调试。
    很不幸我到现在垒过2次长城了。

5、内嵌汇编。具体没用过,个人感觉是最省力高效的事情,可惜没用过;

6、打算自己写个此类软件,自动完成第4种方法(先汗一下自己。。。);

7、写代码时候整理好思路,选中一种方法走下去,别一会想修改人家代码,一会想自己重新写,那回死得很惨。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值