• 标 题:出租车管理 1.2 算法分析
  • 作 者:4st0ne
  • 时 间:004-08-16,16:50
  • 链 接:http://bbs.pediy.com

【破文作者】sLtYJ[D.4s][DFCG]

【作者邮箱】sltyj@263.net

【作者主页】龙族联盟论坛 DFCG官方论坛

【使用工具】OD,PEiD

【操作系统】Windows XP

【软件名称】出租车管理 1.2

【下载地址】http://bj.onlinedown.net/soft/27925.htm

【软件大小】1.41 MB

【程序语言】Borland Delphi 6.0 - 7.0

【软件简介】

 一个小而全的出租车管理软件,能实现车辆,车票,驾驶员,缴费的查询等 

【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)

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

【内容】

    首先用Peid 检测程序程序,无壳!显示编写语言是Borland Delphi 6.0 - 7.0,随即拿出DEDE来进行反编译...
另人郁闷的是居然出错,可能作者动了手脚吧~~只好用OD直接来了,下断BP GetWindowTextA,点击注册后被OD断下,经过
一番寻找,终于找到关键点,下面是小弟的一点肤浅分析,有错误的地方还请各位前辈多多指点!谢过!

005271CF   .  55            PUSH    EBP                              ;  //来到这里
005271D0   .  68 05745200   PUSH    00527405
005271D5   .  64:FF30       PUSH    DWORD PTR FS:[EAX]
005271D8   .  64:8920       MOV     FS:[EAX],ESP
005271DB   .  8D85 F4FDFFFF LEA     EAX,[EBP-20C]
005271E1   .  8B55 FC       MOV     EDX,[EBP-4]                      ;  user32.77D13A50
005271E4   .  8B92 08030000 MOV     EDX,[EDX+308]                    ;  user32.77D154B4
005271EA   .  B9 FF000000   MOV     ECX,0FF
005271EF   .  E8 94D3EDFF   CALL    00404588                         ;  //计算特征码的长度 我的等于17位 十六进制就是11
005271F4   .  BF FF000000   MOV     EDI,0FF
005271F9   .  8D85 F4FEFFFF LEA     EAX,[EBP-10C]
005271FF   >  C600 20       MOV     BYTE PTR [EAX],20
00527202   .  40            INC     EAX
00527203   .  4F            DEC     EDI
00527204   .^ 75 F9         JNZ     SHORT 005271FF
00527206   .  8B45 FC       MOV     EAX,[EBP-4]                      ;  user32.77D13A50
00527209   .  8B80 08030000 MOV     EAX,[EAX+308]                    ;  //得到特征码  d 00A7AC54
0052720F   .  E8 98D3EDFF   CALL    004045AC
00527214   .  85C0          TEST    EAX,EAX                          ;  //比较
00527216   .  7E 6A         JLE     SHORT 00527282
00527218   .  8945 F4       MOV     [EBP-C],EAX
0052721B   .  BF 01000000   MOV     EDI,1                            ;  //EDI=1 准备作为记位器
00527220   .  8DB5 F5FDFFFF LEA     ESI,[EBP-20B]
00527226   .  8D9D F5FEFFFF LEA     EBX,[EBP-10B]
0052722C   >  803E 2D       CMP     BYTE PTR [ESI],2D                ;  //判断得到的特征码是否为"-"
0052722F   .  74 2F         JE      SHORT 00527260                   ;  //是就跳过
00527231   .  8D85 F0FDFFFF LEA     EAX,[EBP-210]
00527237   .  8A16          MOV     DL,[ESI]
00527239   .  E8 96D2EDFF   CALL    004044D4                         ;  //得到数字的十六进制值
0052723E   .  8B85 F0FDFFFF MOV     EAX,[EBP-210]
00527244   .  E8 0F1EEEFF   CALL    00409058                         ;  //将得到的十六进制还原为数字 结果放入EAX
00527249   .  8BC8          MOV     ECX,EAX                          ;  //ECX=EAX
0052724B   .  83C1 43       ADD     ECX,43                           ;  //ECX=ECX+43
0052724E   .  8BC7          MOV     EAX,EDI                          ;  //EAX=EDI(数字位数)
00527250   .  51            PUSH    ECX                              ;  //压入ECX
00527251   .  B9 06000000   MOV     ECX,6                            ;  //ECX=6
00527256   .  99            CDQ                                      ;  //将EAX的32位值扩展64位,需要EDX(这里EDX清零)
00527257   .  F7F9          IDIV    ECX                              ;  //EAX=EAX/ECX 就是将数字位数除于6,余数进EDX
00527259   .  59            POP     ECX                              ;  //弹出ECX
0052725A   .  03CA          ADD     ECX,EDX                          ;  //ECX=ECX+EDX
0052725C   .  880B          MOV     [EBX],CL                         ;  //ECX的值转化成字符-→就是注册码
0052725E   .  EB 09         JMP     SHORT 00527269
00527260   >  B8 5A000000   MOV     EAX,5A                           ;  //EAX=5A
00527265   .  2BC7          SUB     EAX,EDI                          ;  //EAX=EAX-EDI(数字位数)
00527267   .  8803          MOV     [EBX],AL                         ;  //得到的十六进制值转为字符
00527269   >  8BC7          MOV     EAX,EDI
0052726B   .  B9 06000000   MOV     ECX,6                            ;  ECX=6
00527270   .  99            CDQ
00527271   .  F7F9          IDIV    ECX                              ;  //EAX=EAX/ECX 就是将数字位数除于6,余数进EDX
00527273   .  85D2          TEST    EDX,EDX                          ;  //检查余数是否为零
00527275   .  75 03         JNZ     SHORT 0052727A                   ;  //不是,跳...
00527277   .  C603 2D       MOV     BYTE PTR [EBX],2D                ;  //余数为零,给注册码加上"-"符号
0052727A   >  47            INC     EDI                              ;  //EDI=EDI+1  作为记位器
0052727B   .  43            INC     EBX                              ;  //组合已得到的注册码
0052727C   .  46            INC     ESI
0052727D   .  FF4D F4       DEC     DWORD PTR [EBP-C]                ;  //计数器减1
00527280   .^ 75 AA         JNZ     SHORT 0052722C                   ;  //比较是否计算完成
00527282   >  8D85 E8FDFFFF LEA     EAX,[EBP-218]
00527288   .  8D95 F4FEFFFF LEA     EDX,[EBP-10C]                    ;  //d 12F1C4 可看到注册码 在次亦可制作内存注册机
0052728E   .  E8 BDD2EDFF   CALL    00404550
00527293   .  8B85 E8FDFFFF MOV     EAX,[EBP-218]
00527299   .  8D95 ECFDFFFF LEA     EDX,[EBP-214]
0052729F   .  E8 1019EEFF   CALL    00408BB4
005272A4   .  8B95 ECFDFFFF MOV     EDX,[EBP-214]                    ;  comctl32.77315889
005272AA   .  8D85 F4FEFFFF LEA     EAX,[EBP-10C]
005272B0   .  B9 FF000000   MOV     ECX,0FF
005272B5   .  E8 CED2EDFF   CALL    00404588
005272BA   .  8D95 E4FDFFFF LEA     EDX,[EBP-21C]
005272C0   .  8B45 FC       MOV     EAX,[EBP-4]                      ;  user32.77D13A50
005272C3   .  8B80 00030000 MOV     EAX,[EAX+300]
005272C9   .  E8 D244F4FF   CALL    0046B7A0
005272CE   .  8B85 E4FDFFFF MOV     EAX,[EBP-21C]                    ;  //d 00ABA26C 得到假码 刚才输的是676767676767
005272D4   .  50            PUSH    EAX                              ;  //放入EAX
005272D5   .  8D85 E0FDFFFF LEA     EAX,[EBP-220]
005272DB   .  8D95 F4FEFFFF LEA     EDX,[EBP-10C]
005272E1   .  E8 6AD2EDFF   CALL    00404550
005272E6   .  8B95 E0FDFFFF MOV     EDX,[EBP-220]                    ;  user32.77D13B33
005272EC   .  58            POP     EAX                              ;  //弹出假码 676767676767
005272ED   .  E8 06D4EDFF   CALL    004046F8
005272F2      0F85 BC000000 JNZ     005273B4                         ;  //比较 不一样 跳 (爆破点)
005272F8   .  B2 01         MOV     DL,1
005272FA   .  A1 60164400   MOV     EAX,[441660]
005272FF   .  E8 C8A4F1FF   CALL    004417CC
00527304   .  8945 F8       MOV     [EBP-8],EAX
00527307   .  33C0          XOR     EAX,EAX
00527309   .  55            PUSH    EBP
0052730A   .  68 77735200   PUSH    00527377
0052730F   .  64:FF30       PUSH    DWORD PTR FS:[EAX]
00527312   .  64:8920       MOV     FS:[EAX],ESP
00527315   .  BA 02000080   MOV     EDX,80000002
0052731A   .  8B45 F8       MOV     EAX,[EBP-8]                      ;  //下面的操作就是将注册信息写入注册表
0052731D   .  E8 86A5F1FF   CALL    004418A8
00527322   .  B1 01         MOV     CL,1
00527324   .  BA 1C745200   MOV     EDX,0052741C                     ;  ASCII "Software\\Microsoft\\Windows\\CurrentVersion"
00527329   .  8B45 F8       MOV     EAX,[EBP-8]
0052732C   .  E8 BBA6F1FF   CALL    004419EC
00527331   .  84C0          TEST    AL,AL
00527333   .  74 24         JE      SHORT 00527359
00527335   .  8D85 DCFDFFFF LEA     EAX,[EBP-224]
0052733B   .  8D95 F4FEFFFF LEA     EDX,[EBP-10C]
00527341   .  E8 0AD2EDFF   CALL    00404550
00527346   .  8B8D DCFDFFFF MOV     ECX,[EBP-224]
0052734C   .  BA 50745200   MOV     EDX,00527450                     ;  ASCII "ProductMac"
00527351   .  8B45 F8       MOV     EAX,[EBP-8]
00527354   .  E8 2FA8F1FF   CALL    00441B88
00527359   >  33C0          XOR     EAX,EAX
0052735B   .  5A            POP     EDX
0052735C   .  59            POP     ECX
0052735D   .  59            POP     ECX
0052735E   .  64:8910       MOV     FS:[EAX],EDX
00527361   .  68 7E735200   PUSH    0052737E
00527366   >  8B45 F8       MOV     EAX,[EBP-8]
00527369   .  E8 0AA5F1FF   CALL    00441878
0052736E   .  8B45 F8       MOV     EAX,[EBP-8]
00527371   .  E8 06C1EDFF   CALL    0040347C
00527376   .  C3            RETN

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

【总结】

总得来说,此软件的算法还是比较简单的!就是依次取得机器的特征码,然后进行运算,最后结果转化为字符!如此循环....组合后得到最后的注册码!水平有限,有什么不对的地方请各位指正,谢谢!:)

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

【爆破地址】

005272F2 JNZ--→NOP

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

【版权声明】本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!