pentacle 发表于 2005-12-31 20:23:24

FilesafeV7.0企业版算法分析

【破文标题】FilesafeV7.0企业版算法分析
【破文作者】pentacle
【作者邮箱】
【作者主页】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:
0040505D   .50            PUSH EAX
0040505E   .64:8925 00000>MOV DWORD PTR FS:,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:
00405075   .E8 BEA60500   CALL 1FileSaf.0045F738
0040507A   .A1 14834A00   MOV EAX,DWORD PTR DS:
0040507F   .C74424 1C 000>MOV DWORD PTR SS:,0
00405087   .894424 04   MOV DWORD PTR SS:,EAX
0040508B   .8D4C24 04   LEA ECX,DWORD PTR SS:
0040508F   .C64424 1C 01MOV BYTE PTR SS:,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:
004050AC   .8B4424 08   MOV EAX,DWORD PTR SS:
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:               ;这个CALL完成了注册码整个校验过程
00418A56|.6A FF         PUSH -1
00418A58|.68 880E4800   PUSH 1FileSaf.00480E88
00418A5D|.50            PUSH EAX
00418A5E|.64:8925 00000>MOV DWORD PTR FS:,ESP
00418A65|.83EC 10       SUB ESP,10
00418A68|.56            PUSH ESI
00418A69|.8B7424 24   MOV ESI,DWORD PTR SS:
00418A6D|.803E 00       CMP BYTE PTR DS:,0
00418A70|.0F84 21010000 JE 1FileSaf.00418B97
00418A76|.8B4C24 28   MOV ECX,DWORD PTR SS:
00418A7A|.8039 00       CMP BYTE PTR DS:,0
00418A7D|.0F84 14010000 JE 1FileSaf.00418B97
00418A83|.A1 14834A00   MOV EAX,DWORD PTR DS:
00418A88|.53            PUSH EBX
00418A89|.894424 08   MOV DWORD PTR SS:,EAX
00418A8D|.C74424 20 000>MOV DWORD PTR SS:,0
00418A95|.894424 2C   MOV DWORD PTR SS:,EAX
00418A99|.8D4424 14   LEA EAX,DWORD PTR SS:
00418A9D|.8D5424 2C   LEA EDX,DWORD PTR SS:
00418AA1|.50            PUSH EAX
00418AA2|.8D4424 0C   LEA EAX,DWORD PTR SS:
00418AA6|.52            PUSH EDX
00418AA7|.50            PUSH EAX
00418AA8|.51            PUSH ECX
00418AA9|.C64424 30 01MOV BYTE PTR SS:,1
00418AAE|.E8 3D050000   CALL 1FileSaf.00418FF0                   ;关键CALL。分析对象
00418AB3|.83C4 10       ADD ESP,10
00418AB6|.8D4C24 28   LEA ECX,DWORD PTR SS:
00418ABA|.56            PUSH ESI
00418ABB|.E8 786C0400   CALL 1FileSaf.0045F738
00418AC0|.8D4C24 08   LEA ECX,DWORD PTR SS:
00418AC4|.C64424 20 02MOV BYTE PTR SS:,2
00418AC9|.E8 1E710400   CALL 1FileSaf.0045FBEC
00418ACE|.8D4C24 2C   LEA ECX,DWORD PTR SS:
00418AD2|.E8 15710400   CALL 1FileSaf.0045FBEC
00418AD7|.8D4C24 28   LEA ECX,DWORD PTR SS:
00418ADB|.E8 0C710400   CALL 1FileSaf.0045FBEC
00418AE0|.8D4C24 10   LEA ECX,DWORD PTR SS:
00418AE4|.6A 05         PUSH 5
00418AE6|.51            PUSH ECX
00418AE7|.8D4C24 30   LEA ECX,DWORD PTR SS:
00418AEB|.E8 A5F00300   CALL 1FileSaf.00457B95                   ;取机器码前5位
00418AF0|.8B00          MOV EAX,DWORD PTR DS:
00418AF2|.8B5424 08   MOV EDX,DWORD PTR SS:
00418AF6|.50            PUSH EAX
00418AF7|.52            PUSH EDX
00418AF8|.C64424 28 03MOV BYTE PTR SS:,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:
00418B0D|.6A 05         PUSH 5
00418B0F|.50            PUSH EAX
00418B10|.8D4C24 30   LEA ECX,DWORD PTR SS:
00418B14|.E8 00F00300   CALL 1FileSaf.00457B19                   ;取机器码后5位
00418B19|.8B00          MOV EAX,DWORD PTR DS:
00418B1B      8B4C24 2C   MOV ECX,DWORD PTR SS:
00418B1F|.50            PUSH EAX
00418B20|.51            PUSH ECX
00418B21|.C64424 28 04MOV BYTE PTR SS:,4
00418B26|.E8 65030000   CALL 1FileSaf.00418E90                   ;对比机器码后5位
00418B2B|.83C4 08       ADD ESP,8
00418B2E|.8D4C24 0C   LEA ECX,DWORD PTR SS:
00418B32|.84C0          TEST AL,AL                               ;AL值要为1
00418B34|.0F94C3      SETE BL
00418B37|.C64424 20 03MOV BYTE PTR SS:,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:
00418B4B|.C64424 20 02MOV BYTE PTR SS:,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:            ;将SS:处的值赋给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:
00418B6E|.C64424 1C 01MOV BYTE PTR SS:,1
00418B73|.E8 526B0400   CALL 1FileSaf.0045F6CA
00418B78|.8D4C24 28   LEA ECX,DWORD PTR SS:
00418B7C|.C64424 1C 00MOV BYTE PTR SS:,0
00418B81|.E8 446B0400   CALL 1FileSaf.0045F6CA
00418B86|.8D4C24 04   LEA ECX,DWORD PTR SS:
00418B8A|.C74424 1C FFF>MOV DWORD PTR SS:,-1
00418B92|.E8 336B0400   CALL 1FileSaf.0045F6CA
00418B97|>32C0          XOR AL,AL
00418B99|.5E            POP ESI
00418B9A|.8B4C24 10   MOV ECX,DWORD PTR SS:
00418B9E|.64:890D 00000>MOV DWORD PTR FS:,ECX
00418BA5|.83C4 1C       ADD ESP,1C
00418BA8|.C3            RETN
00418BA9|>83E0 1F       AND EAX,1F
00418BAC|.8D4C24 24   LEA ECX,DWORD PTR SS:
00418BB0|.A3 B0CA4A00   MOV DWORD PTR DS:,EAX
00418BB5|.C605 48744A00>MOV BYTE PTR DS:,0
00418BBC|.C64424 1C 01MOV BYTE PTR SS:,1
00418BC1|.E8 046B0400   CALL 1FileSaf.0045F6CA
00418BC6|.8D4C24 28   LEA ECX,DWORD PTR SS:
00418BCA|.C64424 1C 00MOV BYTE PTR SS:,0
00418BCF|.E8 F66A0400   CALL 1FileSaf.0045F6CA
00418BD4|.8D4C24 04   LEA ECX,DWORD PTR SS:
00418BD8|.C74424 1C FFF>MOV DWORD PTR SS:,-1
00418BE0|.E8 E56A0400   CALL 1FileSaf.0045F6CA
00418BE5|.8B4C24 14   MOV ECX,DWORD PTR SS:
00418BE9|.B0 01         MOV AL,1
00418BEB|.5E            POP ESI
00418BEC|.64:890D 00000>MOV DWORD PTR FS:,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:
00418FF8|.57            PUSH EDI
00418FF9|.803E 00       CMP BYTE PTR DS:,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:         ;取注册码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:         ;取注册码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:         ;取注册码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:         ;取注册码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:         ;取注册码第18位
004190AB|.0FBE4E 0D   MOVSX ECX,BYTE PTR DS:            ;取注册码第14位
004190AF|.03C1          ADD EAX,ECX                              ;EAX=EAX+ECX
004190B1|.0FBE4E 03   MOVSX ECX,BYTE PTR DS:            ;取注册码第4位
004190B5|.03C1          ADD EAX,ECX                              ;EAX=EAX+ECX
004190B7|.0FBE4E 08   MOVSX ECX,BYTE PTR DS:            ;取注册码第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:          ;查表2(对比注册码第19位)
004190D5|.8A46 12       MOV AL,BYTE PTR DS:            ;取注册码第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:         ;取注册码第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 00MOV BYTE PTR SS:,0
004190FA|.66:8B08       MOV CX,WORD PTR DS:
004190FD|.66:894C24 10MOV WORD PTR SS:,CX
00419102|.8D4C24 10   LEA ECX,DWORD PTR SS:
00419106|.8A50 02       MOV DL,BYTE PTR DS:               ;取注册码第3位
00419109|.8B46 09       MOV EAX,DWORD PTR DS:             ;取注册码第10-12位(4321)入EAX
0041910C|.51            PUSH ECX
0041910D|.885424 16   MOV BYTE PTR SS:,DL
00419111|.894424 17   MOV DWORD PTR SS:,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:             ;取注册码的13~16位(8765)入EDX
00419123|.895424 18   MOV DWORD PTR SS:,EDX
00419127|.8BD8          MOV EBX,EAX
00419129|.8D46 0E       LEA EAX,DWORD PTR DS:             ;取注册码后6位
0041912C|.66:8B4E 0E    MOV CX,WORD PTR DS:
00419130|.66:894C24 1CMOV WORD PTR SS:,CX
00419135|.8A50 02       MOV DL,BYTE PTR DS:
00419138|.8D4424 18   LEA EAX,DWORD PTR SS:
0041913C|.50            PUSH EAX
0041913D|.885424 22   MOV BYTE PTR SS:,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:
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:
00419169|.83C4 04       ADD ESP,4
0041916C|.50            PUSH EAX
0041916D|.E8 E1660400   CALL 1FileSaf.0045F853
00419172|.8A56 08       MOV DL,BYTE PTR DS:               ;取注册码第9位放入DL
00419175|.8A4E 03       MOV CL,BYTE PTR DS:               ;取注册码第4位放入CL
00419178|.8A46 0D       MOV AL,BYTE PTR DS:               ;取注册码第14位放入AL
0041917B|.885424 19   MOV BYTE PTR SS:,DL
0041917F|.884C24 18   MOV BYTE PTR SS:,CL
00419183|.8A4E 11       MOV CL,BYTE PTR DS:            ;取注册码第18位放入CL
00419186|.8D5424 18   LEA EDX,DWORD PTR SS:
0041918A|.6A 14         PUSH 14
0041918C|.52            PUSH EDX
0041918D|.884424 22   MOV BYTE PTR SS:,AL
00419191|.884C24 23   MOV BYTE PTR SS:,CL
00419195|.E8 46FDFFFF   CALL 1FileSaf.00418EE0                   ;关键算法CALL1,通过4、9、14、18这4位计算
0041919A|.8B4C24 2C   MOV ECX,DWORD PTR SS:
0041919E|.83C4 08       ADD ESP,8
004191A1|.5B            POP EBX
004191A2|.8901          MOV DWORD PTR DS:,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:
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:             ;ABC1234(注册码1~3+10~13位)EFGH678(注册码5~8+15~17位)
00418EF0|>8A0F          /MOV CL,BYTE PTR DS:                ;逐位赋值给CL
00418EF2|.33D2          |XOR EDX,EDX                           ;清空EDX值
00418EF4|>3A8A F8744A00 |/CMP CL,BYTE PTR DS:      ;用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:
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:,0
00418F46|.8A82 D0744A00 MOV AL,BYTE PTR DS:          ;通过EDX的值查码表1取码作为对比码第5位
00418F4C|.A2 98CB4A00   MOV BYTE PTR DS:,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的值查码表1取码作为对比码第4位
00418F74|.8815 97CB4A00 MOV BYTE PTR DS:,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的值查码表1取码作为对比码第3位
00418F98|.8815 96CB4A00 MOV BYTE PTR DS:,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的值查码表1取码作为对比码第2位
00418FBC|.8815 95CB4A00 MOV BYTE PTR DS:,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的值查码表1取码作为对比码第1位
00418FE1|.8815 94CB4A00 MOV BYTE PTR DS:,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位对比值。
啊~~~~
你们看了之后不要说烦啊~~
------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!

风球 发表于 2006-1-1 09:59:19

好文```学习了```

lzq1973 发表于 2006-1-2 14:57:10

下后学习,谢

al747 发表于 2006-1-9 09:37:18

下后学习,谢
页: [1]
查看完整版本: FilesafeV7.0企业版算法分析