奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 安全技术 >> 汉化破解 >> Official CFF CrackMe #3 破解分析
安全技术
安全资讯
病毒预警
漏洞发布
安全教学
工具介绍
漏洞利用
病毒防范
入侵检测
防火墙
安全防范
汉化破解
攻击实例
加密解密
  • 完全破解灰鸽子成为会

  • 迅雷5.0.0.72 广告条移

  • 网页加密和破解篇

  • 破解QQ密码完全剖析

  • 免费在线电影破解((最

  • 汉化软件照样破

  • 实战破解交换机密码

  • QQ聊天霸王 V2.06 脱壳

  • Official CFF CrackMe #3 破解分析
    字体:

    中华网络安全联盟    作者:佚名    来源:网络    时间:2006-3-19

    Officia
    作者:☆群侠☆… 文章来源:qxtianlong.77169.com

    【破文作者】qxtianlong
    【所属组织】无
    【作者主页】http://qxtianlong.77169.com
    【 E-mail 】kk5910@sina.com
    【 作者QQ 】249935058
    【文章题目】Crackme的详解
    【软件名称】Official CFF CrackMe #3
    【下载地址】笨冬瓜
    【加密方式】用户名/序列号
    【加壳方式】UPX
    【破解工具】OD, W32
    【软件限制】无
    【破解平台】wxp
    =======================================================================================================
    【软件简介】
    Crackme生存的唯一目的就是让我们练手之用!
    =======================================================================================================
    【文章简介】
    我的破解很菜,写这篇东西是给对这个
    crackme
    有兴趣的兄弟们,分享一下破解心得
    =======================================================================================================
    【解密过程】
     UPX的壳比较简单,自动或者手动都可以,再此就不说了!
     运行输入试练码qxtianlong,78787878,确认后出现友好提示!
     下面用W32静态分析一下,找到友好提示,双击来到
     
    * Referenced by a (U)nconditional or (C)onditional Jump at
    Address:
    |:00440F56(C)
    |
    :00440F72
    6A00
    push 00000000
    * Possible StringData Ref from Code Obj ->"Beggar
    off!"
     
    |
    :00440F74
    B980104400
    mov ecx, 00441080
    * Possible StringData Ref from Code Obj ->"Wrong Serial,try
    again!"
     
    |
    :00440F79
    BA8C104400
    mov edx,
    0044108C
    ************来到此处
    *******************************************************************************************************
    我们向上找找可以看到从00440F56处跳来,此时注意到下面有相同的提示
    *******************************************************************************************************
    :00440F7E
    A1442C4400
    mov eax, dword ptr [00442C44]
    :00440F83
    8B00
    mov eax, dword ptr [eax]
    :00440F85
    E8DEC0FFFF
    call 0043D068
    :00440F8A
    EB18
    jmp 00440FA4
    * Referenced by a (U)nconditional or (C)onditional Jump at
    Address:
    |:00440F39(C)
    |
    :00440F8C
    6A00
    push 00000000
    * Possible StringData Ref from Code Obj ->"Beggar
    off!"
    ************可以看到和上面是相同的
     
    |
    :00440F8E
    B980104400
    mov ecx, 00441080
    * Possible StringData Ref from Code Obj ->"Wrong Serial,try
    again!"
     
    |
    :00440F93
    BA8C104400
    mov edx, 0044108C
    :00440F98
    A1442C4400
    mov eax, dword ptr [00442C44]
    :00440F9D
    8B00
    mov eax, dword ptr [eax]
    :00440F9F
    E8C4C0FFFF
    call
    0043D068
    *******************************************************************************************************
    我们看看这个地方是从00440F39处跳来的,从两个不同的地址调到相同的提示,我们分析一下他们有什么关联呢!!
    我们先找到00440F39这个地方!!!!!
    *******************************************************************************************************
    *
    Possible StringData Ref from Code Obj ->"Registered
    User"
     
    |
    :00440F2F
    BA14104400
    mov edx, 00441014
    :00440F34
    E8F32BFCFF
    call 00403B2C
    :00440F39
    7551
    jne 00440F8C
    :00440F3B
    8D55FC
    lea edx, dword ptr [ebp-04]
    :00440F3E
    8B83C8020000
    mov eax, dword ptr [ebx+000002C8]
    :00440F44
    E8D7FEFDFF
    call 00420E20
    :00440F49
    8B45FC
    mov eax, dword ptr
    [ebp-04]
    *******************************************************************************************************
    可以看到00440F39处的jne跳向了00440F8C就是出错的地方,可以猜到此处应该是检查用户名的地方,不对就出错
    那么我们再看看00440F56!!!!
    *******************************************************************************************************
    *
    Possible StringData Ref from Code Obj
    ->"GFX-754-IER-954"
     
    |
    :00440F4C
    BA2C104400
    mov edx, 0044102C
    :00440F51
    E8D62BFCFF
    call 00403B2C
    :00440F56
    751A
    jne 00440F72
    :00440F58
    6A00
    push
    00000000
    *******************************************************************************************************
    可以看到00440F56处的jne跳向了00440F72也是出错的地方,我们也可以猜到这是检查序列号的地方了,简单的说
    先检查用户名对了就继续,不对就死,然后检查序列号对了就成功,不对就死!!!!什么你不信!!那么接着看!!
    我们试想一下如果我猜的对的话,在00440F56这个地址不跳,接下来会是什么呢!!!待我慢慢说来。。。。。。
    *******************************************************************************************************
    *
    Possible StringData Ref from Code Obj ->"CrackMe cracked
    successfully"
     
    |
    :00440F5A
    B93C104400
    mov ecx, 0044103C
    * Possible StringData Ref from Code Obj ->"Congrats! You cracked this
    CrackMe!"
     
    |
    :00440F5F
    BA5C104400
    mov edx, 0044105C
    :00440F64
    A1442C4400
    mov eax, dword ptr [00442C44]
    :00440F69
    8B00
    mov eax, dword ptr [eax]
    :00440F6B
    E8F8C0FFFF
    call 0043D068
    :00440F70
    EB32
    jmp
    00440FA4
    *******************************************************************************************************
    看提示应该知道是成功的地方了,这说明我猜的是对的了,嘿嘿!!!!我们再想上分析一下!!!!
    看看Possible
    StringData Ref from Code Obj ->"Registered
    User"的上面又是什么呢!!!
    *******************************************************************************************************
    *
    Referenced by a (U)nconditional or (C)onditional Jump at
    Address:
    |:00440E99(C)
    |
    * Possible StringData Ref from Code Obj ->"No Serial
    entered"
     
    |
    :00440F08
    B9E80F4400
    mov ecx, 00440FE8
    * Possible StringData Ref from Code Obj ->"Enter a
    Serial!"
     
    |
    :00440F0D
    BAFC0F4400
    mov edx, 00440FFC
    :00440F12
    A1442C4400
    mov eax, dword ptr [00442C44]
    :00440F17
    8B00
    mov eax, dword ptr [eax]
    :00440F19
    E84AC1FFFF
    call 0043D068
    * Referenced by a (U)nconditional or (C)onditional Jump at
    Address:
    |:00440F04(C)
    |
    :00440F1E
    8D55FC
    lea edx, dword ptr [ebp-04]
    :00440F21
    8B83C4020000
    mov eax, dword ptr [ebx+000002C4]
    :00440F27
    E8F4FEFDFF
    call 00420E20
    :00440F2C
    8B45FC
    mov eax, dword ptr
    [ebp-04]
    *******************************************************************************************************
    可以看到从00440F04跳来,他的上面可以看到提示你输入序列号的提示
    *******************************************************************************************************
    *
    Referenced by a (U)nconditional or (C)onditional Jump at
    Address:
    |:00440ED8(C)
    |
    :00440EF2
    8D55FC
    lea edx, dword ptr [ebp-04]
    :00440EF5
    8B83C8020000
    mov eax, dword ptr [ebx+000002C8]
    :00440EFB
    E820FFFDFF
    call 00420E20
    :00440F00
    837DFC00
    cmp dword ptr [ebp-04], 00000000
    :00440F04
    7518
    jne 00440F1E
    :00440F06
    6A00
    push
    00000000
    *******************************************************************************************************
    简单分析一下这段的功能应该是看你有没有输入序列号,没有的话就会出现提示了,输入了序列号就跳到00440F1E了
    而这里又是从00440ED8跳来,找到他,然后也分析一下!!!
    *******************************************************************************************************
    *
    Referenced by a (U)nconditional or (C)onditional Jump at
    Address:
    |:00440E4C(C)
    |
    :00440EB3
    6A00
    push 00000000
    :00440EB5
    53
    push ebx
    :00440EB6
    8BD8
    mov ebx, eax
    :00440EB8
    33C0
    xor eax, eax
    :00440EBA
    55
    push ebp
    :00440EBB
    68BA0F4400
    push 00440FBA
    :00440EC0
    64FF30
    push dword ptr fs:[eax]
    :00440EC3
    648920
    mov dword ptr fs:[eax], esp
    :00440EC6
    8D55FC
    lea edx, dword ptr [ebp-04]
    :00440EC9
    8B83C4020000
    mov eax, dword ptr [ebx+000002C4]
    :00440ECF
    E84CFFFDFF
    call 00420E20
    :00440ED4
    837DFC00
    cmp dword ptr [ebp-04], 00000000
    :00440ED8
    7518
    jne
    00440EF2
    *************就是这里了
    :00440EDA
    6A00
    push 00000000
    * Referenced by a (U)nconditional or (C)onditional Jump at
    Address:
    |:00440E6B(C)
    |
    * Possible StringData Ref from Code Obj ->"No Name
    entered"
     
    |
    :00440EDC
    B9C80F4400
    mov ecx, 00440FC8
    * Possible StringData Ref from Code Obj ->"Enter a
    Name!"
     
    |
    :00440EE1
    BAD80F4400
    mov edx, 00440FD8
    :00440EE6
    A1442C4400
    mov eax, dword ptr [00442C44]
    :00440EEB
    8B00
    mov eax, dword ptr [eax]
    :00440EED
    E876C1FFFF
    call
    0043D068
    *******************************************************************************************************
    注意我标的星号那里,功能应该是检查用户名的,没有输入的话会出现提示,让你输入一个用户名!输入了就会跳到
    00440EF2接着继续其他的判断了,上面已经分析过了。差不多已经明白了!
    静态分析到此结束了,我们下面用动态分析一下!我们在00440EB3处下断!!!!,我会简单再分析一下,不会再向上面
    那样细细分析了!
    *******************************************************************************************************
    F9运行,马上断下来,F8跟,在00440ECF
    E8 4CFFFDFFcall
    CrackMe3.00420E20
    可以看到是取用户名位数的,EAX寄存器内容为A(10),用户名位数和0比较,不为零继续
    00440EFB
    E8 20FFFDFFcall
    CrackMe3.00420E20
    ,这个CALL是取序列号位数的
    EAX寄存器内容为8,序列号位数和0比较,不为零继续
    00440F2C
    8B45 FCmov
    eax,dword ptr ss:[ebp-4]
    ;qxtianlong
    00440F2F BA
    14104400mov
    edx,CrackMe3.00441014
    ; ASCII "Registered User"
    00440F34 E8
    F32BFCFFcall
    CrackMe3.00403B2C
    F7跟进
    00440F39/75
    51
    jnz short
    CrackMe3.00440F8C
    我们输入的用户名进EAX,真正的用户名进EDX,跟进后看到
    00403B33
    39D0
    cmp
    eax,edx
    ; CrackMe3.00441014
    00403B35 0F84
    8F000000je
    CrackMe3.00403BCA
    做比较,不等就死啦!00440F44 E8
    D7FEFDFFcall CrackMe3.00420E20
    这个CALL取序列号位数,EAX寄存器内容为8
    00440F49 8B45
    FCmov
    eax,dword ptr ss:[ebp-4]
    ;78787878
    00440F4C BA
    2C104400mov
    edx,CrackMe3.0044102C
    ; ASCII "GFX-754-IER-954"
    00440F51 E8
    D62BFCFFcall
    CrackMe3.00403B2C
    F7跟进
    00440F56 75
    1A
    jnz short CrackMe3.00440F72
    我们可以看到 call
    00420E20这个子程序是取字符传位数用的,我们输入的序列号进EAX,真正的序列号进EDX
    跟进后看到
    00403B33
    39D0
    cmp
    eax,edx
    ; CrackMe3.0044102C
    00403B35 0F84
    8F000000je
    CrackMe3.00403BCA
    做比较,不等就死啦!!!
    用户名和序列号的比较方式为我们输入的和真正逐位做比较,好啦OK啦!!!!
    收工!!!
    =======================================================================================================
    【解密心得】
    明码方式比较简单,固定用户名和序列号!
    name:Registered
    User
    serial:GFX-754-IER-954
    爆破:
    00440F39/75
    51
    jnz short CrackMe3.00440F8Cjnz-->jz 或者74
    51
    00440F56 75
    1A
    jnz short CrackMe3.00440F72jnz-->jz 或者74
    1A
    内存注册机:
    取得用户名
    中断地址:00440F34
    中断次数:1
    第一字节:E8
    指令长度:5
    保存信息为内存方式-->EDX寄存器
    取得序列号
    中断地址:00440F51
    中断次数:1
    第一字节:E8
    指令长度:5
    保存信息为内存方式-->EDX寄存器
    =======================================================================================================
    【破解声明】我是一个小小菜虫子,文章如有错误,请高手指正!
    【版权声明】本文纯属技术交流,
    转载请注明作者并保持文章的完整, 谢谢!
    =======================================================================================================

    l CFF CrackMe #3 破解分析
    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.