-
-
Ncrackme 2 的分析及总结
-
发表于:
2004-6-27 11:58
5426
-
( 有些功力高的大侠已经自己看懂了它的结构了 :) )
我简单的描述一下
NCrackme 2 是一个没有包含注册程序的 exe,它在运行的时候使用密钥对核心程序进行解密,从而得到一个已解密档案,它是一个动态连结库 dll 文件
核心程序 : file_r2.iot
通过运算得到 : ffe10.iot
在主要的 dll 序程里,含有一个很简单的欢迎信息。它被密钥加密,成为了 file_r2.iot
因为 dll 开头两个位是 MZ ( PE 格式的卷标 ) ,为了防止 file_r2.iot 被观察到它的密钥,所以加密的方法分成两部分
第一部分,使用一个密钥常数,对 dll 的每一个位进行 xor 运算,令到位的原始值被隐藏。由于密钥常数是一个 dword,所以加密时顺序使用了 dword 的每一个位 (dword 有 4 个位)。
第二部分,使用密钥常数对整个 dll 的所有位进行再排列。以密钥常数和一个大的质数 (prime number : 104723 ) 不断产生假随机数,把得出的假随机数作为每一个位的新位置,把所有位写入一个暂存里。
由于 dll 的元位失去了原始的位置,所以 dll 的结构很难被观察出来。开头的两个位也不再代表 MZ
这个 crackme 在运行时,取得了注册名称和序号 (不少于 8 个位) ,通过运算得到密钥,再对 file_r2.iot 进行解密动作。如果密钥是正确的话,便会得到一个正确的 dll ,被 loadlibrary 成功加载,运行注册程序。
这个 crackme 的特点 :
- 不可爆破
- 不可从解密程序中观察到正确的序号
- 不需要使用加壳保护来防止静态分析,因为它不怕被 cracker 进行分析
这个 crackme 的弱点 :
- 密钥是常数,所以公开的序号可以被计算出密钥值,以生产所有序号
- 当序号不正确时, loadlibrary 会发生不温和的错误,没有良好和礼貌的警告信息
- 加密程序有漏洞,使 cracker 可以从观察到密钥 (被 RCE board 的大侠发现)
对这个 crackme 有兴趣的大侠,欢迎一起讨论 :)
[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!