首页
社区
课程
招聘
[原创]东山程序小组《英语口语考试练习系统2007》算法分析及注册机
发表于: 2008-2-12 00:09 5813

[原创]东山程序小组《英语口语考试练习系统2007》算法分析及注册机

2008-2-12 00:09
5813
【文章标题】: 东山程序小组《英语口语考试练习系统2007》算法分析及注册机
【文章作者】: 海浪轻风(黄仁来)
【作者邮箱】: futuring@126.com
【作者主页】: http://hi.baidu.com/beyond0769
【软件名称】: 《英语口语考试练习系统2007》
【下载地址】: http://www.dpg2008.cn/200.html
【保护方式】: 加壳,序列号
【编写语言】: Delphi
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  应网友请求,小试东山程序小组《英语口语考试练习系统2007》,发现算法比较简单,不敢独享。
  PEid查壳为未知,但脱壳过程比较简单,找到入口OPE=0046D7C4, 为Delphi所编。在注册窗口输入假码后
  提示重新启动来验证。OD截入,查超级字符串,很快定位在 0046CABC 为算法过程入口。
  
  0046CABC  /.  55            PUSH EBP
  0046CABD  |.  8BEC          MOV EBP,ESP
  0046CABF  |.  B9 04000000   MOV ECX,4
  0046CAC4  |>  6A 00         /PUSH 0
  0046CAC6  |.  6A 00         |PUSH 0
  0046CAC8  |.  49            |DEC ECX
  0046CAC9  |.^ 75 F9         \JNZ SHORT UnStart.0046CAC4
  0046CACB  |.  51            PUSH ECX
  0046CACC  |.  53            PUSH EBX
  0046CACD  |.  56            PUSH ESI
  0046CACE  |.  57            PUSH EDI
  0046CACF  |.  8BD8          MOV EBX,EAX
  0046CAD1  |.  33C0          XOR EAX,EAX
  0046CAD3  |.  55            PUSH EBP
  0046CAD4  |.  68 61CC4600   PUSH UnStart.0046CC61
  0046CAD9  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
  0046CADC  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
  0046CADF  |.  8D45 E8       LEA EAX,DWORD PTR SS:[EBP-18]
  0046CAE2  |.  50            PUSH EAX
  0046CAE3  |.  B1 01         MOV CL,1
  0046CAE5  |.  BA 78CC4600   MOV EDX,UnStart.0046CC78                 ;  main.exe
  0046CAEA  |.  8BC3          MOV EAX,EBX
  0046CAEC  |.  E8 AF070000   CALL UnStart.0046D2A0
  0046CAF1  |.  8B55 E8       MOV EDX,DWORD PTR SS:[EBP-18]
  0046CAF4  |.  8B83 18030000 MOV EAX,DWORD PTR DS:[EBX+318]
  0046CAFA  |.  E8 75ADFCFF   CALL UnStart.00437874
  0046CAFF  |.  8D55 E0       LEA EDX,DWORD PTR SS:[EBP-20]
  0046CB02  |.  33C0          XOR EAX,EAX
  0046CB04  |.  E8 DB5EF9FF   CALL UnStart.004029E4
  0046CB09  |.  8B45 E0       MOV EAX,DWORD PTR SS:[EBP-20]
  0046CB0C  |.  8D55 E4       LEA EDX,DWORD PTR SS:[EBP-1C]
  0046CB0F  |.  E8 60B9F9FF   CALL UnStart.00408474
  0046CB14  |.  8B55 E4       MOV EDX,DWORD PTR SS:[EBP-1C]
  0046CB17  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
  0046CB1A  |.  B9 8CCC4600   MOV ECX,UnStart.0046CC8C                 ;  registerid.ini
  0046CB1F  |.  E8 8077F9FF   CALL UnStart.004042A4
  0046CB24  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
  0046CB27  |.  E8 B8B8F9FF   CALL UnStart.004083E4
  0046CB2C  |.  84C0          TEST AL,AL
  0046CB2E  |.  0F84 DA000000 JE UnStart.0046CC0E
  0046CB34  |.  8B4D FC       MOV ECX,DWORD PTR SS:[EBP-4]
  0046CB37  |.  B2 01         MOV DL,1
  0046CB39  |.  A1 78B64200   MOV EAX,DWORD PTR DS:[42B678]
  0046CB3E  |.  E8 E5EBFBFF   CALL UnStart.0042B728
  0046CB43  |.  8BF0          MOV ESI,EAX
  0046CB45  |.  68 A4CC4600   PUSH UnStart.0046CCA4                    ;  1
  0046CB4A  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
  0046CB4D  |.  50            PUSH EAX
  0046CB4E  |.  B9 B0CC4600   MOV ECX,UnStart.0046CCB0                 ;  serialid
  0046CB53  |.  BA C4CC4600   MOV EDX,UnStart.0046CCC4                 ;  reginfo
  0046CB58  |.  8BC6          MOV EAX,ESI
  0046CB5A  |.  8B38          MOV EDI,DWORD PTR DS:[EAX]
  0046CB5C  |.  FF17          CALL DWORD PTR DS:[EDI]
  0046CB5E  |.  8BC3          MOV EAX,EBX
  0046CB60  |.  E8 3B050000   CALL UnStart.0046D0A0                    ;  返回机器码,这里我的是"5JVBVF3T            "
  0046CB65  |.  8BD0          MOV EDX,EAX
  0046CB67  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
  0046CB6A  |.  E8 2176F9FF   CALL UnStart.00404190
  0046CB6F  |.  8D4D DC       LEA ECX,DWORD PTR SS:[EBP-24]
  0046CB72  |.  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]
  0046CB75  |.  8BC3          MOV EAX,EBX
  0046CB77  |.  E8 94060000   CALL UnStart.0046D210
  0046CB7C  |.  8B55 DC       MOV EDX,DWORD PTR SS:[EBP-24]
  0046CB7F  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
  0046CB82  |.  E8 A974F9FF   CALL UnStart.00404030
  0046CB87  |.  68 A4CC4600   PUSH UnStart.0046CCA4                    ;  1
  0046CB8C  |.  8D45 F0       LEA EAX,DWORD PTR SS:[EBP-10]
  0046CB8F  |.  50            PUSH EAX                                 ;  
  0046CB90  |.  B9 D4CC4600   MOV ECX,UnStart.0046CCD4                 ;  registerid
  0046CB95  |.  BA C4CC4600   MOV EDX,UnStart.0046CCC4                 ;  reginfo
  0046CB9A  |.  8BC6          MOV EAX,ESI
  0046CB9C  |.  8B38          MOV EDI,DWORD PTR DS:[EAX]
  0046CB9E  |.  FF17          CALL DWORD PTR DS:[EDI]
  0046CBA0  |.  8D45 EC       LEA EAX,DWORD PTR SS:[EBP-14]
  0046CBA3  |.  50            PUSH EAX                                 ;  
  0046CBA4  |.  8B4D F4       MOV ECX,DWORD PTR SS:[EBP-C]             ;  机器码 "5JVBVF3T"
  0046CBA7  |.  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]             ;  EDX=测试序列号
  0046CBAA  |.  8BC3          MOV EAX,EBX
  0046CBAC  |.  E8 7B010000   CALL UnStart.0046CD2C                    ;  关键算法过程,F7进入
  0046CBB1  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]
  0046CBB4  |.  8B55 EC       MOV EDX,DWORD PTR SS:[EBP-14]
  0046CBB7  |.  E8 E877F9FF   CALL UnStart.004043A4
  0046CBBC  |.  75 0F         JNZ SHORT UnStart.0046CBCD         ;经典爆破点,一跳就挂;
  0046CBBE  |.  B2 01         MOV DL,1
  0046CBC0  |.  8B83 0C030000 MOV EAX,DWORD PTR DS:[EBX+30C]
  0046CBC6  |.  E8 99ABFCFF   CALL UnStart.00437764
  0046CBCB  |.  EB 38         JMP SHORT UnStart.0046CC05
  0046CBCD  |>  BA E8CC4600   MOV EDX,UnStart.0046CCE8                 ;  (未注册)
  0046CBD2  |.  8B83 0C030000 MOV EAX,DWORD PTR DS:[EBX+30C]
  0046CBD8  |.  E8 97ACFCFF   CALL UnStart.00437874
  0046CBDD  |.  B2 01         MOV DL,1
  0046CBDF  |.  8B83 0C030000 MOV EAX,DWORD PTR DS:[EBX+30C]
  0046CBE5  |.  E8 7AABFCFF   CALL UnStart.00437764
  0046CBEA  |.  8B9B 10030000 MOV EBX,DWORD PTR DS:[EBX+310]
  0046CBF0  |.  BA FCCC4600   MOV EDX,UnStart.0046CCFC                 ;  未注册版本只能使用两分钟。\n注册后可正常使用。
  0046CBF5  |.  8BC3          MOV EAX,EBX
  0046CBF7  |.  E8 78ACFCFF   CALL UnStart.00437874
  0046CBFC  |.  B2 01         MOV DL,1
  0046CBFE  |.  8BC3          MOV EAX,EBX
  0046CC00  |.  E8 5FABFCFF   CALL UnStart.00437764
  0046CC05  |>  8BC6          MOV EAX,ESI
  0046CC07  |.  E8 3C66F9FF   CALL UnStart.00403248
  0046CC0C  |.  EB 38         JMP SHORT UnStart.0046CC46
  0046CC0E  |>  BA E8CC4600   MOV EDX,UnStart.0046CCE8                 ;  (未注册)
  0046CC13  |.  8B83 0C030000 MOV EAX,DWORD PTR DS:[EBX+30C]
  0046CC19  |.  E8 56ACFCFF   CALL UnStart.00437874
  0046CC1E  |.  B2 01         MOV DL,1
  0046CC20  |.  8B83 0C030000 MOV EAX,DWORD PTR DS:[EBX+30C]
  0046CC26  |.  E8 39ABFCFF   CALL UnStart.00437764
  0046CC2B  |.  8B9B 10030000 MOV EBX,DWORD PTR DS:[EBX+310]
  0046CC31  |.  BA FCCC4600   MOV EDX,UnStart.0046CCFC                 ;  未注册版本只能使用两分钟。\n注册后可正常使用。
  0046CC36  |.  8BC3          MOV EAX,EBX
  0046CC38  |.  E8 37ACFCFF   CALL UnStart.00437874
  0046CC3D  |.  B2 01         MOV DL,1
  0046CC3F  |.  8BC3          MOV EAX,EBX
  0046CC41  |.  E8 1EABFCFF   CALL UnStart.00437764
  0046CC46  |>  33C0          XOR EAX,EAX
  0046CC48  |.  5A            POP EDX
  0046CC49  |.  59            POP ECX
  0046CC4A  |.  59            POP ECX
  0046CC4B  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
  0046CC4E  |.  68 68CC4600   PUSH UnStart.0046CC68
  0046CC53  |>  8D45 DC       LEA EAX,DWORD PTR SS:[EBP-24]
  0046CC56  |.  BA 09000000   MOV EDX,9
  0046CC5B  |.  E8 5C73F9FF   CALL UnStart.00403FBC
  0046CC60  \.  C3            RETN
  
  _____________
  0046CBAC 处F7进入,看算法过程
  
  0046CD2C  /$  55            PUSH EBP
  0046CD2D  |.  8BEC          MOV EBP,ESP
  0046CD2F  |.  83C4 E8       ADD ESP,-18
  0046CD32  |.  53            PUSH EBX
  0046CD33  |.  56            PUSH ESI
  0046CD34  |.  57            PUSH EDI
  0046CD35  |.  33DB          XOR EBX,EBX
  0046CD37  |.  895D EC       MOV DWORD PTR SS:[EBP-14],EBX
  0046CD3A  |.  895D E8       MOV DWORD PTR SS:[EBP-18],EBX
  0046CD3D  |.  894D F8       MOV DWORD PTR SS:[EBP-8],ECX
  0046CD40  |.  8955 FC       MOV DWORD PTR SS:[EBP-4],EDX
  0046CD43  |.  8B7D 08       MOV EDI,DWORD PTR SS:[EBP+8]
  0046CD46  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
  0046CD49  |.  E8 FA76F9FF   CALL UnStart.00404448
  0046CD4E  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
  0046CD51  |.  E8 F276F9FF   CALL UnStart.00404448
  0046CD56  |.  33C0          XOR EAX,EAX
  0046CD58  |.  55            PUSH EBP
  0046CD59  |.  68 41CF4600   PUSH UnStart.0046CF41
  0046CD5E  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
  0046CD61  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
  0046CD64  |.  33C0          XOR EAX,EAX
  0046CD66  |.  8945 F4       MOV DWORD PTR SS:[EBP-C],EAX
  0046CD69  |.  33C0          XOR EAX,EAX
  0046CD6B  |.  8945 F0       MOV DWORD PTR SS:[EBP-10],EAX
  0046CD6E  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  序列号
  0046CD71  |.  E8 E274F9FF   CALL UnStart.00404258                    ;  取长度
  0046CD76  |.  8BD8          MOV EBX,EAX
  0046CD78  |.  85DB          TEST EBX,EBX                             ;  不能等于0
  0046CD7A  |.  7E 14         JLE SHORT UnStart.0046CD90
  0046CD7C  |.  BE 01000000   MOV ESI,1
  0046CD81  |>  8B45 FC       /MOV EAX,DWORD PTR SS:[EBP-4]
  0046CD84  |.  0FB64430 FF   |MOVZX EAX,BYTE PTR DS:[EAX+ESI-1]
  0046CD89  |.  0145 F4       |ADD DWORD PTR SS:[EBP-C],EAX            ;  [EBP-C] 返回序列号ASCII之和,记为 S1
  0046CD8C  |.  46            |INC ESI
  0046CD8D  |.  4B            |DEC EBX
  0046CD8E  |.^ 75 F1         \JNZ SHORT UnStart.0046CD81
  0046CD90  |>  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
  0046CD93  |.  E8 C074F9FF   CALL UnStart.00404258
  0046CD98  |.  8BD8          MOV EBX,EAX
  0046CD9A  |.  85DB          TEST EBX,EBX                             ;  机器码的长度不能为0
  0046CD9C  |.  7E 14         JLE SHORT UnStart.0046CDB2
  0046CD9E  |.  BE 01000000   MOV ESI,1
  0046CDA3  |>  8B45 F8       /MOV EAX,DWORD PTR SS:[EBP-8]
  0046CDA6  |.  0FB64430 FF   |MOVZX EAX,BYTE PTR DS:[EAX+ESI-1]
  0046CDAB  |.  0145 F0       |ADD DWORD PTR SS:[EBP-10],EAX           ;  [EBP-10]计算机器码ASCII之和 记为S2
  0046CDAE  |.  46            |INC ESI
  0046CDAF  |.  4B            |DEC EBX
  0046CDB0  |.^ 75 F1         \JNZ SHORT UnStart.0046CDA3
  0046CDB2  |>  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
  0046CDB5  |.  83E8 03       SUB EAX,3                                ;  S1 - 3
  0046CDB8  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
  0046CDBB  |.  4A            DEC EDX                                  ;  S2 - 1
  0046CDBC  |.  F7EA          IMUL EDX                                 ;  以上两者相乘
  0046CDBE  |.  99            CDQ
  0046CDBF  |.  33C2          XOR EAX,EDX
  0046CDC1  |.  2BC2          SUB EAX,EDX
  0046CDC3  |.  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
  0046CDC6  |.  E8 31B1F9FF   CALL UnStart.00407EFC                    ;  将结果转化为十进制无字符值
  0046CDCB  |.  8BC7          MOV EAX,EDI
  0046CDCD  |.  8B55 EC       MOV EDX,DWORD PTR SS:[EBP-14]
  0046CDD0  |.  E8 1772F9FF   CALL UnStart.00403FEC                    ;  不重要
  0046CDD5  |.  8B07          MOV EAX,DWORD PTR DS:[EDI]
  0046CDD7  |.  E8 7C74F9FF   CALL UnStart.00404258                    ;  不重要
  0046CDDC  |.  8BD8          MOV EBX,EAX
  0046CDDE  |.  85DB          TEST EBX,EBX                             ;  长度不能为0
  0046CDE0  |.  0F8E 29010000 JLE UnStart.0046CF0F
  0046CDE6  |.  BE 01000000   MOV ESI,1
  0046CDEB  |>  8B07          /MOV EAX,DWORD PTR DS:[EDI]              ;  循环查表 adge0z0123u974
  0046CDED  |.  8A4430 FF     |MOV AL,BYTE PTR DS:[EAX+ESI-1]          ;  取大写值为真正注册码 OK
  0046CDF1  |.  3C 31         |CMP AL,31
  0046CDF3  |.  75 12         |JNZ SHORT UnStart.0046CE07
  0046CDF5  |.  8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
  0046CDF8  |.  BA 5CCF4600   |MOV EDX,UnStart.0046CF5C                ;  a
  0046CDFD  |.  E8 5E74F9FF   |CALL UnStart.00404260
  0046CE02  |.  E9 00010000   |JMP UnStart.0046CF07
  0046CE07  |>  3C 32         |CMP AL,32
  0046CE09  |.  75 12         |JNZ SHORT UnStart.0046CE1D
  0046CE0B  |.  8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
  0046CE0E  |.  BA 68CF4600   |MOV EDX,UnStart.0046CF68                ;  d
  0046CE13  |.  E8 4874F9FF   |CALL UnStart.00404260                   ;  (初始 cpu 选择)
  0046CE18  |.  E9 EA000000   |JMP UnStart.0046CF07
  0046CE1D  |>  3C 33         |CMP AL,33
  0046CE1F  |.  75 12         |JNZ SHORT UnStart.0046CE33
  0046CE21  |.  8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
  0046CE24  |.  BA 74CF4600   |MOV EDX,UnStart.0046CF74                ;  g
  0046CE29  |.  E8 3274F9FF   |CALL UnStart.00404260
  0046CE2E  |.  E9 D4000000   |JMP UnStart.0046CF07
  0046CE33  |>  3C 34         |CMP AL,34
  0046CE35  |.  75 12         |JNZ SHORT UnStart.0046CE49
  0046CE37  |.  8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
  0046CE3A  |.  BA 80CF4600   |MOV EDX,UnStart.0046CF80                ;  e
  0046CE3F  |.  E8 1C74F9FF   |CALL UnStart.00404260
  0046CE44  |.  E9 BE000000   |JMP UnStart.0046CF07
  0046CE49  |>  3C 35         |CMP AL,35
  0046CE4B  |.  75 12         |JNZ SHORT UnStart.0046CE5F
  0046CE4D  |.  8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
  0046CE50  |.  BA 8CCF4600   |MOV EDX,UnStart.0046CF8C                ;  0
  0046CE55  |.  E8 0674F9FF   |CALL UnStart.00404260
  0046CE5A  |.  E9 A8000000   |JMP UnStart.0046CF07
  0046CE5F  |>  3C 36         |CMP AL,36
  0046CE61  |.  75 12         |JNZ SHORT UnStart.0046CE75
  0046CE63  |.  8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
  0046CE66  |.  BA 98CF4600   |MOV EDX,UnStart.0046CF98                ;  z
  0046CE6B  |.  E8 F073F9FF   |CALL UnStart.00404260
  0046CE70  |.  E9 92000000   |JMP UnStart.0046CF07
  0046CE75  |>  3C 37         |CMP AL,37
  0046CE77  |.  75 0F         |JNZ SHORT UnStart.0046CE88
  0046CE79  |.  8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
  0046CE7C  |.  BA 8CCF4600   |MOV EDX,UnStart.0046CF8C                ;  0
  0046CE81  |.  E8 DA73F9FF   |CALL UnStart.00404260
  0046CE86  |.  EB 7F         |JMP SHORT UnStart.0046CF07
  0046CE88  |>  3C 38         |CMP AL,38
  0046CE8A  |.  75 0F         |JNZ SHORT UnStart.0046CE9B
  0046CE8C  |.  8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
  0046CE8F  |.  BA A4CF4600   |MOV EDX,UnStart.0046CFA4                ;  1
  0046CE94  |.  E8 C773F9FF   |CALL UnStart.00404260
  0046CE99  |.  EB 6C         |JMP SHORT UnStart.0046CF07
  0046CE9B  |>  3C 39         |CMP AL,39
  0046CE9D  |.  75 0F         |JNZ SHORT UnStart.0046CEAE
  0046CE9F  |.  8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
  0046CEA2  |.  BA B0CF4600   |MOV EDX,UnStart.0046CFB0                ;  2
  0046CEA7  |.  E8 B473F9FF   |CALL UnStart.00404260
  0046CEAC  |.  EB 59         |JMP SHORT UnStart.0046CF07
  0046CEAE  |>  3C 30         |CMP AL,30
  0046CEB0  |.  75 0F         |JNZ SHORT UnStart.0046CEC1
  0046CEB2  |.  8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
  0046CEB5  |.  BA BCCF4600   |MOV EDX,UnStart.0046CFBC                ;  3
  0046CEBA  |.  E8 A173F9FF   |CALL UnStart.00404260
  0046CEBF  |.  EB 46         |JMP SHORT UnStart.0046CF07
  0046CEC1  |>  3C 20         |CMP AL,20
  0046CEC3  |.  75 0F         |JNZ SHORT UnStart.0046CED4
  0046CEC5  |.  8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
  0046CEC8  |.  BA C8CF4600   |MOV EDX,UnStart.0046CFC8                ;  u
  0046CECD  |.  E8 8E73F9FF   |CALL UnStart.00404260
  0046CED2  |.  EB 33         |JMP SHORT UnStart.0046CF07
  0046CED4  |>  3C 5F         |CMP AL,5F
  0046CED6  |.  75 0F         |JNZ SHORT UnStart.0046CEE7
  0046CED8  |.  8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
  0046CEDB  |.  BA D4CF4600   |MOV EDX,UnStart.0046CFD4                ;  9
  0046CEE0  |.  E8 7B73F9FF   |CALL UnStart.00404260
  0046CEE5  |.  EB 20         |JMP SHORT UnStart.0046CF07
  0046CEE7  |>  3C 2D         |CMP AL,2D
  0046CEE9  |.  75 0F         |JNZ SHORT UnStart.0046CEFA
  0046CEEB  |.  8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
  0046CEEE  |.  BA E0CF4600   |MOV EDX,UnStart.0046CFE0                ;  7
  0046CEF3  |.  E8 6873F9FF   |CALL UnStart.00404260
  0046CEF8  |.  EB 0D         |JMP SHORT UnStart.0046CF07
  0046CEFA  |>  8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
  0046CEFD  |.  BA ECCF4600   |MOV EDX,UnStart.0046CFEC                ;  4
  0046CF02  |.  E8 5973F9FF   |CALL UnStart.00404260
  0046CF07  |>  46            |INC ESI
  0046CF08  |.  4B            |DEC EBX
  0046CF09  |.^ 0F85 DCFEFFFF \JNZ UnStart.0046CDEB
  0046CF0F  |>  8BC7          MOV EAX,EDI
  0046CF11  |.  8B55 E8       MOV EDX,DWORD PTR SS:[EBP-18]
  0046CF14  |.  E8 D370F9FF   CALL UnStart.00403FEC
  0046CF19  |.  33C0          XOR EAX,EAX
  0046CF1B  |.  5A            POP EDX
  0046CF1C  |.  59            POP ECX
  0046CF1D  |.  59            POP ECX
  0046CF1E  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
  0046CF21  |.  68 48CF4600   PUSH UnStart.0046CF48
  0046CF26  |>  8D45 E8       LEA EAX,DWORD PTR SS:[EBP-18]
  0046CF29  |.  BA 02000000   MOV EDX,2
  0046CF2E  |.  E8 8970F9FF   CALL UnStart.00403FBC
  0046CF33  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
  0046CF36  |.  BA 02000000   MOV EDX,2
  0046CF3B  |.  E8 7C70F9FF   CALL UnStart.00403FBC
  0046CF40  \.  C3            RETN
  
  看代码注释已经可以理解了。
  算法总结:
  1、( 序列号ASCII值 - 3 ) * ( 机器码ASCII值 - 1 ) 结果保存为 R1;
  2、把R1转化为十进制无符号值,再把结果查表adge0z0123u974,取大写结果为真正注册码
  
  至于破解,那就更简单了。把0046CBBC 处JNZ改为JE即可,(或把75改74或NOP掉即可).
  
  [Delphi算法]
  function StrToInt(S: string): integer;
  begin
   Val(S, Result, Result);
  end;
  
  
  function GetAscii(str:string):LongWord;
  var
    i:integer;
    ii:longword;
  begin
    ii:=0;
    for i:= 1 to length(str) do
    ii:=ii+ ord(str[i]);
    Result:=ii;
  end;
  
  function CalculateCode(SerialNumber, MachineCode: string): string;
  //const
   // CHART : String = 'ADGE0Z0123U974';
  var
    i:integer;
    ii:longWord;
    str,Reg:string;
  begin
    ii:=0;
    ii:=(GetAscii(SerialNumber)-3) * (GetAscii(MachineCode)-1);
    str:= inttostr(ii);      //计算结果转化为字符串
    for i:=1 to Length(str) do
    begin
       case strtoint(str[i]) of    //取字符串第i位转换成数字,
         1: Reg:= Reg+ 'A';
         2: Reg:= Reg+ 'D';
         3: Reg:= Reg+ 'G';
         4: Reg:= Reg+ 'E';
         5: Reg:= Reg+ '0';
         6: Reg:= Reg+ 'Z';
         7: Reg:= Reg+ '0';
         8: Reg:= Reg+ '1';
         9: Reg:= Reg+ '2';
         0: Reg:= Reg+ '3'
         else Reg:= Reg+  '4';
       end;
     end;
     Result:=Reg;
  end;
  
  本文只作学习交流用,失误之处敬请诸位大侠赐教!
  请勿用于非法用途。请支持原创国产软件!“海浪轻风”不提供已编译注册机下载
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2008年02月12日 0:07:09

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
破文写的真好,谢谢分享
2008-2-12 07:04
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
3
分析的很好,支持并学习。
2008-2-12 07:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习,学习,得提点兴趣,有耐心才行呀..
2008-2-12 09:39
0
雪    币: 134
活跃值: (84)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
学习了。不错。
2008-2-12 09:57
0
雪    币: 50161
活跃值: (20620)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
6
文章分析的不错。
不过,由于论坛对国产软件不再设为精华帖,还请谅解。
如果是涉及到版权方面,下次你可以用国外软件练习。
参考公告:
公告: 看雪论坛对于所涉及到目标软件的管理2007.10.15
2008-2-12 15:42
0
雪    币: 241
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
精华与否无所谓,感觉在看雪论坛学到很多东西,自己也来凑凑热闹
2008-2-12 19:43
0
雪    币: 212
活跃值: (1645)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
机器码 "5JVBVF3T"

楼主的机器里边硬盘是matrox?
2008-2-12 20:08
0
雪    币: 222
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习学习学习
2008-2-13 02:35
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
非常好的文章,学习了
2008-2-13 16:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
过来看看~
学习了
2008-2-13 18:32
0
雪    币: 10199
活跃值: (3426)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
不错不错照做一次学习一下
2008-2-14 14:52
0
雪    币: 347
活跃值: (30)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
13
不错不错
很好 很强大
很黄 很暴力
楼主说的很对
精华不精华
无所谓
大家互相学习
互相交流才是最重要的
希望楼主能够继续发这样好的文章
让我等菜鸟能够更好的学习
2008-2-14 20:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
好文章,太有实战价值了.
2008-2-14 23:44
0
游客
登录 | 注册 方可回帖
返回
//