飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5114|回复: 8

[分享] 关于Luckly大大的单注册码型 CrackMe [更新#1] 算法分析

[复制链接]
  • TA的每日心情
    开心
    2017-10-25 13:07
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2010-3-11 01:09:28 | 显示全部楼层 |阅读模式
    本人菜鸟一个,有什么错误的地方请指正!
    可能有些地方没有说明白,请慢慢吸收:loveliness:

    00401540   .  83EC 18       SUB ESP,18
    00401543   .  53            PUSH EBX
    00401544   .  33C0          XOR EAX,EAX
    00401546   .  55            PUSH EBP
    00401547   .  56            PUSH ESI
    00401548   .  894424 19     MOV DWORD PTR SS:[ESP+19],EAX
    0040154C   .  BE 01000000   MOV ESI,1
    00401551   .  57            PUSH EDI
    00401552   .  8BD9          MOV EBX,ECX
    00401554   .  894424 21     MOV DWORD PTR SS:[ESP+21],EAX
    00401558   .  56            PUSH ESI
    00401559   .  895C24 14     MOV DWORD PTR SS:[ESP+14],EBX
    0040155D   .  C64424 20 00  MOV BYTE PTR SS:[ESP+20],0
    00401562   .  884424 29     MOV BYTE PTR SS:[ESP+29],AL
    00401566   .  E8 CF030000   CALL <JMP.&MFC42.#6334>
    0040156B   .  8B4B 60       MOV ECX,DWORD PTR DS:[EBX+60]            ;  取假注册码
    0040156E   .  8B51 F8       MOV EDX,DWORD PTR DS:[ECX-8]
    00401571   .  83FA 0B       CMP EDX,0B
    00401574   .  7D 18         JGE SHORT 0040158E
    00401576   .  6A 00         PUSH 0
    00401578   .  6A 00         PUSH 0
    0040157A   .  68 64304000   PUSH 00403064
    0040157F   .  8BCB          MOV ECX,EBX
    00401581   .  E8 AE030000   CALL <JMP.&MFC42.#4224>
    00401586   .  5F            POP EDI
    00401587   .  5E            POP ESI
    00401588   .  5D            POP EBP
    00401589   .  5B            POP EBX
    0040158A   .  83C4 18       ADD ESP,18
    0040158D   .  C3            RETN
    0040158E   >  0FBE01        MOVSX EAX,BYTE PTR DS:[ECX]              ;  取假注册码的十六进制  (1)
    00401591   .  8D7A FD       LEA EDI,DWORD PTR DS:[EDX-3]             ;  注册码的位数减去3
    00401594   .  894424 14     MOV DWORD PTR SS:[ESP+14],EAX            ;  把取假注册码的十六进制数 esp+14 保存  (固定值)
    00401598   .  897C24 18     MOV DWORD PTR SS:[ESP+18],EDI            ;  把每次edx-3注册码的位数保存
    0040159C   >  0FBE2C31      MOVSX EBP,BYTE PTR DS:[ECX+ESI]          ;  取注册码的十六进制数
    004015A0   .  03C6          ADD EAX,ESI                              ;  把取的第一个注册码加esi
    004015A2   .  25 FF000000   AND EAX,0FF                              ;  这个是小写转大写的
    004015A7   .  33C5          XOR EAX,EBP                              ;  把取的第一个注册码加+esi与取的第二个注册码 或
    004015A9   .  46            INC ESI                                  ;  循环加一
    004015AA   .  3BF7          CMP ESI,EDI
    004015AC   .^ 7E EE         JLE SHORT 0040159C
    004015AE   .  0FBE7411 FE   MOVSX ESI,BYTE PTR DS:[ECX+EDX-2]        ;  取注册码的倒数第二位  (1)
    004015B3   .  83C0 42       ADD EAX,42                               ;  把前8注册码计算的数加上42
    004015B6   .  8BF8          MOV EDI,EAX
    004015B8   .  C1FF 04       SAR EDI,4                                ;  把相加的结果右移4
    004015BB   .  83C7 41       ADD EDI,41                               ;  右移的后加上41
    004015BE   .  3BF7          CMP ESI,EDI                              ;  结果比较
    004015C0   .  74 18         JE SHORT 004015DA
    004015C2   .  6A 00         PUSH 0
    004015C4   .  6A 00         PUSH 0
    004015C6   .  68 58304000   PUSH 00403058
    004015CB   .  8BCB          MOV ECX,EBX
    004015CD   .  E8 62030000   CALL <JMP.&MFC42.#4224>                  ;  提示错误
    004015D2   .  5F            POP EDI
    004015D3   .  5E            POP ESI
    004015D4   .  5D            POP EBP
    004015D5   .  5B            POP EBX
    004015D6   .  83C4 18       ADD ESP,18
    004015D9   .  C3            RETN
    004015DA   >  0FBE5411 FF   MOVSX EDX,BYTE PTR DS:[ECX+EDX-1]        ;  取最后一位注册码    (2)
    004015DF   .  83E0 0F       AND EAX,0F                               ;  eax=65 和0F进行与计算
    004015E2   .  83C0 41       ADD EAX,41                               ;  再加上41
    004015E5   .  3BD0          CMP EDX,EAX                              ;  进行比较
    004015E7   .  74 18         JE SHORT 00401601
    004015E9   .  6A 00         PUSH 0
    004015EB   .  6A 00         PUSH 0
    004015ED   .  68 58304000   PUSH 00403058
    004015F2   .  8BCB          MOV ECX,EBX
    004015F4   .  E8 3B030000   CALL <JMP.&MFC42.#4224>
    004015F9   .  5F            POP EDI
    004015FA   .  5E            POP ESI
    004015FB   .  5D            POP EBP
    004015FC   .  5B            POP EBX
    004015FD   .  83C4 18       ADD ESP,18
    00401600   .  C3            RETN
    00401601   >  BD 01000000   MOV EBP,1
    00401606   .  33FF          XOR EDI,EDI
    00401608   .  8BF5          MOV ESI,EBP
    0040160A   .  8D51 01       LEA EDX,DWORD PTR DS:[ECX+1]             ;  取注册码   
    0040160D   .  2BF1          SUB ESI,ECX
    0040160F   >  8A0A          MOV CL,BYTE PTR DS:[EDX]                 ;  从注册码第二位开始取十六进制    (2)
    00401611   .  8D0416        LEA EAX,DWORD PTR DS:[ESI+EDX]
    00401614   .  0FBE5A 01     MOVSX EBX,BYTE PTR DS:[EDX+1]            ;  取注册码位数+1的注册码
    00401618   .  83E1 0F       AND ECX,0F                               ;  取的第一位注册码和0F进行与计算
    0040161B   .  C1E1 04       SHL ECX,4                                ;  结果逻辑左移4
    0040161E   .  D1F8          SAR EAX,1                                ;  注册码位数算术左移1
    00401620   .  8D4C19 AF     LEA ECX,DWORD PTR DS:[ECX+EBX-51]        ;  这个是把左移4的ecx+取的第二位注册码的和减去51,把结果设A
    00401624   .  8B5C24 14     MOV EBX,DWORD PTR SS:[ESP+14]            ;  把先前取的注册码第二位十六进制数   (固定值)
    00401628   .  83C0 06       ADD EAX,6                                ;  位数加6
    0040162B   .  8D4403 FF     LEA EAX,DWORD PTR DS:[EBX+EAX-1]         ;  把先前取的第一位注册码十六进制数加上eax-1
    0040162F   .  25 FF000000   AND EAX,0FF                              ;  结果与0FF进行与计算,结果设为B
    00401634   .  33C8          XOR ECX,EAX                              ;  A与B 进行异或计算
    00401636   .  83F9 20       CMP ECX,20                               ;  结果与20H比较
    00401639   .  0F8C AF000000 JL 004016EE                              ;  小于20H就跳
    0040163F   .  81F9 80000000 CMP ECX,80                               ;  与80H比较
    00401645   .  0F8F A3000000 JG 004016EE                              ;  大于80H就跳
    0040164B   .  884C3C 1C     MOV BYTE PTR SS:[ESP+EDI+1C],CL          ;  把计算结果保存
    0040164F   .  8B4C24 18     MOV ECX,DWORD PTR SS:[ESP+18]
    00401653   .  83C5 02       ADD EBP,2                                ;  循环次数加2
    00401656   .  83C2 02       ADD EDX,2                                ;  注册码加2 每次取二个注册码
    00401659   .  47            INC EDI                                  ;  edi+1
    0040165A   .  41            INC ECX                                  ;  ecx+1
    0040165B   .  3BE9          CMP EBP,ECX
    0040165D   .^ 7E B0         JLE SHORT 0040160F
    0040165F   .  83FF 02       CMP EDI,2
    00401662   .  7D 1A         JGE SHORT 0040167E
    00401664   .  8B4C24 10     MOV ECX,DWORD PTR SS:[ESP+10]
    00401668   .  6A 00         PUSH 0
    0040166A   .  6A 00         PUSH 0
    0040166C   .  68 48304000   PUSH 00403048
    00401671   .  E8 BE020000   CALL <JMP.&MFC42.#4224>
    00401676   .  5F            POP EDI
    00401677   .  5E            POP ESI
    00401678   .  5D            POP EBP
    00401679   .  5B            POP EBX
    0040167A   .  83C4 18       ADD ESP,18
    0040167D   .  C3            RETN
    0040167E   >  8D7C24 1C     LEA EDI,DWORD PTR SS:[ESP+1C]
    00401682   .  83C9 FF       OR ECX,FFFFFFFF                          ;  9与FFFFFFFF 进行或
    00401685   .  33C0          XOR EAX,EAX                              ;  清零
    00401687   .  F2:AE         REPNE SCAS BYTE PTR ES:[EDI]
    00401689   .  F7D1          NOT ECX
    0040168B   .  49            DEC ECX
    0040168C   .  83F9 03       CMP ECX,3
    0040168F   .  7D 18         JGE SHORT 004016A9
    00401691   .  8B4C24 10     MOV ECX,DWORD PTR SS:[ESP+10]
    00401695   .  50            PUSH EAX
    00401696   .  50            PUSH EAX
    00401697   .  68 3C304000   PUSH 0040303C
    0040169C   .  E8 93020000   CALL <JMP.&MFC42.#4224>
    004016A1   .  5F            POP EDI
    004016A2   .  5E            POP ESI
    004016A3   .  5D            POP EBP
    004016A4   .  5B            POP EBX
    004016A5   .  83C4 18       ADD ESP,18
    004016A8   .  C3            RETN
    004016A9   >  6A 02         PUSH 2                                   ; /maxlen = 2
    004016AB   .  8D540C 1D     LEA EDX,DWORD PTR SS:[ESP+ECX+1D]        ; |
    004016AF   .  68 38304000   PUSH 00403038                            ; |s2 = "PS"
    004016B4   .  52            PUSH EDX                                 ; |s1
    004016B5   .  FF15 B4214000 CALL DWORD PTR DS:[<&MSVCRT.strncmp>]    ; \strncmp
    004016BB   .  83C4 0C       ADD ESP,0C
    004016BE   .  85C0          TEST EAX,EAX
    004016C0   .  6A 00         PUSH 0
    004016C2   .  6A 00         PUSH 0
    004016C4   .  74 07         JE SHORT 004016CD
    004016C6   .  68 3C304000   PUSH 0040303C
    004016CB   .  EB 05         JMP SHORT 004016D2
    004016CD   >  68 2C304000   PUSH 0040302C
    004016D2   >  8B7424 1C     MOV ESI,DWORD PTR SS:[ESP+1C]
    004016D6   .  8BCE          MOV ECX,ESI
    004016D8   .  E8 57020000   CALL <JMP.&MFC42.#4224>
    004016DD   .  6A 00         PUSH 0
    004016DF   .  8BCE          MOV ECX,ESI
    004016E1   .  E8 54020000   CALL <JMP.&MFC42.#6334>
    004016E6   .  5F            POP EDI
    004016E7   .  5E            POP ESI
    004016E8   .  5D            POP EBP
    004016E9   .  5B            POP EBX
    004016EA   .  83C4 18       ADD ESP,18
    004016ED   .  C3            RETN
    004016EE   >  8B4C24 10     MOV ECX,DWORD PTR SS:[ESP+10]
    004016F2   .  6A 00         PUSH 0
    004016F4   .  6A 00         PUSH 0
    004016F6   .  68 20304000   PUSH 00403020
    004016FB   .  E8 34020000   CALL <JMP.&MFC42.#4224>
    00401700   .  5F            POP EDI
    00401701   .  5E            POP ESI
    00401702   .  5D            POP EBP
    00401703   .  5B            POP EBX
    00401704   .  83C4 18       ADD ESP,18
    00401707   .  C3            RETN

    分析结果:
    这个算法分成二个部分判断
    第一部分:
    用一个假注册码来解释 12345678910 ,取前8位假注册码比如23456789进行计算的和(计算过程从绿(1)开始),再进行计算的和和假注册码的倒数第二位比较相等不(计算过程从我标注的红(1)开始),不相等提示错误。然后再用23456789计算和,再进行计算的和和最后一位假注册码进行比较是否相等(计算过程从红(2)开始),不相等提示错误。
    问题:
    1、很奇怪的就是为什么注册码是从第二位开始取而不是第一位开始取,第一个注册码到哪里去了?是什么作用?

    第二部分:
    这部分的算法就更夸张了,从绿(2)开始:还是用一个假注册码解释 12345678910,这个算法每次取二个注册码进行计算,在和一个固定值进行计算。在这里我饶了很久后来发现一个问题一个字符串"PS",后来发现注册码最后三个组合的计算必须等于字符串“PS(”  比如:    23 45     57        89        10         
                                                               P(50H)  S(53H)   ((28H)

    总结:
    1、注册码最后二位必须为红(1)红(2)
    2、注册码最后六位的注册码两位组合计算的字符串味"PS("

    最后还是没有把注册码找出来/:013
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-5-1 14:44
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2010-3-13 18:52:37 | 显示全部楼层
    最后还是没有把注册码找出来

    呵呵
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-3-13 19:06:29 | 显示全部楼层
    多做记录好,我所有的分析都好像流水一样,第二天会几乎完全忘了(真的),最要命的是不想记起来 (怕再痛苦一次) /:010

    现在动手在搞海风的那个G,VM 折磨人,patch 倒是比较容易的,应该是 NP 或 ZP 的变种,int3 跳转来看应该是 NP 的
    ,麻烦在它分批解码,现在的东西都TMM折磨人为快乐之本,郁闷

    [ 本帖最后由 lgjxj 于 2010-3-13 19:09 编辑 ]
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2017-10-25 13:07
  • 签到天数: 15 天

    [LV.4]偶尔看看III

     楼主| 发表于 2010-3-13 19:23:39 | 显示全部楼层
    呵呵 /:good  
    向lgjxj学习

    tianxj大哥 /:013
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2024-7-9 20:57
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2010-3-14 21:08:43 | 显示全部楼层
    菜鸟 来学习了。。。。呵呵
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-12-1 11:04
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    发表于 2010-4-9 18:55:35 | 显示全部楼层
    照分析结果看岂不是要穷举?
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2020-3-8 12:43
  • 签到天数: 92 天

    [LV.6]常住居民II

    发表于 2010-4-12 18:27:44 | 显示全部楼层
    谢谢楼主的详细解说,收藏了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-4-15 17:50:08 | 显示全部楼层
    谢谢楼主的详细解说,收藏了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2010-5-15 16:43:44 | 显示全部楼层
    进来看一下群众们的分析,大家好!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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