飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4996|回复: 16

里诺仓库管理软件 V3.20 单机版算法分析

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

    [LV.3]偶尔看看II

    发表于 2006-6-26 00:54:45 | 显示全部楼层 |阅读模式
    破文标题:申请加入[D.4s]算法分析破文之五;P ;P 
    说  明:入门级,转过来相互学习!
    破解工具:PEiD,OD
    破解时间:2006年4月27日 深夜
    破解声明:各位大侠面前献丑啦,不对的地方恳请指正。
                   我是一只小小的鸟,只想飞得比原来更高。

    软件信息:
    软件名称:里诺仓库管理软件 V3.20 单机版
    下载地址:http://www.skycn.com/soft/14307.html
    软件大小:  5218 KB
    软件语言:  简体中文
    软件类别:  国产软件 / 共享版 / 商业贸易
    应用平台:  Win9x/NT/2000/XP
    加入时间:  2006-04-24 15:23:37
    下载次数:  19309
    联 系 人:  lenosoft21cn.com
    开 发 商:  http://www.lenosoft.net/
    软件介绍:
    里诺仓库管理软件是一款通用性极强的仓库及货物管理软件,软件适用于食品、服装、保健品、电子、贸易、物资、化妆品、电器等工业、商业、贸易领域的企业。+++++++++++++++++++++++++++++++++++

    破解过程含算法跟踪分析:

    一、安装软件后,运行注册有错误提示。PEiD查无壳。
    软件是Borland Delphi 6.0 - 7.0编写。

    二、OD载入后,超级ASCII参串,找到刚才程序提示错误的信息:
    捕获自: - [超级字串参考+        ]
    捕获时间戳:2006/04/27 02:44:20
    ****************************
    066C05FPUSH Depot.0066C138                    软件注册
    066C064PUSH Depot.0066C144                    注册成功,本程序所有功能限制下次启动时将被自动解除,欢迎您成为我们正式版本用户!
    066C0A7PUSH Depot.0066C138                    软件注册
    066C0ACPUSH Depot.0066C194                    注册失败,请检查您的注册名和注册码!
    066C1EBMOV EDX,Depot.0066C24C                 software\zy\depot
    066C1FEMOV EDX,Depot.0066C268                 name
    066C270PUSH EBP                               (初始 cpu 选择)        
    066C397MOV EDX,Depot.0066C3C8                 软件注册
    066C522MOV EDX,Depot.0066C5AC                 depw245d54k
    066C545PUSH Depot.0066C5C0                    -
    066C566PUSH Depot.0066C5C0                    -
    066C600PUSH Depot.0066C698                    警告
    066C605PUSH Depot.0066C6A0                    注册名不能为空!
    066C643PUSH Depot.0066C698                    警告
    066C648PUSH Depot.0066C6B0                    注册码不能为空!
    ****************************
    从而找到程序注册检测代码段:
    用户测试的信息以下:
    注册名:WildCatIII  <---本次分析是以用户名大于或等于4位来分析的,小于4位略为不同。
    试练码:9876543210

    0066BFAE   .  55            PUSH EBP  、、、、、在此下断
    0066BFAF   .  68 EDC06600   PUSH Depot.0066C0ED
    0066BFB4   .  64:FF30       PUSH DWORD PTR FS:[EAX]
    0066BFB7   .  64:8920       MOV DWORD PTR FS:[EAX],ESP
    0066BFBA   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
    0066BFBD   .  E8 AE020000   CALL Depot.0066C270        ;  跟进这个Call
    0066BFC2   .  84C0          TEST AL,AL
    0066BFC4   .  0F84 DB000000 JE Depot.0066C0A5        ;  关键跳转,不等就OVER!

    0066BFCA   .  33C0          XOR EAX,EAX
    0066BFCC   .  55            PUSH EBP
    ~~~中间代码略~~~
    0066C05D   .  6A 40         PUSH 40
    0066C05F   .  68 38C16600   PUSH Depot.0066C138                      ;  软件注册
    0066C064   .  68 44C16600   PUSH Depot.0066C144                      ;  注册成功,本程序所有功能限制下次启动时将被自动解除,欢迎您成为我们正式版本用户!
    ~~中间代码略~~~
    0066C09E   .  E8 7983D9FF   CALL Depot.0040441C
    0066C0A3   .  EB 1A         JMP SHORT Depot.0066C0BF
    0066C0A5   >  6A 40         PUSH 40
    0066C0A7   .  68 38C16600   PUSH Depot.0066C138                      ;  软件注册
    0066C0AC   .  68 94C16600   PUSH Depot.0066C194                      ;  注册失败,请检查您的注册名和注册码!
    0066C0B1   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
    0066C0B4   .  E8 872CE2FF   CALL Depot.0048ED40
    0066C0B9   .  50            PUSH EAX                                 ; |hOwner
    0066C0BA   .  E8 A5BFD9FF   CALL <JMP.&user32.MessageBoxA>           ; \MessageBoxA
    0066C0BF   >  33C0          XOR EAX,EAX
    ////////////////////////////////////////////////////////////////////////////////

    跟66BFBD处的Call来到下面++++++++++++++++++++++
    0066C270  /$  55            PUSH EBP                                 ;  (初始 cpu 选择)
    0066C271  |.  8BEC          MOV EBP,ESP
    ~~中间代码略~~~
    0066C292  |.  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
    0066C295  |.  8B86 08030000 MOV EAX,DWORD PTR DS:[ESI+308]
    0066C29B  |.  E8 98C0E1FF   CALL Depot.00488338
    0066C2A0  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]             ;  试练码
    0066C2A3  |.  8D55 FC       LEA EDX,DWORD PTR SS:[EBP-4]
    0066C2A6  |.  E8 4DD7D9FF   CALL Depot.004099F8
    0066C2AB  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
    0066C2AE  |.  50            PUSH EAX
    0066C2AF  |.  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
    0066C2B2  |.  8B86 04030000 MOV EAX,DWORD PTR DS:[ESI+304]
    0066C2B8  |.  E8 7BC0E1FF   CALL Depot.00488338
    0066C2BD  |.  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]            ;  用户名
    0066C2C0  |.  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
    0066C2C3  |.  E8 30D7D9FF   CALL Depot.004099F8
    0066C2C8  |.  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
    0066C2CB  |.  8D4D F4       LEA ECX,DWORD PTR SS:[EBP-C]
    0066C2CE  |.  8BC6          MOV EAX,ESI
    0066C2D0  |.  E8 FF000000   CALL Depot.0066C3D4    、、、、、、、、跟进这个Call
    0066C2D5  |.  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]             ;  真码出现

    0066C2D8  |.  58            POP EAX
    0066C2D9  |.  E8 328BD9FF   CALL Depot.00404E10                      ;  Call进比较
    0066C2DE  |.  75 50         JNZ SHORT Depot.0066C330                 ;  不等测跳
    0066C2E0  |.  B3 01         MOV BL,1
    ////////////////////////////////////////////////////////////////////////////////

    跟进66C2D0处这个Call来到下面++++++++++++++++++++++++++++++++++++
    0066C3D4  /$  55            PUSH EBP                                 ;  算法部分
    0066C3D5  |.  8BEC          MOV EBP,ESP
    0066C3D7  |.  51            PUSH ECX
    0066C3D8  |.  B9 04000000   MOV ECX,4
    0066C3DD  |>  6A 00         /PUSH 0
    0066C3DF  |.  6A 00         |PUSH 0
    0066C3E1  |.  49            |DEC ECX
    0066C3E2  |.^ 75 F9         \JNZ SHORT Depot.0066C3DD
    0066C3E4  |.  51            PUSH ECX
    0066C3E5  |.  874D FC       XCHG DWORD PTR SS:[EBP-4],ECX
    0066C3E8  |.  53            PUSH EBX
    0066C3E9  |.  56            PUSH ESI
    0066C3EA  |.  57            PUSH EDI
    0066C3EB  |.  8BF9          MOV EDI,ECX
    0066C3ED  |.  8955 FC       MOV DWORD PTR SS:[EBP-4],EDX
    0066C3F0  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  用户名
    0066C3F3  |.  E8 BC8AD9FF   CALL Depot.00404EB4
    0066C3F8  |.  33C0          XOR EAX,EAX

    0066C3FA  |.  55            PUSH EBP
    0066C3FB  |.  68 95C56600   PUSH Depot.0066C595
    0066C400  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
    0066C403  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
    0066C406  |.  8BC7          MOV EAX,EDI
    0066C408  |.  E8 F785D9FF   CALL Depot.00404A04
    0066C40D  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  用户名
    0066C410  |.  E8 AF88D9FF   CALL Depot.00404CC4                      ;  取位数
    0066C415  |.  8BF0          MOV ESI,EAX                              ;  放到ESI中
    0066C417  |.  85F6          TEST ESI,ESI
    0066C419  |.  7E 26         JLE SHORT Depot.0066C441                 ;  少于跳
    0066C41B  |.  BB 01000000   MOV EBX,1                                ;  EBX=1
    0066C420  |>  8D4D EC       /LEA ECX,DWORD PTR SS:[EBP-14]
    0066C423  |.  8B45 FC       |MOV EAX,DWORD PTR SS:[EBP-4]            ;  用户名
    0066C426  |.  0FB64418 FF   |MOVZX EAX,BYTE PTR DS:[EAX+EBX-1]       ;  逐位取值
    0066C42B  |.  33D2          |XOR EDX,EDX
    0066C42D  |.  E8 3EDDD9FF   |CALL Depot.0040A170
    0066C432  |.  8B55 EC       |MOV EDX,DWORD PTR SS:[EBP-14]           ;  16进制值放到EDX中

    从这段代码中我们可以看到程序将用户名转成16进制值。算法分析关键点一
    用户名:WildCatIII 转换后:57696C64436174494949

    0066C435  |.  8D45 F8       |LEA EAX,DWORD PTR SS:[EBP-8]
    0066C438  |.  E8 8F88D9FF   |CALL Depot.00404CCC
    0066C43D  |.  43            |INC EBX                                 ;  EBX每次加一
    0066C43E  |.  4E            |DEC ESI                                 ;  ESI每次减一
    0066C43F  |.^ 75 DF         \JNZ SHORT Depot.0066C420                ;  循环
    0066C441  |>  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]             ;  用户名所取值并排放进EAX中
    0066C444  |.  E8 7B88D9FF   CALL Depot.00404CC4                      ;  取它的位数
    0066C449  |.  8BF0          MOV ESI,EAX                              ;  位数从EAX中放到ESI中
    0066C44B  |.  85F6          TEST ESI,ESI
    0066C44D  |.  7E 2C         JLE SHORT Depot.0066C47B
    0066C44F  |.  BB 01000000   MOV EBX,1                                ;  EBX=1
    0066C454  |>  8B45 F8       /MOV EAX,DWORD PTR SS:[EBP-8]
    0066C457  |.  E8 6888D9FF   |CALL Depot.00404CC4
    0066C45C  |.  2BC3          |SUB EAX,EBX                             ;  EAX-EBX
    0066C45E  |.  8B55 F8       |MOV EDX,DWORD PTR SS:[EBP-8]
    0066C461  |.  8A1402        |MOV DL,BYTE PTR DS:[EDX+EAX]            ;  从后面开始取值
    0066C464  |.  8D45 E8       |LEA EAX,DWORD PTR SS:[EBP-18]
    0066C467  |.  E8 8087D9FF   |CALL Depot.00404BEC
    0066C46C  |.  8B55 E8       |MOV EDX,DWORD PTR SS:[EBP-18]
    0066C46F  |.  8D45 F4       |LEA EAX,DWORD PTR SS:[EBP-C]
    0066C472  |.  E8 5588D9FF   |CALL Depot.00404CCC

    0066C477  |.  43            |INC EBX
    0066C478  |.  4E            |DEC ESI
    0066C479  |.^ 75 D9         \JNZ SHORT Depot.0066C454                ;  循环将用户名所取值变反
    0066C47B  |>  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
    0066C47E  |.  50            PUSH EAX
    0066C47F  |.  B9 04000000   MOV ECX,4
    0066C484  |.  BA 01000000   MOV EDX,1
    0066C489  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ;  EBP-C=变反后的值
    从上面一段代码中我们可以看出程序将用户名转换后的值前后反排,算法分析关键点二
    转换后的值:57696C64436174494949
    反排后的值:94949447163446C69675

             

    0066C48C  |.  E8 938AD9FF   CALL Depot.00404F24
    0066C491  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
    0066C494  |.  50            PUSH EAX
    0066C495  |.  B9 04000000   MOV ECX,4                                ;  ECX=4
    0066C49A  |.  BA 05000000   MOV EDX,5                                ;  EDX=5
    0066C49F  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ;  反值
    0066C4A2  |.  E8 7D8AD9FF   CALL Depot.00404F24                      ;  Call取前面四位
    //经分析,这组码ASCII "9494"做为注册码的第二部分
    0066C4A7  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]             ;  放到EAX中
    0066C4AA  |.  E8 1588D9FF   CALL Depot.00404CC4
    0066C4AF  |.  83F8 04       CMP EAX,4                                ;  EAX与四比较
    0066C4B2  |.  7D 2F         JGE SHORT Depot.0066C4E3                 ;  大于或等于跳
    0066C4B4  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
    0066C4B7  |.  E8 0888D9FF   CALL Depot.00404CC4
    0066C4BC  |.  8BD8          MOV EBX,EAX
    0066C4BE  |.  83FB 03       CMP EBX,3
    0066C4C1  |.  7F 20         JG SHORT Depot.0066C4E3
    0066C4C3  |>  8D4D E4       /LEA ECX,DWORD PTR SS:[EBP-1C]
    0066C4C6  |.  8BC3          |MOV EAX,EBX
    0066C4C8  |.  C1E0 02       |SHL EAX,2
    0066C4CB  |.  33D2          |XOR EDX,EDX
    0066C4CD  |.  E8 9EDCD9FF   |CALL Depot.0040A170
    0066C4D2  |.  8B55 E4       |MOV EDX,DWORD PTR SS:[EBP-1C]
    0066C4D5  |.  8D45 F8       |LEA EAX,DWORD PTR SS:[EBP-8]
    0066C4D8  |.  E8 EF87D9FF   |CALL Depot.00404CCC
    0066C4DD  |.  43            |INC EBX
    0066C4DE  |.  83FB 04       |CMP EBX,4
    0066C4E1  |.^ 75 E0         \JNZ SHORT Depot.0066C4C3
    0066C4E3  |>  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ;  反值第二组四位放进EAX中
    //经分析,这组代码ASCII "9447"做为注册码的第四(最后)部分
    0066C4E6  |.  E8 D987D9FF   CALL Depot.00404CC4
    0066C4EB  |.  83F8 04       CMP EAX,4
    0066C4EE  |.  7D 2F         JGE SHORT Depot.0066C51F
    0066C4F0  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
    0066C4F3  |.  E8 CC87D9FF   CALL Depot.00404CC4
    0066C4F8  |.  8BD8          MOV EBX,EAX
    0066C4FA  |.  83FB 03       CMP EBX,3
    0066C4FD  |.  7F 20         JG SHORT Depot.0066C51F
    0066C4FF  |>  8D4D E0       /LEA ECX,DWORD PTR SS:[EBP-20]
    0066C502  |.  8BC3          |MOV EAX,EBX
    0066C504  |.  C1E0 02       |SHL EAX,2
    0066C507  |.  33D2          |XOR EDX,EDX
    0066C509  |.  E8 62DCD9FF   |CALL Depot.0040A170
    0066C50E  |.  8B55 E0       |MOV EDX,DWORD PTR SS:[EBP-20]
    0066C511  |.  8D45 F4       |LEA EAX,DWORD PTR SS:[EBP-C]
    0066C514  |.  E8 B387D9FF   |CALL Depot.00404CCC
    0066C519  |.  43            |INC EBX
    0066C51A  |.  83FB 04       |CMP EBX,4
    0066C51D  |.^ 75 E0         \JNZ SHORT Depot.0066C4FF
    0066C51F  |>  8D45 F0       LEA EAX,DWORD PTR SS:[EBP-10]
    0066C522  |.  BA ACC56600   MOV EDX,Depot.0066C5AC                   ;  depw245d54k
    0066C527  |.  E8 7085D9FF   CALL Depot.00404A9C                      ;  上面这组ASCII码是作者预设的

    0066C52C  |.  8D45 DC       LEA EAX,DWORD PTR SS:[EBP-24]
    0066C52F  |.  50            PUSH EAX
    0066C530  |.  B9 04000000   MOV ECX,4
    0066C535  |.  BA 01000000   MOV EDX,1
    0066C53A  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ;  预设码放到EAX中
    0066C53D  |.  E8 E289D9FF   CALL Depot.00404F24                      ;  Call取前四位
    0066C542  |.  FF75 DC       PUSH DWORD PTR SS:[EBP-24]
    0066C545  |.  68 C0C56600   PUSH Depot.0066C5C0                      ;  -
    0066C54A  |.  FF75 F8       PUSH DWORD PTR SS:[EBP-8]                ;  反值前四位
    //经分析,这组ASCII "DEPw"做为注册码的第一部分
    0066C54D  |.  8D45 D8       LEA EAX,DWORD PTR SS:[EBP-28]
    0066C550  |.  50            PUSH EAX
    0066C551  |.  B9 05000000   MOV ECX,5                                ;  ECX=5
    0066C556  |.  BA 05000000   MOV EDX,5                                ;  EDX=5
    0066C55B  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ;  预设码
    0066C55E  |.  E8 C189D9FF   CALL Depot.00404F24                      ;  Call取预设码的第5位到第9位
    //经分析,这组ASCII "245d5"做为注册码的第三部分
    0066C563  |.  FF75 D8       PUSH DWORD PTR SS:[EBP-28]
    0066C566  |.  68 C0C56600   PUSH Depot.0066C5C0                      ;  -
    0066C56B  |.  FF75 F4       PUSH DWORD PTR SS:[EBP-C]
    0066C56E  |.  8BC7          MOV EAX,EDI
    0066C570  |.  BA 06000000   MOV EDX,6                                ;  EDX=6
    0066C575  |.  E8 0A88D9FF   CALL Depot.00404D84
    0066C57A  |.  33C0          XOR EAX,EAX
    0066C57C  |.  5A            POP EDX
    0066C57D  |.  59            POP ECX
    0066C57E  |.  59            POP ECX
    0066C57F  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
    0066C582  |.  68 9CC56600   PUSH Depot.0066C59C
    0066C587  |>  8D45 D8       LEA EAX,DWORD PTR SS:[EBP-28]
    0066C58A  |.  BA 0A000000   MOV EDX,0A                               ;  EDX=10
    0066C58F  |.  E8 9484D9FF   CALL Depot.00404A28
    0066C594  \.  C3            RETN
    0066C595   .^ E9 0A7DD9FF   JMP Depot.004042A4
    0066C59A   .^ EB EB         JMP SHORT Depot.0066C587
    0066C59C   .  5F            POP EDI
    0066C59D   .  5E            POP ESI
    0066C59E   .  5B            POP EBX
    0066C59F   .  8BE5          MOV ESP,EBP
    0066C5A1   .  5D            POP EBP
    0066C5A2   .  C3            RETN

    最后得出注册码:ASCII "DEPw-9494245d5-9447"
    第二组与第三组注册码在中间是相连的。
    [算法小结]
    用户名的16进制取值进行反排后:
    取前4位做为真码的第二组注册码。取第二组四位做为真码的第四组注册码。

    软件作者预设的ASCII "DEPw245d54k":
    取前面的4位做为真码的第一组注册码。第5位到第9位做为真码的第三组注册码。

    真码的第二组与第三组在中间是相连的。

    软件的注册成功后的信息保存在注册表的以下位置,删除后可以重新研究:
    HKEY_LOCAL_MACHINE\SOFTWARE\zy\Depot

    +++++++++++++++++++++++++++非常感谢您的阅览!

    [ 本帖最后由 野猫III 于 2006-6-26 01:01 编辑 ]
    2_xzduZgcgUGbO.gif
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-6-28 23:47:39 | 显示全部楼层
    学习,学习,再学习啊
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-6-30 14:54:43 | 显示全部楼层
    呵呵收藏了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-8-4 17:23:47 | 显示全部楼层
    谢谢分享
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2020-7-18 14:10
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2006-9-7 20:46:42 | 显示全部楼层
    学习,学习,再学习啊
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2020-7-18 14:10
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2006-9-7 20:48:27 | 显示全部楼层
    学习,学习,再学习啊
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2016-8-5 17:44
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2006-9-8 16:36:46 | 显示全部楼层
    好文,收藏学习一下
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-5-27 01:38:04 | 显示全部楼层
    /:02 我怎么早就没看见呢,支持大哥,愿大哥再接再厉
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    6 天前
  • 签到天数: 113 天

    [LV.6]常住居民II

    发表于 2007-6-3 08:40:57 | 显示全部楼层
    这个软件听说有暗桩,不知搞定没有
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2007-6-3 13:53:48 | 显示全部楼层
    学习,学习,再学习啊
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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