- UID
- 8671
注册时间2006-2-27
阅读权限40
最后登录1970-1-1
独步武林
TA的每日心情 | 开心 2018-5-6 16:27 |
---|
签到天数: 7 天 [LV.3]偶尔看看II
|
破文标题:申请加入[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 编辑 ] |
|