吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 20939|回复: 52
收起左侧

[分享] 文件夹看门狗 白金版 V4.1算法分析(附注册机)

  [复制链接]
chinasmu 发表于 2011-4-5 11:12
本帖最后由 chinasmu 于 2011-4-5 11:35 编辑

【破文标题】文件夹看门狗 白金版 V4.1算法分析(附注册机)
【破文作者】DemoV
破解工具】OD
【破解平台】Win7
【软件名称】文件夹看门狗-白金版
【软件大小】280KB
【原版下载】自己搜索下载
【软件简介】[文件夹看门狗 白金版 V4.1]
适于安装Windows 9X/NT和Vista/Win7系统的计算机中◇本机硬盘◇和◇移动存储器◇中文件夹加密。
操作简便,解压软件,将软件拷贝到待加密文件夹中(无须安装)或浏览选择文件夹,输入密码点击"加密"按钮,就OK啦!
文件夹加密后效果:
□无法删除和复制文件夹
□文件夹中内容全部消失,除本软件外:)
【破解声明】只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
------------------------------------------------------------------------
【破解过程】
用Peid查得该软件用Visual C++ 6.0编写,用到了MD5算法。
定位关键代码的过程略过,直接进入正题。

1——读取注册码,进入验证call
00409A0F  |> \8B4424 08     mov eax,dword ptr ss:[esp+8]
00409A13  |.  8D4C24 10     lea ecx,dword ptr ss:[esp+10]
00409A17  |.  8DB7 C0000000 lea esi,dword ptr ds:[edi+C0]            ;  假码地址放入esi
00409A1D  |.  51            push ecx                                 ; /pBufSize
00409A1E  |.  8D5424 10     lea edx,dword ptr ss:[esp+10]            ; |
00409A22  |.  56            push esi                                 ; |Buffer
00409A23  |.  52            push edx                                 ; |pValueType
00409A24  |.  6A 00         push 0                                   ; |Reserved = NULL
00409A26  |.  68 D0F74300   push DirWatch.0043F7D0                   ; |ValueName = "RegSerial"
00409A2B  |.  50            push eax                                 ; |hKey
00409A2C  |.  C74424 24 010>mov dword ptr ss:[esp+24],1              ; |
00409A34  |.  FF15 10304300 call dword ptr ds:[<&ADVAPI32.RegQueryVa>; \RegQueryValueExA
00409A3A  |.  85C0          test eax,eax
00409A3C  |.  74 08         je short DirWatch.00409A46
00409A3E  |.  5F            pop edi
00409A3F  |.  33C0          xor eax,eax
00409A41  |.  5E            pop esi
00409A42  |.  83C4 0C       add esp,0C
00409A45  |.  C3            retn
00409A46  |>  33C0          xor eax,eax
00409A48  |>  8A0C06        /mov cl,byte ptr ds:[esi+eax]            ;  依次取注册码的前20位
00409A4B  |.  8888 A0224400 |mov byte ptr ds:[eax+4422A0],cl         ;  如果输入的注册码大于20位,20位以后都被忽略
00409A51  |.  40            |inc eax
00409A52  |.  83F8 14       |cmp eax,14
00409A55  |.^ 7C F1         \jl short DirWatch.00409A48
00409A57  |.  68 A0224400   push DirWatch.004422A0                   ;  输入的假码(ASCII "78787878")
00409A5C  |.  8BCF          mov ecx,edi
00409A5E  |.  C605 B4224400>mov byte ptr ds:[4422B4],0
00409A65  |.  E8 16000000   call DirWatch.00409A80                   ;  重启验证call,进入分析
00409A6A  |.  8B5424 08     mov edx,dword ptr ss:[esp+8]
00409A6E  |.  8BF0          mov esi,eax
00409A70  |.  52            push edx                                 ; /hKey
00409A71  |.  FF15 14304300 call dword ptr ds:[<&ADVAPI32.RegCloseKe>; \RegCloseKey
00409A77  |.  8BC6          mov eax,esi
00409A79  |.  5F            pop edi
00409A7A  |.  5E            pop esi
00409A7B  |.  83C4 0C       add esp,0C
00409A7E  \.  C3            retn

2—— 重启验证call,进入分析
00409A80  /$  64:A1 0000000>mov eax,dword ptr fs:[0]
00409A86  |.  8B15 C8204400 mov edx,dword ptr ds:[4420C8]            ;  机器码 ASCII "ABCDEFGHIJKLV61E80T8"
00409A8C  |.  6A FF         push -1
00409A8E  |.  68 98194300   push DirWatch.00431998
00409A93  |.  50            push eax
00409A94  |.  33C0          xor eax,eax
00409A96  |.  64:8925 00000>mov dword ptr fs:[0],esp
00409A9D  |.  8B4A F8       mov ecx,dword ptr ds:[edx-8]             ;  ds:[005E59B0]=00000014,为机器码的长度
00409AA0  |.  83EC 70       sub esp,70
00409AA3  |.  85C9          test ecx,ecx                             ;  检查机器码长度是否为0,为0则跳至00409ACD
00409AA5  |.  53            push ebx
00409AA6  |.  55            push ebp
00409AA7  |.  56            push esi
00409AA8  |.  57            push edi
00409AA9  |.  7E 20         jle short DirWatch.00409ACB
00409AAB  |.  8BF2          mov esi,edx
00409AAD  |.  8D4C24 14     lea ecx,dword ptr ss:[esp+14]
00409AB1  |.  2BF1          sub esi,ecx
00409AB3  |>  8D0C06        /lea ecx,dword ptr ds:[esi+eax]          ;\
00409AB6  |.  40            |inc eax                                 ; |
00409AB7  |.  8A4C0C 14     |mov cl,byte ptr ss:[esp+ecx+14]         ; |
00409ABB  |.  884C04 13     |mov byte ptr ss:[esp+eax+13],cl         ; | 该处循环算出机器码的长度
00409ABF  |.  8B4A F8       |mov ecx,dword ptr ds:[edx-8]            ; |
00409AC2  |.  3BC1          |cmp eax,ecx                             ; |
00409AC4  |.^ 7C ED         \jl short DirWatch.00409AB3               /
00409AC6  |.  83F8 14       cmp eax,14                               ;  机器码长度应大于等于20
00409AC9  |.  7D 0F         jge short DirWatch.00409ADA
00409ACB  |>  8AD0          /mov dl,al                               ;  \
00409ACD  |.  80C2 41       |add dl,41                               ;  |
00409AD0  |.  885404 14     |mov byte ptr ss:[esp+eax+14],dl         ;  |  若机器码长度小于20,该处循环负责将其补到20位
00409AD4  |.  40            |inc eax                                 ;  |
00409AD5  |.  83F8 14       |cmp eax,14                              ;  |
00409AD8  |.^ 7C F1         \jl short DirWatch.00409ACB              ;  /
00409ADA  |>  8D4424 28     lea eax,dword ptr ss:[esp+28]
00409ADE  |.  50            push eax
00409ADF  |.  E8 0CA7FFFF   call DirWatch.004041F0                   ;  进行MD5初始化,进去一看便知
00409AE4  |.  8D4C24 18     lea ecx,dword ptr ss:[esp+18]
00409AE8  |.  6A 14         push 14
00409AEA  |.  8D5424 30     lea edx,dword ptr ss:[esp+30]
00409AEE  |.  51            push ecx
00409AEF  |.  52            push edx
00409AF0  |.  E8 2BA7FFFF   call DirWatch.00404220
00409AF5  |.  8D4424 38     lea eax,dword ptr ss:[esp+38]
00409AF9  |.  8D4C24 20     lea ecx,dword ptr ss:[esp+20]
00409AFD  |.  50            push eax                                 ;  eax=0012FAD0,用来保存最终的散列值
00409AFE  |.  51            push ecx
00409AFF  |.  E8 8CAEFFFF   call DirWatch.00404990                   ;  MD5计算,主要是将计算出的散列值(AE 1A 7D 23 BE 05 11 F6 A1 B1 5D 75 C4 A2 BE F9)
00409B04  |.  83C4 18       add esp,18                               ;  保存在0012FAD0中,再将其转换为小写放入内存单元中,
00409B07  |.  8B7424 10     mov esi,dword ptr ss:[esp+10]            ;  转换后的MD5值,堆栈 ss:[0012FAB8]=003E5A58, (ASCII "ae1a7d23be0511f6a1b15d75c4a2bef9")
00409B0B  |.  33C9          xor ecx,ecx
00409B0D  |.  8A46 01       mov al,byte ptr ds:[esi+1]               ;  取"ae1a7d23be0511f6a1b15d75c4a2bef9"的第二个字符'e',放入al中
00409B10  |.  884424 16     mov byte ptr ss:[esp+16],al              ;  将机器码的第三个字符'C'用'e'替换
00409B14  |.  8A46 04       mov al,byte ptr ds:[esi+4]               ;  取"ae1a7d23be0511f6a1b15d75c4a2bef9"的第五个字符'7',放入al中
00409B17  |.  884424 18     mov byte ptr ss:[esp+18],al              ;  将机器码的第五个字符'E'用'7'替换
00409B1B  |.  8A46 07       mov al,byte ptr ds:[esi+7]               ;  取"ae1a7d23be0511f6a1b15d75c4a2bef9"的第八个字符'3',放入al中
00409B1E  |.  884424 1C     mov byte ptr ss:[esp+1C],al              ;  将机器码的第九个字符'I'用'3'替换
00409B22  |>  8A440C 14     /mov al,byte ptr ss:[esp+ecx+14]         ;  该处循环继续对机器码进行处理,ecx作为计数器
00409B26  |.  3C 30         |cmp al,30
00409B28  |.  7C 0C         |jl short DirWatch.00409B36
00409B2A  |.  3C 39         |cmp al,39
00409B2C  |.  7F 08         |jg short DirWatch.00409B36
00409B2E  |.  B2 69         |mov dl,69
00409B30  |.  2AD0          |sub dl,al
00409B32  |.  88540C 14     |mov byte ptr ss:[esp+ecx+14],dl
00409B36  |>  3C 41         |cmp al,41
00409B38  |.  7C 0C         |jl short DirWatch.00409B46
00409B3A  |.  3C 5A         |cmp al,5A
00409B3C  |.  7F 08         |jg short DirWatch.00409B46
00409B3E  |.  B2 9B         |mov dl,9B
00409B40  |.  2AD0          |sub dl,al
00409B42  |.  88540C 14     |mov byte ptr ss:[esp+ecx+14],dl
00409B46  |>  3C 61         |cmp al,61
00409B48  |.  7C 0C         |jl short DirWatch.00409B56
00409B4A  |.  3C 7A         |cmp al,7A
00409B4C  |.  7F 08         |jg short DirWatch.00409B56
00409B4E  |.  B2 DB         |mov dl,0DB
00409B50  |.  2AD0          |sub dl,al
00409B52  |.  88540C 14     |mov byte ptr ss:[esp+ecx+14],dl
00409B56  |>  41            |inc ecx
00409B57  |.  83F9 14       |cmp ecx,14
00409B5A  |.^ 7C C6         \jl short DirWatch.00409B22              ;  循环结束后,机器码变为:ZYvW2UTS6QPOE38V19G1
00409B5C  |.  8A4424 15     mov al,byte ptr ss:[esp+15]              ;  取机器码第二位'Y'放入al中
00409B60  |.  8A4C24 21     mov cl,byte ptr ss:[esp+21]              ;  取机器码第十四位'3'放入cl中
00409B64  |.  8A5424 1E     mov dl,byte ptr ss:[esp+1E]              ;  取机器码第十一位'P'放入dl中
00409B68  |.  884424 21     mov byte ptr ss:[esp+21],al              ;  用机器码第二位'Y'替换第十四位'3'
00409B6C  |.  8A4424 17     mov al,byte ptr ss:[esp+17]              ;  取第四位'W'
00409B70  |.  8BAC24 900000>mov ebp,dword ptr ss:[esp+90]            ;  将假码“78787878”放入ebp中
00409B77  |.  884424 1E     mov byte ptr ss:[esp+1E],al              ;  用第四位'W'替换第十一位'P'
00409B7B  |.  8A4424 19     mov al,byte ptr ss:[esp+19]              ;  取第六位‘U’放入al
00409B7F  |.  884C24 15     mov byte ptr ss:[esp+15],cl              ;  用第十四位'3'替换第二位
00409B83  |.  8A4C24 20     mov cl,byte ptr ss:[esp+20]              ;  十三位'E'放入cl
00409B87  |.  884424 20     mov byte ptr ss:[esp+20],al              ;  从00409B5C到00409BAF为对机器码的第二次处理,不再详细分析,请读者自行分析
00409B8B  |.  8A4424 1B     mov al,byte ptr ss:[esp+1B]
00409B8F  |.  885424 17     mov byte ptr ss:[esp+17],dl
00409B93  |.  8A5424 22     mov dl,byte ptr ss:[esp+22]
00409B97  |.  884C24 19     mov byte ptr ss:[esp+19],cl
00409B9B  |.  8A4C24 23     mov cl,byte ptr ss:[esp+23]
00409B9F  |.  884424 22     mov byte ptr ss:[esp+22],al
00409BA3  |.  8A4424 1D     mov al,byte ptr ss:[esp+1D]
00409BA7  |.  885424 1B     mov byte ptr ss:[esp+1B],dl
00409BAB  |.  884C24 1D     mov byte ptr ss:[esp+1D],cl
00409BAF  |.  884424 23     mov byte ptr ss:[esp+23],al              ;  此步结束后机器码变为Z3vP2ET86VWOUYSQ19G1
00409BB3  |.  8BCD          mov ecx,ebp                              ;  假码放入ecx
00409BB5  |.  8D5424 14     lea edx,dword ptr ss:[esp+14]            ;  取机器码第一位'Z'
00409BB9  |.  33C0          xor eax,eax
00409BBB  |.  2BCA          sub ecx,edx
00409BBD  |>  8D7C04 14     /lea edi,dword ptr ss:[esp+eax+14]       ;  \
00409BC1  |.  33DB          |xor ebx,ebx                             ;   |
00409BC3  |.  0FBE1439      |movsx edx,byte ptr ds:[ecx+edi]         ;   |
00409BC7  |.  8A1F          |mov bl,byte ptr ds:[edi]                ;   |
00409BC9  |.  3BD3          |cmp edx,ebx                             ;   |此处循环逐位取假码与变形后的机器码比较,取至第16位,不等则跳向失败,eax为计数器
00409BCB      0F85 B7000000 jnz DirWatch.00409C88                    ;   |
00409BD1  |.  40            |inc eax                                 ;   |
00409BD2  |.  83F8 10       |cmp eax,10                              ;   |
00409BD5  |.^ 7C E6         \jl short DirWatch.00409BBD              ;  /
00409BD7  |.  8A46 1F       mov al,byte ptr ds:[esi+1F]              ;  取"ae1a7d23be0511f6a1b15d75c4a2bef9"最后一位'9'放入al
00409BDA  |.  A2 18F94300   mov byte ptr ds:[43F918],al
00409BDF  |.  8A4E 0F       mov cl,byte ptr ds:[esi+F]               ;  取"ae1a7d23be0511f6a1b15d75c4a2bef9"的第十六位'6'放入cl
00409BE2  |.  880D 19F94300 mov byte ptr ds:[43F919],cl
00409BE8  |.  8A56 07       mov dl,byte ptr ds:[esi+7]               ;  取"ae1a7d23be0511f6a1b15d75c4a2bef9"的八位'3'放入dl
00409BEB  |.  8815 40FB4300 mov byte ptr ds:[43FB40],dl
00409BF1  |.  8A5E 03       mov bl,byte ptr ds:[esi+3]               ;  取"ae1a7d23be0511f6a1b15d75c4a2bef9"的第四位'a'放入bl
00409BF4  |.  3C 61         cmp al,61                                ;  继续对后四位进行处理
00409BF6  |.  881D 41FB4300 mov byte ptr ds:[43FB41],bl              ;  以下代码均比较简单,不再继续分析
00409BFC  |.  72 0B         jb short DirWatch.00409C09
00409BFE  |.  3C 7A         cmp al,7A
00409C00  |.  77 07         ja short DirWatch.00409C09
00409C02  |.  2C 20         sub al,20
00409C04  |.  A2 18F94300   mov byte ptr ds:[43F918],al
00409C09  |>  80F9 61       cmp cl,61
00409C0C  |.  72 0E         jb short DirWatch.00409C1C
00409C0E  |.  80F9 7A       cmp cl,7A
00409C11  |.  77 09         ja short DirWatch.00409C1C
00409C13  |.  80E9 20       sub cl,20
00409C16  |.  880D 19F94300 mov byte ptr ds:[43F919],cl
00409C1C  |>  80FA 61       cmp dl,61
00409C1F  |.  72 0E         jb short DirWatch.00409C2F
00409C21  |.  80FA 7A       cmp dl,7A
00409C24  |.  77 09         ja short DirWatch.00409C2F
00409C26  |.  80EA 20       sub dl,20
00409C29  |.  8815 40FB4300 mov byte ptr ds:[43FB40],dl
00409C2F  |>  80FB 61       cmp bl,61
00409C32  |.  72 0E         jb short DirWatch.00409C42
00409C34  |.  80FB 7A       cmp bl,7A
00409C37  |.  77 09         ja short DirWatch.00409C42
00409C39  |.  80EB 20       sub bl,20
00409C3C  |.  881D 41FB4300 mov byte ptr ds:[43FB41],bl              ;  到这里,根据上面的分析,注册码后四位应为963A,完整的注册码为Z3vP2ET86VWOUYSQ963A
00409C42  |>  0FBE45 10     movsx eax,byte ptr ss:[ebp+10]           ;  取假码的第十七位
00409C46  |.  8B0D 18F94300 mov ecx,dword ptr ds:[43F918]
00409C4C  |.  81E1 FF000000 and ecx,0FF
00409C52  |.  3BC8          cmp ecx,eax                              ;  真假比较,不等就跳向失败
00409C54  |.  75 4A         jnz short DirWatch.00409CA0
00409C56  |.  0FBE55 11     movsx edx,byte ptr ss:[ebp+11]           ;  取假码的第十八位
00409C5A  |.  33C0          xor eax,eax
00409C5C  |.  A0 19F94300   mov al,byte ptr ds:[43F919]
00409C61  |.  3BC2          cmp eax,edx                              ;  真假比较,不等就跳向失败
00409C63  |.  75 3B         jnz short DirWatch.00409CA0
00409C65  |.  0FBE4D 12     movsx ecx,byte ptr ss:[ebp+12]           ;  取假码的第十九位
00409C69  |.  33D2          xor edx,edx
00409C6B  |.  8A15 40FB4300 mov dl,byte ptr ds:[43FB40]
00409C71  |.  3BD1          cmp edx,ecx                              ;  真假比较,不等就跳向失败
00409C73  |.  75 2B         jnz short DirWatch.00409CA0
00409C75  |.  0FBE45 13     movsx eax,byte ptr ss:[ebp+13]           ;  取假码的第二十位
00409C79  |.  33C9          xor ecx,ecx
00409C7B  |.  8ACB          mov cl,bl
00409C7D  |.  3BC8          cmp ecx,eax                              ;  真假比较,不等就跳向失败
00409C7F  |.  75 1F         jnz short DirWatch.00409CA0
00409C81  |.  BE 01000000   mov esi,1
00409C86  |.  EB 1A         jmp short DirWatch.00409CA2
00409C88  |>  8D4C24 10     lea ecx,dword ptr ss:[esp+10]            ;  A-------->失败从这里走过
00409C8C  |.  C78424 880000>mov dword ptr ss:[esp+88],-1             ;  B-总的来说,有两处判断注册码的关键跳转,一处是对注册码的前16位进行判断,失败将跳向上面的A处
00409C97  |.  E8 D4EE0100   call DirWatch.00428B70                   ;  C-另一处是对注册码后四位进行的判断,失败跳向下面的F处
00409C9C  |.  33C0          xor eax,eax                              ;  D-如果要对该软件进行爆破的话,这里绝对是一处风景秀丽的爆破点:将A--F这6行全部给无情的NOP掉
00409C9E  |>  EB 18         jmp short DirWatch.00409CB8              ;  E-这样爆破后软件首次运行仍为未注册版,需要试注册一次,再次重新启动,才可用。
00409CA0  |>  33F6          xor esi,esi                              ;  F-------->失败从这里走过
00409CA2  |.  8D4C24 10     lea ecx,dword ptr ss:[esp+10]            ;  成功从这里开始!
00409CA6  |.  C78424 880000>mov dword ptr ss:[esp+88],-1
00409CB1  |.  E8 BAEE0100   call DirWatch.00428B70
00409CB6  |.  8BC6          mov eax,esi
00409CB8  |>  8B8C24 800000>mov ecx,dword ptr ss:[esp+80]
00409CBF  |.  5F            pop edi
00409CC0  |.  5E            pop esi
00409CC1  |.  5D            pop ebp
00409CC2  |.  5B            pop ebx
00409CC3  |.  64:890D 00000>mov dword ptr fs:[0],ecx
00409CCA  |.  83C4 7C       add esp,7C
00409CCD  \.  C2 0400       retn 4

本机的注册码:
      MacID:
           ABCDEFGHIJKLV61E80T8
      RegSerial:
           Z3vP2ET86VWOUYSQ963A
算法之外;
    该软件的注册信息保存在注册表里,另外会在C:\Program Files目录下生成名为Dir800621.ini的文件。
    试用版程序会从注册表里获取安装时间,同时获取Dir800621.ini文件的创建时间,将两个时间进行比较,取其较早的时间与当前系统时间比较,来判断试用期已经过了多少。
    试用期满的话可将注册表[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft]目录下的SelfDePro项和C:\Program Files目录下的Dir800621.ini文件同时删除,即可重新获得15天的试用时间。

------------------------------------------------------------------------
【破解总结】
该软件的算法比较简单,用到了MD5算法,没有亮点。
软件作者对软件进行升级时没有更新算法,注册机是跟踪该软件的4.0版时写的,没想到4.1版完全适用...

                                                                                                                                                     
                                                                                                                                    CrAcKeD By DeMoV
                                                                                                                                            2011-2-9
------------------------------------------------------------------------
【版权声明】本文原创于吾爱破解论坛, 转载请注明作者并保持文章的完整, 谢谢!

KeyGen.zip (3.42 KB, 下载次数: 239)

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ericxialei 发表于 2011-4-5 11:19
这个怎么玩啊?没看懂啦
huhanshuai 发表于 2011-4-5 12:07
楼主 真的很牛 上面一大窜我是看不明白,但听你娓娓到来,我仿佛觉得那些数字不抽象,一个个有生命地跳进我的眼里!
 楼主| chinasmu 发表于 2011-4-5 15:50
HadgeROL 发表于 2011-4-5 16:11
额,貌似发错地方了,破文貌似不放在这里的
playboywhc 发表于 2011-4-5 16:20
呵呵 这么发出来也好,不错的。
kinst999 发表于 2011-4-5 16:22
呵呵额 这个名字起的不错
jzyjd 发表于 2011-4-5 21:20
看了看,还行。
GZTHQ 发表于 2011-4-6 02:02
软件界面美化有待提高啊
kiss-you 发表于 2011-4-6 09:14
GZTHQ 发表于 2011-4-6 02:02
软件界面美化有待提高啊

同感!!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 07:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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