【破解日期】 2006年5月16日
【破解作者】 Ryosuke
【作者邮箱】 没有
【作者主页】 没有
【使用工具】 OD
【破解平台】 Windows 95/98/ME/2000/XP
【软件名称】 Hide Files and Folders V2.5
【下载地址】 http://www.skycn.com/soft/13171.html
【软件简介】 Hide Files And Folders 是一个非常容易使用、可以工作在 Windows 内核级别的文件和文件夹加密工具,支持禁止用户访问互联网,可以为任意程序加上密码保护,可以对任意的文件或者文件夹进行加密隐藏保护,非常容易使用!
【软件大小】 737 KB
【加壳方式】 无壳
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】
运行,输入默认密码"admin",按注册按钮,随便输入注册码,出现错误信息。查找"The registration code is incorrect.",来到
004A10F0 /$ 55 push ebp
004A10F1 |. 8BEC mov ebp, esp
004A10F3 |. 6A 00 push 0
004A10F5 |. 53 push ebx
004A10F6 |. 56 push esi
004A10F7 |. 8BF2 mov esi, edx
004A10F9 |. 8BD8 mov ebx, eax
004A10FB |. 33C0 xor eax, eax
004A10FD |. 55 push ebp
004A10FE |. 68 6F114A00 push 004A116F
004A1103 |. 64:FF30 push dword ptr fs:[eax]
004A1106 |. 64:8920 mov fs:[eax], esp
004A1109 |. 8D45 FC lea eax, [ebp-4]
004A110C |. 8BCE mov ecx, esi
004A110E |. 8BD3 mov edx, ebx
004A1110 |. E8 C3FEFFFF call 004A0FD8 //关键CALL
004A1115 |. 84C0 test al, al
004A1117 |. 74 40 je short 004A1159
004A1119 |. 8B45 FC mov eax, [ebp-4]
004A111C |. E8 0BF5FFFF call 004A062C
004A1121 |. 84C0 test al, al
004A1123 |. 74 1F je short 004A1144
004A1125 |. 8B45 FC mov eax, [ebp-4]
004A1128 |. E8 6BF8FFFF call 004A0998
004A112D |. 6A 00 push 0 ; /Arg1 = 00000000
004A112F |. 66:8B0D 7C114>mov cx, [4A117C] ; |
004A1136 |. B2 02 mov dl, 2 ; |
004A1138 |. B8 88114A00 mov eax, 004A1188 ; |ASCII "The registration code is correct.",CR," Thank you."
004A113D |. E8 8E10F9FF call 004321D0 ; \HFF.004321D0
004A1142 |. EB 15 jmp short 004A1159
004A1144 |> 6A 00 push 0 ; /Arg1 = 00000000
004A1146 |. 66:8B0D 7C114>mov cx, [4A117C] ; |
004A114D |. B2 01 mov dl, 1 ; |
004A114F |. B8 C0114A00 mov eax, 004A11C0 ; |ASCII "The registration code is incorrect."
004A1154 |. E8 7710F9FF call 004321D0 ; \HFF.004321D0
004A1159 |> 33C0 xor eax, eax
004A115B |. 5A pop edx
004A115C |. 59 pop ecx
004A115D |. 59 pop ecx
004A115E |. 64:8910 mov fs:[eax], edx
004A1161 |. 68 76114A00 push 004A1176
004A1166 |> 8D45 FC lea eax, [ebp-4]
004A1169 |. E8 2A35F6FF call 00404698
004A116E \. C3 retn
跟进关键的算法CALL
004A062C /$ 55 push ebp
004A062D |. 8BEC mov ebp, esp
004A062F |. 83C4 F0 add esp, -10
004A0632 |. 53 push ebx
004A0633 |. 56 push esi
004A0634 |. 57 push edi
004A0635 |. 33D2 xor edx, edx
004A0637 |. 8955 F4 mov [ebp-C], edx
004A063A |. 8955 F0 mov [ebp-10], edx
004A063D |. 8945 FC mov [ebp-4], eax
004A0640 |. 8B45 FC mov eax, [ebp-4]
004A0643 |. E8 0045F6FF call 00404B48
004A0648 |. 33C0 xor eax, eax
004A064A |. 55 push ebp
004A064B |. 68 35074A00 push 004A0735
004A0650 |. 64:FF30 push dword ptr fs:[eax]
004A0653 |. 64:8920 mov fs:[eax], esp
004A0656 |. 33DB xor ebx, ebx
004A0658 |. E8 87F8FFFF call 0049FEE4
004A065D |. 8B45 FC mov eax, [ebp-4]
004A0660 |. E8 F342F6FF call 00404958
004A0665 |. 83F8 10 cmp eax, 10 //注册码长度必须是16位
004A0668 |. 0F85 A4000000 jnz 004A0712
004A066E |. 8D45 F4 lea eax, [ebp-C]
004A0671 |. 50 push eax
004A0672 |. B9 08000000 mov ecx, 8
004A0677 |. BA 01000000 mov edx, 1
004A067C |. 8B45 FC mov eax, [ebp-4]
004A067F |. E8 3445F6FF call 00404BB8 ; 取注册码前8位
004A0684 |. 8D45 F0 lea eax, [ebp-10]
004A0687 |. 50 push eax
004A0688 |. B9 08000000 mov ecx, 8
004A068D |. BA 09000000 mov edx, 9
004A0692 |. 8B45 FC mov eax, [ebp-4]
004A0695 |. E8 1E45F6FF call 00404BB8 ; 取注册码后8位
004A069A |. 8D55 F8 lea edx, [ebp-8]
004A069D |. 8B45 F4 mov eax, [ebp-C] ; 前8位
004A06A0 |. E8 BB2BF6FF call 00403260
004A06A5 |. 837D F8 00 cmp dword ptr [ebp-8], 0
004A06A9 |. 75 67 jnz short 004A0712
004A06AB |. 8D55 F8 lea edx, [ebp-8]
004A06AE |. 8B45 F0 mov eax, [ebp-10]
004A06B1 |. E8 AA2BF6FF call 00403260
004A06B6 |. 837D F8 00 cmp dword ptr [ebp-8], 0
004A06BA |. 75 56 jnz short 004A0712
004A06BC |. BE 30000000 mov esi, 30
004A06C1 |> 33C0 /xor eax, eax
004A06C3 |. 8945 F8 |mov [ebp-8], eax
004A06C6 |. 8B45 FC |mov eax, [ebp-4]
004A06C9 |. E8 8A42F6FF |call 00404958 ; 注册码长度0x10
004A06CE |. 85C0 |test eax, eax
004A06D0 |. 7E 17 |jle short 004A06E9
004A06D2 |. BA 01000000 |mov edx, 1
004A06D7 |> 8BCE |/mov ecx, esi
004A06D9 |. 8B7D FC ||mov edi, [ebp-4]
004A06DC |. 3A4C17 FF ||cmp cl, [edi+edx-1]
004A06E0 |. 75 03 ||jnz short 004A06E5
004A06E2 |. FF45 F8 ||inc dword ptr [ebp-8]
004A06E5 |> 42 ||inc edx
004A06E6 |. 48 ||dec eax
004A06E7 |.^ 75 EE |\jnz short 004A06D7
004A06E9 |> 837D F8 05 |cmp dword ptr [ebp-8], 5 //注册码中相同码个数的最大值不能超过5,
004A06ED |. 7E 09 |jle short 004A06F8
004A06EF |. C745 F8 FFFFF>|mov dword ptr [ebp-8], -1
004A06F6 |. EB 06 |jmp short 004A06FE
004A06F8 |> 46 |inc esi
004A06F9 |. 83FE 3A |cmp esi, 3A
004A06FC |.^ 75 C3 \jnz short 004A06C1
//上面一段是计算注册码中相同码个数的最大值,这个值不能超过5,超过了注册码就无效了
004A06FE |> 837D F8 00 cmp dword ptr [ebp-8], 0
004A0702 |. 7C 0E jl short 004A0712
004A0704 |. 8B45 FC mov eax, [ebp-4]
004A0707 |. E8 B0FDFFFF call 004A04BC //注册码验证核心,跟进
004A070C |. 84C0 test al, al
004A070E |. 74 02 je short 004A0712
004A0710 |. B3 01 mov bl, 1
004A0712 |> 33C0 xor eax, eax
004A0714 |. 5A pop edx
004A0715 |. 59 pop ecx
004A0716 |. 59 pop ecx
004A0717 |. 64:8910 mov fs:[eax], edx
004A071A |. 68 3C074A00 push 004A073C
004A071F |> 8D45 F0 lea eax, [ebp-10]
004A0722 |. BA 02000000 mov edx, 2
004A0727 |. E8 903FF6FF call 004046BC
004A072C |. 8D45 FC lea eax, [ebp-4]
004A072F |. E8 643FF6FF call 00404698
004A0734 \. C3 retn 跟进验证核心CALL
004A04BC /$ 55 push ebp
004A04BD |. 8BEC mov ebp, esp
004A04BF |. B9 06000000 mov ecx, 6
004A04C4 |> 6A 00 /push 0
004A04C6 |. 6A 00 |push 0
004A04C8 |. 49 |dec ecx
004A04C9 |.^ 75 F9 \jnz short 004A04C4
004A04CB |. 53 push ebx
004A04CC |. 56 push esi
004A04CD |. 8BD8 mov ebx, eax
004A04CF |. 33C0 xor eax, eax
004A04D1 |. 55 push ebp
004A04D2 |. 68 1A064A00 push 004A061A
004A04D7 |. 64:FF30 push dword ptr fs:[eax]
004A04DA |. 64:8920 mov fs:[eax], esp
004A04DD |. 8D45 FC lea eax, [ebp-4]
004A04E0 |. 8A13 mov dl, [ebx] ; 注册码
004A04E2 |. E8 9943F6FF call 00404880 //数字字符转成对应值
004A04E7 |. 8B45 FC mov eax, [ebp-4]
004A04EA |. E8 BD89F6FF call 00408EAC
004A04EF |. 8BF0 mov esi, eax
004A04F1 |. 8D45 F8 lea eax, [ebp-8]
004A04F4 |. 8A53 01 mov dl, [ebx+1]
004A04F7 |. E8 8443F6FF call 00404880
004A04FC |. 8B45 F8 mov eax, [ebp-8]
004A04FF |. E8 A889F6FF call 00408EAC
004A0504 |. 03F0 add esi, eax
004A0506 |. 8D45 F4 lea eax, [ebp-C]
004A0509 |. 8A53 02 mov dl, [ebx+2]
004A050C |. E8 6F43F6FF call 00404880
004A0511 |. 8B45 F4 mov eax, [ebp-C]
004A0514 |. E8 9389F6FF call 00408EAC
004A0519 |. 03F0 add esi, eax
004A051B |. 8D45 F0 lea eax, [ebp-10]
004A051E |. 8A53 03 mov dl, [ebx+3]
004A0521 |. E8 5A43F6FF call 00404880
004A0526 |. 8B45 F0 mov eax, [ebp-10]
004A0529 |. E8 7E89F6FF call 00408EAC
004A052E |. 03F0 add esi, eax
004A0530 |. A1 9C164B00 mov eax, [4B169C]
004A0535 |. 3B30 cmp esi, [eax] ; [eax]=0x16,注册码前4位和为0x16
004A0537 |. 0F85 BA000000 jnz 004A05F7
004A053D |. 8D45 EC lea eax, [ebp-14]
004A0540 |. 8A53 04 mov dl, [ebx+4]
004A0543 |. E8 3843F6FF call 00404880
004A0548 |. 8B45 EC mov eax, [ebp-14]
004A054B |. E8 5C89F6FF call 00408EAC
004A0550 |. 8BF0 mov esi, eax
004A0552 |. 8D45 E8 lea eax, [ebp-18]
004A0555 |. 8A53 07 mov dl, [ebx+7]
004A0558 |. E8 2343F6FF call 00404880
004A055D |. 8B45 E8 mov eax, [ebp-18]
004A0560 |. E8 4789F6FF call 00408EAC
004A0565 |. 03F0 add esi, eax
004A0567 |. 8D45 E4 lea eax, [ebp-1C]
004A056A |. 8A53 0A mov dl, [ebx+A]
004A056D |. E8 0E43F6FF call 00404880
004A0572 |. 8B45 E4 mov eax, [ebp-1C]
004A0575 |. E8 3289F6FF call 00408EAC
004A057A |. 03F0 add esi, eax
004A057C |. 8D45 E0 lea eax, [ebp-20]
004A057F |. 8A53 0D mov dl, [ebx+D]
004A0582 |. E8 F942F6FF call 00404880
004A0587 |. 8B45 E0 mov eax, [ebp-20]
004A058A |. E8 1D89F6FF call 00408EAC
004A058F |. 03F0 add esi, eax
004A0591 |. A1 D4164B00 mov eax, [4B16D4]
004A0596 |. 3B30 cmp esi, [eax] ; [eax]=0x1e,注册码5,8,11,14位的和必须0x1E
004A0598 |. 75 5D jnz short 004A05F7
004A059A |. 8D45 DC lea eax, [ebp-24]
004A059D |. 8A53 06 mov dl, [ebx+6]
004A05A0 |. E8 DB42F6FF call 00404880
004A05A5 |. 8B45 DC mov eax, [ebp-24]
004A05A8 |. E8 FF88F6FF call 00408EAC
004A05AD |. 8BF0 mov esi, eax
004A05AF |. 8D45 D8 lea eax, [ebp-28]
004A05B2 |. 8A53 09 mov dl, [ebx+9]
004A05B5 |. E8 C642F6FF call 00404880
004A05BA |. 8B45 D8 mov eax, [ebp-28]
004A05BD |. E8 EA88F6FF call 00408EAC
004A05C2 |. 03F0 add esi, eax
004A05C4 |. 8D45 D4 lea eax, [ebp-2C]
004A05C7 |. 8A53 0C mov dl, [ebx+C]
004A05CA |. E8 B142F6FF call 00404880
004A05CF |. 8B45 D4 mov eax, [ebp-2C]
004A05D2 |. E8 D588F6FF call 00408EAC
004A05D7 |. 03F0 add esi, eax
004A05D9 |. 8D45 D0 lea eax, [ebp-30]
004A05DC |. 8A53 0F mov dl, [ebx+F]
004A05DF |. E8 9C42F6FF call 00404880
004A05E4 |. 8B45 D0 mov eax, [ebp-30]
004A05E7 |. E8 C088F6FF call 00408EAC
004A05EC |. 03F0 add esi, eax
004A05EE |. A1 B4134B00 mov eax, [4B13B4]
004A05F3 |. 3B30 cmp esi, [eax] ; [eax]=0x08,注册码7,10,13,16位的和必须0x8
004A05F5 |. 74 04 je short 004A05FB
004A05F7 |> 33C0 xor eax, eax
004A05F9 |. EB 02 jmp short 004A05FD
004A05FB |> B0 01 mov al, 1 ;设置成功标志
004A05FD |> 8BD8 mov ebx, eax
004A05FF |. 33C0 xor eax, eax
004A0601 |. 5A pop edx
004A0602 |. 59 pop ecx
004A0603 |. 59 pop ecx
004A0604 |. 64:8910 mov fs:[eax], edx
004A0607 |. 68 21064A00 push 004A0621
004A060C |> 8D45 D0 lea eax, [ebp-30]
004A060F |. BA 0C000000 mov edx, 0C
004A0614 |. E8 A340F6FF call 004046BC
004A0619 \. C3 retn
验证程序没有验证6,9,12,15位,这些位任意。 ///////////////////////////////////////////////////////////////////////////////////////////
注册机代码
生成所有的注册码:
// KeyGen.cpp : Defines the entry point for the console application.
//Code By NightFox 2006.05.16
#include "stdafx.h"
#include <STDIO.H>
#include <WINDOWS.H>
int main(int argc, char* argv[])
{
BYTE serial[16];
char serialstr[17];
int a,b,c,d;
int i;
int count,maxcount;
for(a=0;a<=9;a++)
for(b=0;b<=9;b++)
for(c=0;c<=9;c++)
for(d=0;d<=9;d++)
{
if((a+b+c+d)==0x16)
{
serial[0]=a;
serial[1]=b;
serial[2]=c;
serial[3]=d;
}
if((a+b+c+d)==0x1e)
{
serial[0x4]=a;
serial[0x7]=b;
serial[0xA]=c;
serial[0xD]=d;
break;
}
if((a+b+c+d)==0x8)
{
serial[0x6]=a;
serial[0x9]=b;
serial[0xC]=c;
serial[0xF]=d;
}
serial[0x5]=a;
serial[0x8]=b;
serial[0xB]=c;
serial[0xE]=d;
if((serial[0x0]+serial[0x1]+serial[0x2]+serial[0x3])==0x16
&&(serial[0x4]+serial[0x7]+serial[0xA]+serial[0xD])==0x1e
&&(serial[0x6]+serial[0x9]+serial[0xC]+serial[0xF])==0x08)
{
maxcount=0;
for(i=0;i<=9;i++)
{
count=0;
for(int j=0;j<16;j++)
{
if(serial[j]==i)
count++;
}
maxcount=count>maxcount?count:maxcount;
}
if(maxcount<=5)
{
sprintf(serialstr,"%01d%01d%01d%01d%01d%01d%01d%01d%01d%01d%01d%01d%01d%01d%01d%01d",
serial[0],serial[1],serial[2],serial[3],serial[4],serial[5],serial[6],serial[7],
serial[8],serial[9],serial[10],serial[11],serial[12],serial[13],serial[14],serial[15]);
printf("%s\n",serialstr);
//system("pause");
}
}
}
system("pause");
return 0;
}
算法很简单,就不多说了。
///////////////////////////////////////////////////////////////////////////////////////////
--------------------------------------------------------------------------------
【破解总结】
谢谢你能看到这里。
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课