- UID
- 1542
注册时间2005-5-10
阅读权限40
最后登录1970-1-1
独步武林
TA的每日心情 | 擦汗 2017-9-28 11:05 |
---|
签到天数: 3 天 [LV.2]偶尔看看I
|
【破文标题】FilesafeV7.0企业版算法分析
【破文作者】pentacle[PYG]
【作者邮箱】
【作者主页】www.chinapyg.com
【破解工具】OD汉化第二版、Peid、calc
【破解平台】XP_SP2
【软件名称】FilesafeV7.0企业版
【软件大小】2.2M
【原版下载】http://pickup.mofile.com/0330320223316665 <要分析的快下,偶不会保留太长时间的,网上无企业版本下载>
【保护方式】注册码
【软件简介】FileSafe文件备份同步专家是文件备份同步的顶级工具,它可以实现本机硬盘之间、局域网机器之间、FTP服务器之间以及这三者
两两之间的文件备份和同步。它可以进行各种选择性的备份,具有各种自动触发备份的方式,能够长时间自动工作。它还可以定义以某种方式
自动删除过多的备份文件。备份的文件可以用zip格式压缩来节省硬盘空间,而且压缩文件可以设置密码进行保护。使用FileSafe文件备份同步
专家,可以帮助您避免因为硬盘损坏而造成的大量数据丢失;帮助您自动保存您工作过程中所做项目或文档的每一个版本;帮助您自动备份FTP
服务器上的内容或是自动更新您修改的内容到FTP服务器上,它将成为您必不可少的助手。
------------------------------------------------------------------------
【破解过程】1、查壳
UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
轻松搞定
2、注册算法分析
用OD载入脱完壳的软件。
F9运行,弹出试用提示窗口(限50次及运行60分钟)
不管了。分析注册码是我的任务。因为已经分析过了。所以我直入主题。
假注册码:ABCAEFGHD1234Q678AV1
点确定,断在00405050
00405050 . 6A FF PUSH -1 ; HOHO。我在这儿下断了。开始我们的算法分析之旅吧
00405052 . 68 E0EC4700 PUSH 1FileSaf.0047ECE0 ; 入口地址; SE handler installation
00405057 . 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
0040505D . 50 PUSH EAX
0040505E . 64:8925 00000>MOV DWORD PTR FS:[0],ESP
00405065 . 83EC 10 SUB ESP,10
00405068 . 55 PUSH EBP
00405069 . 8BE9 MOV EBP,ECX
0040506B . E8 804C0100 CALL 1FileSaf.00419CF0 ; 取机器码(硬盘芯片ID)
00405070 . 50 PUSH EAX
00405071 . 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C]
00405075 . E8 BEA60500 CALL 1FileSaf.0045F738
0040507A . A1 14834A00 MOV EAX,DWORD PTR DS:[4A8314]
0040507F . C74424 1C 000>MOV DWORD PTR SS:[ESP+1C],0
00405087 . 894424 04 MOV DWORD PTR SS:[ESP+4],EAX
0040508B . 8D4C24 04 LEA ECX,DWORD PTR SS:[ESP+4]
0040508F . C64424 1C 01 MOV BYTE PTR SS:[ESP+1C],1
00405094 . 51 PUSH ECX
00405095 . 68 4A040000 PUSH 44A
0040509A . 8BCD MOV ECX,EBP
0040509C . E8 AF9A0500 CALL 1FileSaf.0045EB50
004050A1 . 8BC8 MOV ECX,EAX
004050A3 . E8 2C760500 CALL 1FileSaf.0045C6D4 ; 读取假注册码
004050A8 . 8B5424 04 MOV EDX,DWORD PTR SS:[ESP+4]
004050AC . 8B4424 08 MOV EAX,DWORD PTR SS:[ESP+8]
004050B0 . 52 PUSH EDX
004050B1 . 50 PUSH EAX
004050B2 . E8 99390100 CALL 1FileSaf.00418A50 ; 算法CALL,跟进去
004050B7 . 83C4 08 ADD ESP,8
004050BA . 84C0 TEST AL,AL ; 测试标志位
004050BC . 0F84 C7000000 JE 1FileSaf.00405189 ; 不跳就是注册成功
跟入CALL 00418A50
00418A50 /$ 64:A1 0000000>MOV EAX,DWORD PTR FS:[0] ; 这个CALL完成了注册码整个校验过程
00418A56 |. 6A FF PUSH -1
00418A58 |. 68 880E4800 PUSH 1FileSaf.00480E88
00418A5D |. 50 PUSH EAX
00418A5E |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
00418A65 |. 83EC 10 SUB ESP,10
00418A68 |. 56 PUSH ESI
00418A69 |. 8B7424 24 MOV ESI,DWORD PTR SS:[ESP+24]
00418A6D |. 803E 00 CMP BYTE PTR DS:[ESI],0
00418A70 |. 0F84 21010000 JE 1FileSaf.00418B97
00418A76 |. 8B4C24 28 MOV ECX,DWORD PTR SS:[ESP+28]
00418A7A |. 8039 00 CMP BYTE PTR DS:[ECX],0
00418A7D |. 0F84 14010000 JE 1FileSaf.00418B97
00418A83 |. A1 14834A00 MOV EAX,DWORD PTR DS:[4A8314]
00418A88 |. 53 PUSH EBX
00418A89 |. 894424 08 MOV DWORD PTR SS:[ESP+8],EAX
00418A8D |. C74424 20 000>MOV DWORD PTR SS:[ESP+20],0
00418A95 |. 894424 2C MOV DWORD PTR SS:[ESP+2C],EAX
00418A99 |. 8D4424 14 LEA EAX,DWORD PTR SS:[ESP+14]
00418A9D |. 8D5424 2C LEA EDX,DWORD PTR SS:[ESP+2C]
00418AA1 |. 50 PUSH EAX
00418AA2 |. 8D4424 0C LEA EAX,DWORD PTR SS:[ESP+C]
00418AA6 |. 52 PUSH EDX
00418AA7 |. 50 PUSH EAX
00418AA8 |. 51 PUSH ECX
00418AA9 |. C64424 30 01 MOV BYTE PTR SS:[ESP+30],1
00418AAE |. E8 3D050000 CALL 1FileSaf.00418FF0 ; 关键CALL。分析对象
00418AB3 |. 83C4 10 ADD ESP,10
00418AB6 |. 8D4C24 28 LEA ECX,DWORD PTR SS:[ESP+28]
00418ABA |. 56 PUSH ESI
00418ABB |. E8 786C0400 CALL 1FileSaf.0045F738
00418AC0 |. 8D4C24 08 LEA ECX,DWORD PTR SS:[ESP+8]
00418AC4 |. C64424 20 02 MOV BYTE PTR SS:[ESP+20],2
00418AC9 |. E8 1E710400 CALL 1FileSaf.0045FBEC
00418ACE |. 8D4C24 2C LEA ECX,DWORD PTR SS:[ESP+2C]
00418AD2 |. E8 15710400 CALL 1FileSaf.0045FBEC
00418AD7 |. 8D4C24 28 LEA ECX,DWORD PTR SS:[ESP+28]
00418ADB |. E8 0C710400 CALL 1FileSaf.0045FBEC
00418AE0 |. 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
00418AE4 |. 6A 05 PUSH 5
00418AE6 |. 51 PUSH ECX
00418AE7 |. 8D4C24 30 LEA ECX,DWORD PTR SS:[ESP+30]
00418AEB |. E8 A5F00300 CALL 1FileSaf.00457B95 ; 取机器码前5位
00418AF0 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
00418AF2 |. 8B5424 08 MOV EDX,DWORD PTR SS:[ESP+8]
00418AF6 |. 50 PUSH EAX
00418AF7 |. 52 PUSH EDX
00418AF8 |. C64424 28 03 MOV BYTE PTR SS:[ESP+28],3
00418AFD |. E8 8E030000 CALL 1FileSaf.00418E90 ; 对比机器码前5位
00418B02 |. 83C4 08 ADD ESP,8
00418B05 |. 84C0 TEST AL,AL
00418B07 74 3C JE SHORT 1FileSaf.00418B45 ; 此处不能跳~~
00418B09 8D4424 0C LEA EAX,DWORD PTR SS:[ESP+C]
00418B0D |. 6A 05 PUSH 5
00418B0F |. 50 PUSH EAX
00418B10 |. 8D4C24 30 LEA ECX,DWORD PTR SS:[ESP+30]
00418B14 |. E8 00F00300 CALL 1FileSaf.00457B19 ; 取机器码后5位
00418B19 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
00418B1B 8B4C24 2C MOV ECX,DWORD PTR SS:[ESP+2C]
00418B1F |. 50 PUSH EAX
00418B20 |. 51 PUSH ECX
00418B21 |. C64424 28 04 MOV BYTE PTR SS:[ESP+28],4
00418B26 |. E8 65030000 CALL 1FileSaf.00418E90 ; 对比机器码后5位
00418B2B |. 83C4 08 ADD ESP,8
00418B2E |. 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C]
00418B32 |. 84C0 TEST AL,AL ; AL值要为1
00418B34 |. 0F94C3 SETE BL
00418B37 |. C64424 20 03 MOV BYTE PTR SS:[ESP+20],3
00418B3C |. E8 896B0400 CALL 1FileSaf.0045F6CA
00418B41 |. 84DB TEST BL,BL ; BL=0下面才能跳
00418B43 |. 74 02 JE SHORT 1FileSaf.00418B47 ; 此处必须跳~~~
00418B45 |> B3 01 MOV BL,1
00418B47 |> 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
00418B4B |. C64424 20 02 MOV BYTE PTR SS:[ESP+20],2
00418B50 |. E8 756B0400 CALL 1FileSaf.0045F6CA
00418B55 |. 84DB TEST BL,BL ; 测试BL的值
00418B57 |. 5B POP EBX
00418B58 |. 75 10 JNZ SHORT 1FileSaf.00418B6A ; 此处不能跳~~~
00418B5A |. 8B4424 10 MOV EAX,DWORD PTR SS:[ESP+10] ; 将SS:[ESP+10]处的值赋给EAX,即E00
00418B5E |. F6C4 E0 TEST AH,0E0 ; 关键CALL3计算在此用上了~~AH必须=0E0
00418B61 75 07 JNZ SHORT 1FileSaf.00418B6A ; 不能跳~~~
00418B63 |. A9 E0000000 TEST EAX,0E0 ; JBE 低于或等于跳转,也就是EAX必须等于00000E00
00418B68 |. 76 3F JBE SHORT 1FileSaf.00418BA9 ; 必须跳,跳向成功了
00418B6A |> 8D4C24 24 LEA ECX,DWORD PTR SS:[ESP+24]
00418B6E |. C64424 1C 01 MOV BYTE PTR SS:[ESP+1C],1
00418B73 |. E8 526B0400 CALL 1FileSaf.0045F6CA
00418B78 |. 8D4C24 28 LEA ECX,DWORD PTR SS:[ESP+28]
00418B7C |. C64424 1C 00 MOV BYTE PTR SS:[ESP+1C],0
00418B81 |. E8 446B0400 CALL 1FileSaf.0045F6CA
00418B86 |. 8D4C24 04 LEA ECX,DWORD PTR SS:[ESP+4]
00418B8A |. C74424 1C FFF>MOV DWORD PTR SS:[ESP+1C],-1
00418B92 |. E8 336B0400 CALL 1FileSaf.0045F6CA
00418B97 |> 32C0 XOR AL,AL
00418B99 |. 5E POP ESI
00418B9A |. 8B4C24 10 MOV ECX,DWORD PTR SS:[ESP+10]
00418B9E |. 64:890D 00000>MOV DWORD PTR FS:[0],ECX
00418BA5 |. 83C4 1C ADD ESP,1C
00418BA8 |. C3 RETN
00418BA9 |> 83E0 1F AND EAX,1F
00418BAC |. 8D4C24 24 LEA ECX,DWORD PTR SS:[ESP+24]
00418BB0 |. A3 B0CA4A00 MOV DWORD PTR DS:[4ACAB0],EAX
00418BB5 |. C605 48744A00>MOV BYTE PTR DS:[4A7448],0
00418BBC |. C64424 1C 01 MOV BYTE PTR SS:[ESP+1C],1
00418BC1 |. E8 046B0400 CALL 1FileSaf.0045F6CA
00418BC6 |. 8D4C24 28 LEA ECX,DWORD PTR SS:[ESP+28]
00418BCA |. C64424 1C 00 MOV BYTE PTR SS:[ESP+1C],0
00418BCF |. E8 F66A0400 CALL 1FileSaf.0045F6CA
00418BD4 |. 8D4C24 04 LEA ECX,DWORD PTR SS:[ESP+4]
00418BD8 |. C74424 1C FFF>MOV DWORD PTR SS:[ESP+1C],-1
00418BE0 |. E8 E56A0400 CALL 1FileSaf.0045F6CA
00418BE5 |. 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14]
00418BE9 |. B0 01 MOV AL,1
00418BEB |. 5E POP ESI
00418BEC |. 64:890D 00000>MOV DWORD PTR FS:[0],ECX
00418BF3 |. 83C4 1C ADD ESP,1C
00418BF6 \. C3 RETN
接下来我们跟进分析CALL 00418FF0
00418FF0 /$ 83EC 08 SUB ESP,8 ; 这段的功能是校验注册是否正确,及计算注册码中间值
00418FF3 |. 56 PUSH ESI
00418FF4 |. 8B7424 10 MOV ESI,DWORD PTR SS:[ESP+10]
00418FF8 |. 57 PUSH EDI
00418FF9 |. 803E 00 CMP BYTE PTR DS:[ESI],0 ; 注册码为空?不为空就跳
00418FFC |. 75 08 JNZ SHORT 1FileSaf.00419006
00418FFE |. 5F POP EDI
00418FFF |. 32C0 XOR AL,AL
00419001 |. 5E POP ESI
00419002 |. 83C4 08 ADD ESP,8
00419005 |. C3 RETN
00419006 |> 33D2 XOR EDX,EDX ; 清空EDX
00419008 |. 33C9 XOR ECX,ECX ; 清空ECX
0041900A |. 33C0 XOR EAX,EAX ; 清空EAX
0041900C |> 0FBE3C30 /MOVSX EDI,BYTE PTR DS:[EAX+ESI] ; 取注册码1-4位ASCII值之和放入ECX
00419010 |. 03CF |ADD ECX,EDI
00419012 |. 40 |INC EAX
00419013 |. 83F8 04 |CMP EAX,4
00419016 |.^ 7C F4 \JL SHORT 1FileSaf.0041900C
00419018 |. 81E1 01000080 AND ECX,80000001 ; ECX=ECX AND 80000001h
0041901E |. 79 05 JNS SHORT 1FileSaf.00419025 ; ECX的值为正吗?为正就跳
00419020 |. 49 DEC ECX
00419021 |. 83C9 FE OR ECX,FFFFFFFE
00419024 |. 41 INC ECX
00419025 |> 83F9 01 CMP ECX,1 ; ECX与1比较,不等?就跳
00419028 |. 75 05 JNZ SHORT 1FileSaf.0041902F
0041902A |. BA 10000000 MOV EDX,10
0041902F |> B8 04000000 MOV EAX,4 ; EAX赋值4
00419034 |. 33C9 XOR ECX,ECX
00419036 |> 0FBE3C30 /MOVSX EDI,BYTE PTR DS:[EAX+ESI] ; 取注册码5-9位ASCII值之和放入ECX
0041903A |. 03CF |ADD ECX,EDI
0041903C |. 40 |INC EAX
0041903D |. 83F8 09 |CMP EAX,9
00419040 |.^ 7C F4 \JL SHORT 1FileSaf.00419036
00419042 |. 81E1 01000080 AND ECX,80000001
00419048 |. 79 05 JNS SHORT 1FileSaf.0041904F
0041904A |. 49 DEC ECX
0041904B |. 83C9 FE OR ECX,FFFFFFFE
0041904E |. 41 INC ECX
0041904F |> 83F9 01 CMP ECX,1
00419052 |. 75 03 JNZ SHORT 1FileSaf.00419057
00419054 |. 83C2 08 ADD EDX,8
00419057 |> B8 09000000 MOV EAX,9
0041905C |. 33C9 XOR ECX,ECX
0041905E |> 0FBE3C30 /MOVSX EDI,BYTE PTR DS:[EAX+ESI] ; 取注册码10-14位ASCII值之和放入ECX
00419062 |. 03CF |ADD ECX,EDI
00419064 |. 40 |INC EAX
00419065 |. 83F8 0E |CMP EAX,0E
00419068 |.^ 7C F4 \JL SHORT 1FileSaf.0041905E
0041906A |. 81E1 01000080 AND ECX,80000001
00419070 |. 79 05 JNS SHORT 1FileSaf.00419077
00419072 |. 49 DEC ECX
00419073 |. 83C9 FE OR ECX,FFFFFFFE
00419076 |. 41 INC ECX
00419077 |> 83F9 01 CMP ECX,1
0041907A |. 75 03 JNZ SHORT 1FileSaf.0041907F
0041907C |. 83C2 04 ADD EDX,4
0041907F |> B8 0E000000 MOV EAX,0E
00419084 |. 33C9 XOR ECX,ECX
00419086 |> 0FBE3C30 /MOVSX EDI,BYTE PTR DS:[EAX+ESI] ; 取注册码15-18位ASCII值之和放入ECX
0041908A |. 03CF |ADD ECX,EDI
0041908C |. 40 |INC EAX
0041908D |. 83F8 12 |CMP EAX,12
00419090 |.^ 7C F4 \JL SHORT 1FileSaf.00419086
00419092 |. 81E1 01000080 AND ECX,80000001
00419098 |. 79 05 JNS SHORT 1FileSaf.0041909F
0041909A |. 49 DEC ECX
0041909B |. 83C9 FE OR ECX,FFFFFFFE
0041909E |. 41 INC ECX
0041909F |> 83F9 01 CMP ECX,1
004190A2 |. 75 03 JNZ SHORT 1FileSaf.004190A7
004190A4 |. 83C2 02 ADD EDX,2
004190A7 |> 0FBE46 11 MOVSX EAX,BYTE PTR DS:[ESI+11] ; 取注册码第18位
004190AB |. 0FBE4E 0D MOVSX ECX,BYTE PTR DS:[ESI+D] ; 取注册码第14位
004190AF |. 03C1 ADD EAX,ECX ; EAX=EAX+ECX
004190B1 |. 0FBE4E 03 MOVSX ECX,BYTE PTR DS:[ESI+3] ; 取注册码第4位
004190B5 |. 03C1 ADD EAX,ECX ; EAX=EAX+ECX
004190B7 |. 0FBE4E 08 MOVSX ECX,BYTE PTR DS:[ESI+8] ; 取注册码第9位
004190BB |. 03C1 ADD EAX,ECX ; EAX=EAX+ECX
004190BD |. 25 01000080 AND EAX,80000001
004190C2 |. 79 05 JNS SHORT 1FileSaf.004190C9
004190C4 |. 48 DEC EAX
004190C5 |. 83C8 FE OR EAX,FFFFFFFE
004190C8 |. 40 INC EAX
004190C9 |> 83F8 01 CMP EAX,1
004190CC |. 75 01 JNZ SHORT 1FileSaf.004190CF
004190CE |. 42 INC EDX ; EDX=EDX+1
004190CF |> 8A92 F8744A00 MOV DL,BYTE PTR DS:[EDX+4A74F8] ; 查表2(对比注册码第19位)
004190D5 |. 8A46 12 MOV AL,BYTE PTR DS:[ESI+12] ; 取注册码第19位
004190D8 |. 3AD0 CMP DL,AL
004190DA |. 74 08 JE SHORT 1FileSaf.004190E4
004190DC |. 5F POP EDI
004190DD |. 32C0 XOR AL,AL
004190DF |. 5E POP ESI
004190E0 |. 83C4 08 ADD ESP,8
004190E3 |. C3 RETN
004190E4 |> 0FBE7E 13 MOVSX EDI,BYTE PTR DS:[ESI+13] ; 取注册码第20位
004190E8 |. 83EF 40 SUB EDI,40
004190EB |. 79 03 JNS SHORT 1FileSaf.004190F0 ; 相当于EDI-40<0就不跳~~
004190ED |. 83C7 2B ADD EDI,2B ; EDI=EDI+2B(后面参与计算)
004190F0 |> 8BC6 MOV EAX,ESI
004190F2 |. 53 PUSH EBX
004190F3 |. 6A 20 PUSH 20
004190F5 |. C64424 17 00 MOV BYTE PTR SS:[ESP+17],0
004190FA |. 66:8B08 MOV CX,WORD PTR DS:[EAX]
004190FD |. 66:894C24 10 MOV WORD PTR SS:[ESP+10],CX
00419102 |. 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
00419106 |. 8A50 02 MOV DL,BYTE PTR DS:[EAX+2] ; 取注册码第3位
00419109 |. 8B46 09 MOV EAX,DWORD PTR DS:[ESI+9] ; 取注册码第10-12位(4321)入EAX
0041910C |. 51 PUSH ECX
0041910D |. 885424 16 MOV BYTE PTR SS:[ESP+16],DL
00419111 |. 894424 17 MOV DWORD PTR SS:[ESP+17],EAX
00419115 |. E8 C6FDFFFF CALL 1FileSaf.00418EE0 ; 关键算法CALL1,主要是出计算用的中间值1
0041911A |. 33D2 XOR EDX,EDX ; 清空EDX
0041911C |. 6A 20 PUSH 20 ; 关键:出前5位对比用的数值,看下面
0041911E |. F7F7 DIV EDI ; EAX=EAX/EDI(得出后的值用于计算机器码前5位中间值2)
00419120 |. 8B56 04 MOV EDX,DWORD PTR DS:[ESI+4] ; 取注册码的13~16位(8765)入EDX
00419123 |. 895424 18 MOV DWORD PTR SS:[ESP+18],EDX
00419127 |. 8BD8 MOV EBX,EAX
00419129 |. 8D46 0E LEA EAX,DWORD PTR DS:[ESI+E] ; 取注册码后6位
0041912C |. 66:8B4E 0E MOV CX,WORD PTR DS:[ESI+E]
00419130 |. 66:894C24 1C MOV WORD PTR SS:[ESP+1C],CX
00419135 |. 8A50 02 MOV DL,BYTE PTR DS:[EAX+2]
00419138 |. 8D4424 18 LEA EAX,DWORD PTR SS:[ESP+18]
0041913C |. 50 PUSH EAX
0041913D |. 885424 22 MOV BYTE PTR SS:[ESP+22],DL
00419141 |. E8 9AFDFFFF CALL 1FileSaf.00418EE0
00419146 |. 33D2 XOR EDX,EDX
00419148 |. 53 PUSH EBX
00419149 |. F7F7 DIV EDI ; EAX=EAX/EDI (得出后的值用于计算机器码后5位中间值2)
0041914B |. 8BF8 MOV EDI,EAX
0041914D |. E8 DEFDFFFF CALL 1FileSaf.00418F30 ; 关键算法CALL2~~通过计算中间值2出对比机器码前5位的~~~
00419152 |. 8B4C24 30 MOV ECX,DWORD PTR SS:[ESP+30]
00419156 |. 83C4 14 ADD ESP,14
00419159 |. 50 PUSH EAX
0041915A |. E8 F4660400 CALL 1FileSaf.0045F853
0041915F |. 57 PUSH EDI
00419160 |. E8 CBFDFFFF CALL 1FileSaf.00418F30 ; 关键算法CALL2~~通过计算中间值2出对比机器码后5位的~~
00419165 |. 8B4C24 24 MOV ECX,DWORD PTR SS:[ESP+24]
00419169 |. 83C4 04 ADD ESP,4
0041916C |. 50 PUSH EAX
0041916D |. E8 E1660400 CALL 1FileSaf.0045F853
00419172 |. 8A56 08 MOV DL,BYTE PTR DS:[ESI+8] ; 取注册码第9位放入DL
00419175 |. 8A4E 03 MOV CL,BYTE PTR DS:[ESI+3] ; 取注册码第4位放入CL
00419178 |. 8A46 0D MOV AL,BYTE PTR DS:[ESI+D] ; 取注册码第14位放入AL
0041917B |. 885424 19 MOV BYTE PTR SS:[ESP+19],DL
0041917F |. 884C24 18 MOV BYTE PTR SS:[ESP+18],CL
00419183 |. 8A4E 11 MOV CL,BYTE PTR DS:[ESI+11] ; 取注册码第18位放入CL
00419186 |. 8D5424 18 LEA EDX,DWORD PTR SS:[ESP+18]
0041918A |. 6A 14 PUSH 14
0041918C |. 52 PUSH EDX
0041918D |. 884424 22 MOV BYTE PTR SS:[ESP+22],AL
00419191 |. 884C24 23 MOV BYTE PTR SS:[ESP+23],CL
00419195 |. E8 46FDFFFF CALL 1FileSaf.00418EE0 ; 关键算法CALL1,通过4、9、14、18这4位计算
0041919A |. 8B4C24 2C MOV ECX,DWORD PTR SS:[ESP+2C]
0041919E |. 83C4 08 ADD ESP,8
004191A1 |. 5B POP EBX
004191A2 |. 8901 MOV DWORD PTR DS:[ECX],EAX
004191A4 |. 5F POP EDI
004191A5 |. B0 01 MOV AL,1
004191A7 |. 5E POP ESI
004191A8 |. 83C4 08 ADD ESP,8
004191AB \. C3 RETN
我们接下来看看CALL 00418EE0
00418EE0 /$ 56 PUSH ESI
00418EE1 |. 8B7424 0C MOV ESI,DWORD PTR SS:[ESP+C]
00418EE5 |. 33C0 XOR EAX,EAX
00418EE7 |. 85F6 TEST ESI,ESI ; 取注册码第4、9、14、18位
00418EE9 |. 7E 3D JLE SHORT 1FileSaf.00418F28 ; 小于或等于就转移
00418EEB |. 57 PUSH EDI ; 这是第20位注册码计算出来的值
00418EEC |. 8B7C24 0C MOV EDI,DWORD PTR SS:[ESP+C] ; ABC1234(注册码1~3+10~13位)EFGH678(注册码5~8+15~17位)
00418EF0 |> 8A0F /MOV CL,BYTE PTR DS:[EDI] ; 逐位赋值给CL
00418EF2 |. 33D2 |XOR EDX,EDX ; 清空EDX值
00418EF4 |> 3A8A F8744A00 |/CMP CL,BYTE PTR DS:[EDX+4A74F8] ; 用EDX做计数器查表2取字符
00418EFA |. 74 06 ||JE SHORT 1FileSaf.00418F02 ; 查到字符。跳
00418EFC |. 42 ||INC EDX ; EDX=EDX+1
00418EFD |. 83FA 20 ||CMP EDX,20 ; 看计数是不是超出32个字符了。表中只有32个字符
00418F00 |.^ 72 F2 |\JB SHORT 1FileSaf.00418EF4
00418F02 |> 83FE 05 |CMP ESI,5 ; 比较ESI的值
00418F05 |. 7C 07 |JL SHORT 1FileSaf.00418F0E ; 小于。跳,只有到第6次才会跳
00418F07 |. C1E0 05 |SHL EAX,5 ; EAX左移5位相当于*32
00418F0A |. 03C2 |ADD EAX,EDX ; EAX=EAX+EDX
00418F0C |. EB 11 |JMP SHORT 1FileSaf.00418F1F
00418F0E |> B9 05000000 |MOV ECX,5 ; ECX=5
00418F13 |. 2BCE |SUB ECX,ESI ; ECX=ECX-ESI
00418F15 |. D3EA |SHR EDX,CL ; EDX右移CL位,即右移3位。相当于除以8
00418F17 |. 8BCE |MOV ECX,ESI ; ECX=ESI
00418F19 |. D3E0 |SHL EAX,CL ; EAX左移CL位,即左移2位。相当于*4
00418F1B |. 03D0 |ADD EDX,EAX ; EDX=EDX+EAX
00418F1D |. 8BC2 |MOV EAX,EDX ; 将EDX的值赋给EAX
00418F1F |> 83EE 05 |SUB ESI,5 ; ESI=ESI-5
00418F22 |. 47 |INC EDI ; EDI=EDI+1
00418F23 |. 85F6 |TEST ESI,ESI
00418F25 |.^ 7F C9 \JG SHORT 1FileSaf.00418EF0 ; 大于0就跳,即计算完成就退出循环
00418F27 |. 5F POP EDI
00418F28 |> 5E POP ESI
00418F29 \. C3 RETN
接下来再看CALL 00418F30
00418F30 /$ 8B4C24 04 MOV ECX,DWORD PTR SS:[ESP+4]
00418F34 |. 56 PUSH ESI
00418F35 |. 8BC1 MOV EAX,ECX ; 将ECX赋给EAX
00418F37 |. BE 24000000 MOV ESI,24 ; 将0x24赋给ESI
00418F3C |. 99 CDQ ; EDX清零
00418F3D |. F7FE IDIV ESI ; EAX=EAX/ESI 余数放入EDX
00418F3F |. C605 99CB4A00>MOV BYTE PTR DS:[4ACB99],0
00418F46 |. 8A82 D0744A00 MOV AL,BYTE PTR DS:[EDX+4A74D0] ; 通过EDX的值查码表1取码作为对比码第5位
00418F4C |. A2 98CB4A00 MOV BYTE PTR DS:[4ACB98],AL
00418F51 |. B8 398EE338 MOV EAX,38E38E39
00418F56 |. F7E9 IMUL ECX ; EAX*ECX 低位放EAX 高位放EDX
00418F58 |. C1FA 03 SAR EDX,3 ; EDX右移3位,相当于/8
00418F5B |. 8BCA MOV ECX,EDX ; EDX放入ECX
00418F5D |. C1E9 1F SHR ECX,1F ; ECX右移1F位,相当于/0x80000000
00418F60 |. 03D1 ADD EDX,ECX ; EDX=EDX+ECX
00418F62 |. 8BCA MOV ECX,EDX ; 将EDX的值赋给ECX
00418F64 |. 8BC1 MOV EAX,ECX ; 将ECX的值赋给EAX
00418F66 |. 99 CDQ ; EDX清零
00418F67 |. F7FE IDIV ESI ; EAX=EAX/24 余数放入EDX
00418F69 |. B8 398EE338 MOV EAX,38E38E39
00418F6E |. 8A92 D0744A00 MOV DL,BYTE PTR DS:[EDX+4A74D0] ; 通过EDX的值查码表1取码作为对比码第4位
00418F74 |. 8815 97CB4A00 MOV BYTE PTR DS:[4ACB97],DL
00418F7A |. F7E9 IMUL ECX ; EAX*ECX 低位放EAX 高位放EDX
00418F7C |. C1FA 03 SAR EDX,3
00418F7F |. 8BC2 MOV EAX,EDX ; EAX=EDX
00418F81 |. C1E8 1F SHR EAX,1F
00418F84 |. 03D0 ADD EDX,EAX ; EDX=EDX+EAX
00418F86 |. 8BCA MOV ECX,EDX ; ECX=EDX
00418F88 |. 8BC1 MOV EAX,ECX ; EAX=ECX
00418F8A |. 99 CDQ ; EDX清零
00418F8B |. F7FE IDIV ESI ; EAX=EAX/24 余数放入EDX
00418F8D |. B8 398EE338 MOV EAX,38E38E39
00418F92 |. 8A92 D0744A00 MOV DL,BYTE PTR DS:[EDX+4A74D0] ; 通过EDX的值查码表1取码作为对比码第3位
00418F98 |. 8815 96CB4A00 MOV BYTE PTR DS:[4ACB96],DL
00418F9E |. F7E9 IMUL ECX ; EAX*ECX 低位放EAX 高位放EDX
00418FA0 |. C1FA 03 SAR EDX,3
00418FA3 |. 8BC2 MOV EAX,EDX
00418FA5 |. C1E8 1F SHR EAX,1F
00418FA8 |. 03D0 ADD EDX,EAX
00418FAA |. 8BCA MOV ECX,EDX
00418FAC |. 8BC1 MOV EAX,ECX
00418FAE |. 99 CDQ ; EDX清零
00418FAF |. F7FE IDIV ESI ; EAX=EAX/24 余数放入EDX
00418FB1 |. B8 398EE338 MOV EAX,38E38E39
00418FB6 |. 8A92 D0744A00 MOV DL,BYTE PTR DS:[EDX+4A74D0] ; 通过EDX的值查码表1取码作为对比码第2位
00418FBC |. 8815 95CB4A00 MOV BYTE PTR DS:[4ACB95],DL
00418FC2 |. F7E9 IMUL ECX ; EAX*ECX 低位放EAX 高位放EDX
00418FC4 |. 8BC2 MOV EAX,EDX ; 将EDX的值赋给EAX
00418FC6 |. C1F8 03 SAR EAX,3 ; EAX右移3位
00418FC9 |. 8BC8 MOV ECX,EAX ; 将EAX的值赋给ECX
00418FCB |. C1E9 1F SHR ECX,1F ; ECX右移1F位
00418FCE |. 03C1 ADD EAX,ECX ; EAX=EAX+ECX
00418FD0 |. 8BCE MOV ECX,ESI ; 将ESI的值赋给ECX
00418FD2 |. 99 CDQ ; EDX清零
00418FD3 |. F7F9 IDIV ECX ; EAX=EAX/ECX 余数放入EDX
00418FD5 |. B8 94CB4A00 MOV EAX,1FileSaf.004ACB94 ; ASCII "BVN7X"
00418FDA |. 5E POP ESI
00418FDB |. 8A92 D0744A00 MOV DL,BYTE PTR DS:[EDX+4A74D0] ; 通过EDX的值查码表1取码作为对比码第1位
00418FE1 |. 8815 94CB4A00 MOV BYTE PTR DS:[4ACB94],DL
00418FE7 \. C3 RETN
OK。终于把算法分析完成了。
给一组注册码。如果不幸中了你的机器。可别怪我啊。。HOHO。开个玩笑
机器码:03HYGBVN7X
注册码:ABCAEFGHD1234Q678AV1
PS:这个软件在注册码的设计上下了很大的功夫啊。很可惜,在我的机器上还是未能通过。因为偶的机器码是WD-WMAM9442732627326,但“-”
作者却未考虑进去。看来只能爆破了。
关于使用次数:
1、注册表中 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\IE4\Setup
KEYFSTIMES DWORD值 其中的数据为可用次数~
2、C:\WINDOWS\system32\keyfs.sys
此文件中的数值为可用次数~~
要清楚的话二个地方都必须清除。
------------------------------------------------------------------------
【破解总结】
这个软件是一好友要求帮忙的。不过偶到现在还没有帮成忙啊。终于完成算法分析了。注册机还没来的及写。
现在总结一下吧。稍候写注册机去。
【算法总结】
取机器码前5位=1、2、3、10、11、12、13位经过CALL1及CALL2计算后查表得到的值
取机器码后5位=5、6、7、8、15、16、17位经过CALL1及CALL2计算后查表得到的值
注册码第4、9、14、18位经CALL1计算后的值必须为E00
第1-4位、5-9位、10-14位、15-18位经过计算后查表2的值须与第19位相同
第20位用于计算前5位、后5位对比值。
啊~~~~
你们看了之后不要说烦啊~~
------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢! |
|