飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5216|回复: 9

[PCC]2001年的Key-Crackme2算法分析~~~

[复制链接]
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2006-6-26 00:51:06 | 显示全部楼层 |阅读模式
    【破文标题】野猫III破解手记(算法分析2)
    【破文作者】野猫III
    【破解工具】PEiD,W32DASM,UC32,OD
    【破解平台】Windows 2K&XP
    【软件名称】[PCC]2001年的Key-Crackme2
    【软件大小】63K
    【原版下载】老古董咯。。。去那找下载地址呢?
    【保护方式】加壳,注册码
    【软件简介】

    一、软件加了个UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo典型壳.
    用OD载入,Ctrl+F,输入popad,确定之后来到:
    00438C8E    61              POPAD //F2断点,运行到这里
    00438C8F  - E9 6C83FCFF     JMP Key-Crac.00401000 //F8到这里Jmp到达程序OEP。
    00401000    6A 00           PUSH 0
    00401002    E8 23040000     CALL Key-Crac.0040142A                   ; JMP 到 kernel32.GetModuleHandleA
    00401007    A3 F0344000     MOV DWORD PTR DS:[4034F0],EAX
    0040100C    50              PUSH EAX
    0040100D    E8 13000000     CALL Key-Crac.00401025
    脱壳之。。。

    二、软件注册有错误提示,脱壳后用W32DASM查找参串以下:
    "    Please Fill in 1 more Char!!"
    "   +=================================+
    "
    " Good Job, I Wish You the Very "
    " Key/CrackmMe - #2"
    " You Have Enter A Wrong Serial, " //双击这个错误提示
    ++++++++++来到下面。。。+++++++++++++++++++++++

    :0040133A 3BC6                    cmp eax, esi
    :0040133C 7515                    jne 00401353 //就是它,关键Jump
    :0040133E 6A00                    push 00000000

    * Possible StringData Ref from Data Obj ->"Key/CrackMe #2   "
                                      |
    :00401340 6862344000              push 00403462

    * Possible StringData Ref from Data Obj ->" Good Job, I Wish You the Very "
                                            ->"Best"
                                      |
    :00401345 68B8344000              push 004034B8 //上面提示注册成功
    :0040134A 6A00                    push 00000000
    :0040134C E89D000000              call 004013EE
    :00401351 EB13                    jmp 00401366

    * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    |:0040133C(C) 。。。。。。。。。。导致出错的地址,跳去那里看下。。。
    |
    :00401353 6A00                    push 00000000

    * Possible StringData Ref from Data Obj ->"Key/CrackMe #2   "
                                      |
    :00401355 6862344000              push 00403462

    * Possible StringData Ref from Data Obj ->" You Have Enter A Wrong Serial, "
                                            ->"Please Try Again "
                                      |
    :0040135A 6886344000              push 00403486 //这里提示注册错误
    :0040135F 6A00                    push 00000000
    :00401361 E888000000              call 004013EE

    ++++++++++++++++++++++++++++++++++++++++++++++++
    三、找到关键跳转后我们OD载入这个脱壳后的文件。
    ------------------------------------------------------------------------
    0040129C    C1E8 10         SHR EAX,10
    0040129F    0BC0            OR EAX,EAX
    004012A1    0F85 BF000000   JNZ Key-Crac.00401366
    004012A7    58              POP EAX
    004012A8    83F8 6C         CMP EAX,6C
    004012AB    0F85 B5000000   JNZ Key-Crac.00401366
    004012B1    6A 40           PUSH 40
    004012B3    68 38304000     PUSH Key-Crac.00403038                   ; ASCII "WildCatIII"
    004012B8    6A 6A           PUSH 6A
    004012BA    FF75 08         PUSH DWORD PTR SS:[EBP+8]
    004012BD    E8 08010000     CALL <JMP.&USER32.GetDlgItemTextA>
    004012C2 >  83F8 00         CMP EAX,0                             ; 是否输入用户名?
    004012C5    74 18           JE SHORT Key-Crac.004012DF           ; 没有就跳错
    004012C7    6A 40           PUSH 40
    004012C9    68 38314000     PUSH Key-Crac.00403138        ; ASCII "9876543210"
    004012CE    6A 6B           PUSH 6B
    004012D0    FF75 08         PUSH DWORD PTR SS:[EBP+8]
    004012D3    E8 F2000000     CALL <JMP.&USER32.GetDlgItemTextA>
    004012D8 >  83F8 00         CMP EAX,0                                ; 试练码输入了吗?
    004012DB    74 02           JE SHORT Key-Crac.004012DF               ; 没有就跳
    004012DD    EB 17           JMP SHORT Key-Crac.004012F6              ; 有输在这里跳
    004012DF    6A 00           PUSH 0
    004012E1    68 62344000     PUSH Key-Crac.00403462           ; ASCII "Key/CrackMe #2   "
    004012E6    68 00304000     PUSH Key-Crac.00403000            ; ASCII "    Please Fill in

    1 more Char!!"
    004012EB    6A 00           PUSH 0
    004012ED    E8 FC000000     CALL <JMP.&USER32.MessageBoxA>
    004012F2    C9              LEAVE
    004012F3    C2 1000         RETN 10
    004012F6    68 38304000     PUSH Key-Crac.00403038                   ; ASCII "WildCatIII"
    004012FB    E8 30010000     CALL <JMP.&kernel32.lstrlen>
    00401300    33F6            XOR ESI,ESI
    00401302    8BC8            MOV ECX,EAX                              ; 用户名位数进ECX
    00401304    B8 01000000     MOV EAX,1                                ; EAX=1

    接下来进行用户名家逐个取值循环运算
    00401309 >  8B15 38304000   MOV EDX,DWORD PTR DS:[403038]            
    ; 取用户名
    0040130F    8A90 37304000   MOV DL,BYTE PTR DS:[EAX+403037]          ; 逐位取用户名的值
    00401315    81E2 FF000000   AND EDX,0FF      ; 取其16进制放进EDX
    0040131B    8BDA            MOV EBX,EDX       ; 同时也放进EBX
    0040131D    0FAFDA          IMUL EBX,EDX          ; EDX与EBX相乘
    00401320    03F3            ADD ESI,EBX         ; 积放进EBX
    00401322    8BDA            MOV EBX,EDX      ; 用户名逐位的16进制放进EBX
    00401324    D1FB            SAR EBX,1       ; 算术右移1位
    00401326    03F3            ADD ESI,EBX        ; ESI+EBX
    00401328    2BF2            SUB ESI,EDX            ; 得到的和减去EDX
    0040132A    40              INC EAX                      ; EAX+1
    0040132B    49              DEC ECX                       ; ECX-1
    0040132C >^ 75 DB           JNZ SHORT 00401309  
    ; 上面的ECX与EAX相等就不跳,不等就跳

    0040132E    56              PUSH ESI        ; 上面的循环之后,最终结果保存在ESI中
    0040132F    68 38314000     PUSH Key-Crac.00403138                   ; ASCII "9876543210"
    00401334    E8 4A000000     CALL Key-Crac.00401383
    00401339    5E              POP ESI
    0040133A >  3BC6            CMP EAX,ESI               ; 结果与试练码比较 {内存注册机}
    0040133C    75 15           JNZ SHORT Key-Crac.00401353              ; 不等就跳走
    0040133E    6A 00           PUSH 0
    00401340    68 62344000     PUSH Key-Crac.00403462                   ; ASCII "Key/CrackMe #2   "
    00401345    68 B8344000     PUSH Key-Crac.004034B8                   ; ASCII " Good Job, I Wish

    You the Very Best"
    0040134A    6A 00           PUSH 0
    0040134C    E8 9D000000     CALL <JMP.&USER32.MessageBoxA>
    00401351    EB 13           JMP SHORT Key-Crac.00401366
    00401353    6A 00           PUSH 0
    00401355    68 62344000     PUSH Key-Crac.00403462                   ; ASCII "Key/CrackMe #2   "
    0040135A    68 86344000     PUSH Key-Crac.00403486                   ; ASCII " You Have Enter A

    Wrong Serial, Please Try Again "
    0040135F    6A 00           PUSH 0
    00401361    E8 88000000     CALL <JMP.&USER32.MessageBoxA>           ; Call出错误提示,OVER!
    ------------------------------------------------------------------------
    【算法小结】
    [quote]
    我的用户名:W   i   l   d   C   a   t   I   I   I
    用户名分别:57  69  6C  64  43  61  74  49  49  49
    第一次W 得到的16进制结果57*57+2b-57=1d65
    第二次i 得到的16进制结果69*69+34-69=2ADC
    第二次l 得到的16进制结果6c*6c+36-6c=2D94
    第二次d 得到的16进制结果64*64+32-64=26DE

    第二次C 得到的16进制结果43*43+21-43=1167
    第二次a 得到的16进制结果61*61+30-61=2490
    第二次t 得到的16进制结果74*74+3A-74=3456

    第二次I 得到的16进制结果49*49+24-49=14AC
    第二次I 得到的16进制结果49*49+24-49=14AC
    第二次I 得到的16进制结果49*49+24-49=14AC

    上面注册名经逐个运算所得的值,
    累加得144CA,然后转成10进制------》83146就是注册码。

    ++++++++++++++++++++++++++++++++++
    算法小结:

    逐位取用户名的16进制值的2次方
    加上
    用户名16进制算术右移1位取值(可以理解为它除以2的商的整数)
    减去
    逐位取用户名的16进制值

    最后累加的16进制值转换成10进制就是注册码.
    ------------------------------------------------------------------------
    【版权声明】本破文纯属个人独自分析, 之前没有参考过它的任何破解信息。特此说明。

    [ 本帖最后由 野猫III 于 2006-6-26 00:52 编辑 ]
    kk.gif

    Key-Crackme2.rar

    56.21 KB, 下载次数: 24, 下载积分: 飘云币 -2 枚

    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-6-26 11:08:35 | 显示全部楼层

    我写的《加密与解密实战攻略》书中也放过这个crackme

    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-6-26 13:38:59 | 显示全部楼层
    原帖由 风飘雪 于 2006-6-26 11:08 发表


    呵呵!期待郭大侠的新作。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-6-26 20:03:03 | 显示全部楼层
    猫兄算法越来越厉害了,恭喜,恭喜!!!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-6-26 20:34:16 | 显示全部楼层
    原帖由 风飘雪 于 2006-6-26 11:08 发表


    已收藏郭大侠的大作,;P


    也恭喜猫兄算法越来越厉害,更上一层楼!!! :victory:

    [ 本帖最后由 菜儿 于 2006-6-26 20:37 编辑 ]
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

     楼主| 发表于 2006-6-27 23:39:30 | 显示全部楼层
    原帖由 lhl8730 于 2006-6-26 20:03 发表
    猫兄算法越来越厉害了,恭喜,恭喜!!!

    菜鸟学习的东东,歪夸,呵呵~~~

    原帖由 风飘雪 于 2006-6-26 11:08 发表


    呵呵。。。谢谢郭大侠加精!

    这个CrackMe分析应该是猫分析算法的处女作吧。

    简单实用,正是菜鸟学飞好方向~~~

    ++++++++++++++

    请教大家一个问题!

    为什么咱在易语言里做出的算法注册机,不支持中文?

    附件有源码,帮忙看下。呵呵~~~有可能将一个中文字拆开来算的。

    [ 本帖最后由 野猫III 于 2006-6-27 23:59 编辑 ]
    SpxImage.gif

    Key-Crackme2 E源码.rar

    699.51 KB, 下载次数: 4, 下载积分: 飘云币 -2 枚

    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-7-1 10:30:13 | 显示全部楼层
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2016-8-5 17:44
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2006-7-1 16:43:31 | 显示全部楼层
    原帖由 风飘雪 于 2006-6-26 11:08 发表
    我写的《加密与解密实战攻略》书中也放过这个crackme



    我们这里没卖这本书,网上的PDF版本太不清楚了
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2016-3-31 17:15
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-5-27 13:44:41 | 显示全部楼层
    我只是来学习的
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-18 10:35
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2010-5-27 19:24:41 | 显示全部楼层
    期待中。。。。。。。。。。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表