通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 红客教程 >> 网络攻防 >> 文章正文
**CHM 3.50 注册流程及算法分析(续)
责任编辑:酷酷の鱼   更新日期:2008-1-18
 

【破文标题】**CHM 3.50 注册流程及算法分析(续)
【破文作者】Ptero
【破解工具】FI,OllyDbg,Dede,IDA,MD5工具
【注册方式】序列号+KeyFile
【保护方式】花指令,自校检,进程检测,API断点检测
【加壳方式】UPX v0.94-1.90
【加密算法】MD5+AES-256(Rijndael)+ZLib+RC4
【软件限制】功能限制
【破解声明】初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!

----------------------------------------------------

【破解分析】

有关该软件中的AES-256(Rijndael)和ZLib算法的分析,请参见拙作《****CHM 3.50 注册流程及算法分析》。

本文主要分析该软件中采用的作者自定义算法和RC4算法。
因为因为本文算法较少,再加上我也是初涉密码学,所以尽可能写详细一点,自己分析起来方便,大家看着也方便,呵呵。

在继续闯关之前,先简单介绍一下RC4算法:

RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ron Rivest在1987年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-Box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右。
在开始的7年中该算法享有专利,直到1994年,有人匿名发布了它的源码,此后它就不再是一个商业秘密了。
RC4属于对称算法中的序列密码,按字节逐个对明文加密。

(以下代码均用类C语言描述)

先看S-Box的初始化,共分为2步:

1. 线性填充S-Box(S[i])。代码如下:

for(i=0;i<256;i++)
  S[i]=i;

2. 根据密钥(K[i])扰乱S-Box。代码如下:

for(i=j=0;i<256;i++)
{
  j=(j+S[i]+K[i])%256;
  交换S[i]和S[j];
}

RC4的加密/解密也很简单,也分为2步:

1. 产生随机字节k,代码如下:

i=j=0;
while(明文未结束)
{
  i=(i+1)%256;
  j=(j+s[i])%256;
  交换S[i]和S[j];
  t=(S[i]+S[j])%256;
  k=S[t];
}

2. 将字节k与明文异或。

因为是异或运算,所以加密/解密算法相同。


下面言归正传,继续闯关。

++++++++++++++++++++++++++++++++++++++++ 第11关:检测KeyFile黑名单 ++++++++++++++++++++++++++++++++++++++++

话说Ptero闯过10关后,发现程序注册菜单消失,自以为注册成功,正沾沾自喜中,忽又发现被程序作者骗了,制作出的chm还是显示未注册版本。
于是又打开OD、Dede、IDA等等,继续分析,终于找到了隐藏的11关入口:

00503DF3    8D95 58FEFFFF  lea edx, [ebp-1A8]
00503DF9    8B45 F0        mov eax, [ebp-10]    ; KeyFile文件名
00503DFC    E8 0763FCFF    call ****CHM.004CA108  ; 计算KeyFile文件的MD5值
00503E01    8B85 58FEFFFF  mov eax, [ebp-1A8]    ; MD5值
00503E07    8B55 EC        mov edx, [ebp-14]
00503E0A    E8 25B5FCFF    call ****CHM.004CF334
00503E0F    84C0           test alal
00503E11    0F84 3F010000  je ****CHM.00503F56    ; 这里跳的话的Game Over啦

004CF334这个Call,读取了3个MD5值,与KeyFile的MD5比较。估计是检测流传出去的KeyFile的黑名单吧。如果相等的话,嘿嘿,就删除KeyFile,删除注册信息。
我自己构造了一个KeyFile,肯定不在黑名单里啦。所以直接pass,呵呵。

之后来到这里:

00503FBC    8B85 64FDFFFF  mov eax, [ebp-29C]    ; 用户名
00503FC2    8B4D F0        mov ecx, [ebp-10]    ; KeyFile文件名
00503FC5    5A             pop edx
00503FC6    E8 BD65FDFF    call ****CHM.004DA588  ; 解密KeyFile,详细算法参见第7、8、9关
00503FCB    8B85 70FDFFFF  mov eax, [ebp-290]
00503FD1    50             push eax      ; KeyFile解密后的字串
00503FD2    8D85 58FDFFFF  lea eax, [ebp-2A8]
00503FD8    8D95 F3FEFFFF  lea edx, [ebp-10D]
00503FDE    E8 390FF0FF    call ****CHM.00404F1C  ; System.@LStrFromString(String;String;ShortString;ShortString);
00503FE3    8B85 58FDFFFF  mov eax, [ebp-2A8]    ; 加密后的注册码
00503FE9    8D95 5CFDFFFF  lea edx, [ebp-2A4]
00503FEF    E8 2C24F3FF    call ****CHM.00436420  ; 解密
00503FF4    8B85 5CFDFFFF  mov eax, [ebp-2A4]    ; 注册码
00503FFA    50             push eax
00503FFB    8D85 50FDFFFF  lea eax, [ebp-2B0]
00504001    8D95 8EFEFFFF  lea edx, [ebp-172]
00504007    E8 100FF0FF    call ****CHM.00404F1C  ; System.@LStrFromString(String;String;ShortString;ShortString);
0050400C    8B85 50FDFFFF  mov eax, [ebp-2B0]    ; 加密后的用户名
00504012    8D95 54FDFFFF  lea edx, [ebp-2AC]
00504018    E8 0324F3FF    call ****CHM.00436420  ; 解密
0050401D    8B95 54FDFFFF  mov edx, [ebp-2AC]    ; 用户名
00504023    59             pop ecx      ; 注册码
00504024    58             pop eax      ; KeyFile解密后的字串
00504025    E8 1667FDFF    call ****CHM.004DA740  ; 12、13关
0050402A    84C0           test alal
0050402C    74 10          je short ****CHM.0050403E
0050402E    EB 06          jmp short ****CHM.00504036

004DA740就是关键Call啦,F7跟进:

++++++++++++++++++++++++++++++++++++++++ 第12关:KeyFile的压缩变换 ++++++++++++++++++++++++++++++++++++++++

取KeyFile的第110位,记为a,并转换成数字:

004DA7E2    8D45 D8        lea eax, [ebp-28]
004DA7E5    50             push eax
004DA7E6    B9 01000000    mov ecx, 1
004DA7EB    BA 6E000000    mov edx, 6E
004DA7F0    8B45 FC        mov eax, [ebp-4]    ; KeyFile解密后的字串
004DA7F3    E8 FCA9F2FF    call ****CHM.004051F4  ; System.@LStrCopy;
004DA7F8    8B45 D8        mov eax, [ebp-28]
004DA7FB    E8 E0F6F2FF    call ****CHM.00409EE0  ; SysUtils.StrToInt(AnsiString):Integer;
004DA800    8BD8           mov ebxeax
004DA802    EB 04          jmp short ****CHM.004DA808

 

[1] [2] [3] [4] [5] 下一页

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    固顶文章 爱国者安全网2007年度优秀版主评选
    普通文章 瑞星公司01月18日发布 每日计算机病毒及木马播报
    普通文章 07年病毒高速出新“工业化”入侵特征明显
    普通文章 病毒制造门槛低 互相模仿导致泛滥
    普通文章 我国IP地址数已达到1.35亿个 但缺口仍然很大
    普通文章 关于URL解析漏洞在PDF文档中的利用
    推荐文章 推荐:对网软网上购物系统的一点点分析
    普通文章 自己动手编写简单远程控制
    普通文章 IP-Tools中的密码学算法详细分析
    普通文章 **CHM 3.50 注册流程及算法分析(续)
    热门文章
    普通文章windows下利用OpenVPN搭建VPN服务器
    普通文章验证码 kaptcha 杂谈
    普通文章计算机病毒鼻祖里奇拟挑战谷歌
    普通文章利用漏洞传播 内嵌在网页中的木马病毒
    普通文章2007年病毒感染3000余万台电脑
    普通文章假低价信息吸引买主 盗号程序10秒内划走银行卡存款
    普通文章捷克黑客入侵电视节目遭指控
    普通文章美国男子用垃圾邮件操纵中国公司股价被起诉
    普通文章White_Dune 存在本地缓冲区溢出及格式串处理漏洞
    普通文章Trolltech Qt QSslSocket类证书验证绕过安全限制漏洞
    精彩专题