飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 4148|回复: 3

FilesafeV7.0企业版算法分析

[复制链接]
  • TA的每日心情
    擦汗
    2017-9-28 11:05
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2005-12-31 20:23:24 | 显示全部楼层 |阅读模式
    【破文标题】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位对比值。
    啊~~~~
    你们看了之后不要说烦啊~~
    ------------------------------------------------------------------------
    【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-1-1 09:59:19 | 显示全部楼层
    好文```学习了```
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-1-18 17:27
  • 签到天数: 30 天

    [LV.5]常住居民I

    发表于 2006-1-2 14:57:10 | 显示全部楼层
    下后学习,谢
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-1-9 09:37:18 | 显示全部楼层
    下后学习,谢
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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