科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道加密算法之BLOWFISH算法(2)

加密算法之BLOWFISH算法(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

BlowFish算法中,有一个核心加密函数:BF_En(后文详细介绍)。该函数输入64位信息,运算后, 以64位密文的形式输出。

作者:QQread 2007年12月21日

关键字: 加密软件 加密技术 加密 文件加密 文件夹加密 加密工具

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共6页)

二、BlowFish's CrackMe1分析

由于该CrackMe主要是测试你的密码学知识,所以没有在其他方面设关卡。为了减小文件体积,缩短大家下载的时间,用upx加了壳,直接用Trw2000的"PNewSec+Makepe"很方便地就能脱掉壳。

用常规的方法,很快找到下面关键比较处:

:004015D9 51                      push ecx

:004015DA 52                      push edx

:004015DB 6880894000              push 00408980

:004015E0 E8EBFAFFFF              call 004010D0      //BF_De(sn)

:004015E5 8B442464                mov eax, dword ptr [esp+64]

:004015E9 8B0DF0994000            mov ecx, dword ptr [004099F0]

:004015EF 83C41C                  add esp, 0000001C

:004015F2 3BC1                    cmp eax, ecx      //比较

:004015F4 7529                    jne 0040161F

:004015F6 8B4C244C                mov ecx, dword ptr [esp+4C]

:004015FA A1EC994000              mov eax, dword ptr [004099EC]

:004015FF 3BC8                    cmp ecx, eax      //比较

:00401601 751C                    jne 0040161F

:00401603 6A30                    push 00000030

  由于BlowFish算法加密,解密输出的信息都是64Bit的,所以要进行两次比较。

  我们既然知道了他对我们的sn进行的变换是BF_De,那么,很显然,我们要找到程序初始化key_pbox和key_sbox的地方。跟进4015E0的Call,找到key_pbox在408980处,下bpm,然后跟踪,分析,找到程序初始化key_pbox和key_sbox的地方,如下:

:004016C0 50                      push eax

* Possible StringData Ref from Data Obj ->"CrackingForFun"

                                |

:004016C1 6844804000              push 00408044

:004016C6 6880894000              push 00408980

:004016CB E860FAFFFF              call 00401130  //初始化Boxes

由此我们知道了BF_De(sn)的key是"CrackingForFun"。

问题的一半已经解决了。下面我们来看用来比较的另外的64Bit的数是从何而来。

  bpm 4099EC w

跟踪分析后,发现这个用来比较的数是由BF_En(ComputerID,key="ChinaCrackingGroup")生成。

  至此,我们可以写出注册机的算法:

  sn=BF_En((BF_En(ComputerID,key="ChinaCrackingGroup"),key="CrackingForFun")

  只要你编程够强,密码学也还过得去,写出这个东西的注册机就不是困难的事情了。

附:

ComputerID的产生

  如果你对这个CrackMe很有兴趣,还想研究一下他的ComputerID是如何产生的,也可以继续跟踪,分析,在这里,我给处我分析的结果:

      ComputerID=BF_En(0776f6c62h, 068736966h,key=PW_1)

  其中,PW_1就是你的Windows版本号,可以在“系统属性”里头看到,也就是注册表中的

H_L_M\Software\Microsoft\Windows\CurrentVersion 中的ProductId项。在我的机器上是:

      "25001-OEM-0080247-46673"

  注册机源码里头有一些语句没有派上用场,用“;”屏蔽了,如果你有兴趣,可以把前面的;号去掉然后把.data段里头的PW_1换成你机器的ComputerID,再按照程序中的说明自己修改一下源程序,用Masm32V6重新编译,直接按Generate,也能得到正确的序列号。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章