Easy File & Folder Protector 5.12追码记
本帖最后由 GGLHY 于 2011-1-22 18:16 编辑Easy File & Folder Protector 5.12追码记
软件名称:Easy File & Folder Protector 5.12
下载地址:http://www.newhua.com/softdown/16585_2.htm
简 介:一个非常Easy的文件和文件夹保护程序.只要你给Easy File & Folder Protector设置一个密码, 你就可以保护你的任何文件和文件夹,没有这个密码任何人都无法访问经过Easy File & Folder Protector 保护的文件和文件夹.对文件夹进行保护时文件夹进行了隐藏,这样就显得更安全.此外,它还可防止别人通过网络访问你的文件.如果你要保护自己的隐私,你就要试试Easy File & Folder Protector了.使用方法: 启动保护: "添加文件或文件夹"--->"启动"按钮--->"应用"按钮 解除保护: "点选文件列表中的文件或文件夹"--->"解除"按钮
闲话少叙,咱直捣黄龙:
004A19E6|.8B45 FC mov eax, dword ptr ;假码到EAX
004A19E9|.E8 326AFEFF call 00488420
004A19EE|.8B55 F8 mov edx, dword ptr
004A19F1|.8D45 FC lea eax, dword ptr
004A19F4|.E8 3329F6FF call 0040432C
004A19F9|.8B45 FC mov eax, dword ptr
004A19FC|.E8 6BFAFEFF call 0049146C ;小兔子乖乖,把门儿开开,俺要F7进来
004A1A01|.84C0 test al, al ;好经典的句式啊!
004A1A03|.74 21 je short 004A1A26
004A1A05|.8B45 FC mov eax, dword ptr
004A1A08|.E8 B383FFFF call 00499DC0
004A1A0D|.6A 00 push 0
004A1A0F|.66:8B0D 741A4>mov cx, word ptr ; ;全局变量标志?=0004
004A1A16|.B2 02 mov dl, 2
004A1A18|.B8 801A4A00 mov eax, 004A1A80 ;registration key is ok
004A1A1D|.E8 9A06F9FF call 004320BC
004A1A22|.B3 01 mov bl, 1
004A1A24|.EB 23 jmp short 004A1A49
004A1A26|>6A 00 push 0
004A1A28|.66:8B0D 741A4>mov cx, word ptr
004A1A2F|.B2 01 mov dl, 1
004A1A31|.B8 A01A4A00 mov eax, 004A1AA0 ;registration key is not valid
004A1A36|.E8 8106F9FF call 004320BC
****************************004A19FC处 call 0049146C这里F7进来:
0049146C/$55 push ebp ;本地调用来自 0049B935, 0049BA0B, 0049BD29, 0049BD6C, 004A0E25, 004A1485, 004A19FC
0049146D|.8BEC mov ebp, esp
0049146F|.33C9 xor ecx, ecx
省略部分代码
004914AF|.E8 A030F7FF call 00404554
004914B4|.83F8 10 cmp eax, 10 ;注册码长度与10H比较
004914B7|.0F85 D0000000 jnz 0049158D ;不等就挂!
004914BD|.E8 86F6FFFF call 00490B48
004914C2|.8D45 E8 lea eax, dword ptr
004914C5|.50 push eax
004914C6|.B9 08000000 mov ecx, 8
004914CB|.BA 01000000 mov edx, 1
004914D0|.8B45 FC mov eax, dword ptr ;假码
004914D3|.E8 DC32F7FF call 004047B4
004914D8|.8B4D E8 mov ecx, dword ptr ;假码前8位
004914DB|.8D45 F4 lea eax, dword ptr
004914DE|.BA C8154900 mov edx, 004915C8 ;$
004914E3|.E8 B830F7FF call 004045A0
004914E8|.8D45 E4 lea eax, dword ptr
004914EB|.50 push eax
004914EC|.B9 08000000 mov ecx, 8
004914F1|.BA 09000000 mov edx, 9
004914F6|.8B45 FC mov eax, dword ptr ;假码
004914F9|.E8 B632F7FF call 004047B4
004914FE|.8B4D E4 mov ecx, dword ptr ;假码后8位
00491501|.8D45 F0 lea eax, dword ptr
00491504|.BA C8154900 mov edx, 004915C8 ;$
00491509|.E8 9230F7FF call 004045A0
0049150E|.8D55 F8 lea edx, dword ptr
00491511|.8B45 F4 mov eax, dword ptr
00491514|.E8 C719F7FF call 00402EE0 ;对注册码限制的检测!
00491519|.837D F8 00 cmp dword ptr , 0
0049151D|.75 6E jnz short 0049158D
0049151F|.8D55 F8 lea edx, dword ptr
00491522|.8B45 F0 mov eax, dword ptr ;$连接假码后8位
00491525|.E8 B619F7FF call 00402EE0 ;对注册码限制的检测!
0049152A|.837D F8 00 cmp dword ptr , 0
0049152E|.75 5D jnz short 0049158D
00491530|.BE 01000000 mov esi, 1 ;ESI=1
00491535|>33C0 /xor eax, eax
00491537|.8945 F8 |mov dword ptr , eax
0049153A|.8B45 FC |mov eax, dword ptr ;假码
0049153D|.E8 1230F7FF |call 00404554
00491542|.85C0 |test eax, eax ;假码长度取完了吗?
00491544|.7E 1E |jle short 00491564
00491546|.BA 01000000 |mov edx, 1 ;EDX=1
0049154B|>B9 D4154900 |/mov ecx, 004915D4 ;ASCII "0123456789ABCD臚"
00491550|.8A4C31 FF ||mov cl, byte ptr ;每次小循环只取"0123456789ABCD臚"的一位ASC,下一次小循环则取下一位
00491554|.8B7D FC ||mov edi, dword ptr ;假码
00491557|.3A4C17 FF ||cmp cl, byte ptr ;依次取假码每位ASC,二者比较
0049155B|.75 03 ||jnz short 00491560 ;相等就不跳
0049155D|.FF45 F8 ||inc dword ptr ;不跳,相等的就+1
00491560|>42 ||inc edx
00491561|.48 ||dec eax
00491562|.^ 75 E7 |\jnz short 0049154B ;每次小循环(0049154b-到00491562)只取"0123456789ABCD臚"一位ASC
00491564|>837D F8 05 |cmp dword ptr , 5 ;每个小循环完后:5,即假码中与当前所取固定字符串相同的数量
00491568|.7E 09 |jle short 00491573 ;不大于5就跳
0049156A|.C745 F8 FFFFF>|mov dword ptr , -1 ;不跳。这里就是悲剧的了!!
00491571|.EB 06 |jmp short 00491579
00491573|>46 |inc esi ;假码循环累加计数器
00491574|.83FE 11 |cmp esi, 11 ;与17比较
00491577|.^ 75 BC \jnz short 00491535 ;这个小循环其实是统计假码中相同的字符的值,该值大于5则错!!!
00491579|>837D F8 00 cmp dword ptr , 0 ;大循环是检测注册码的格式要求的。的值千万别小于0
0049157D|.7C 0E jl short 0049158D
0049157F|.8B45 FC mov eax, dword ptr ;假码
00491582|.E8 19FDFFFF call 004912A0 ; 核心算法CALL,我们F7
00491587|.84C0 test al, al ;经典标志位
00491589|.74 02 je short 0049158D
0049158B|.B3 01 mov bl, 1 ;很关键的一个地方!
0049158D|>33C0 xor eax, eax ;悲惨世界!
0049158F|.5A pop edx
00491590|.59 pop ecx
00491591|.59 pop ecx
00491592|.64:8910 mov dword ptr fs:, edx
00491595|.68 B7154900 push 004915B7
0049159A|>8D45 E4 lea eax, dword ptr
0049159D|.BA 05000000 mov edx, 5
004915A2|.E8 112DF7FF call 004042B8
004915A7|.8D45 FC lea eax, dword ptr
004915AA|.E8 E52CF7FF call 00404294
004915AF\.C3 retn
004915B0 .^ E9 E326F7FF jmp 00403C98
004915B5 .^ EB E3 jmp short 0049159A
004915B7 .8BC3 mov eax, ebx
004915B9 .5F pop edi
004915BA .5E pop esi
004915BB .5B pop ebx
004915BC .8BE5 mov esp, ebp
004915BE .5D pop ebp
004915BF .C3 retn
******************00491582处call004912A0 的核心算法CALL,我们F7后:
004912A0/$55 push ebp
004912A1|.8BEC mov ebp, esp
004912A3|.B9 08000000 mov ecx, 8
004912A8|>6A 00 /push 0
004912AA|.6A 00 |push 0
004912AC|.49 |dec ecx
004912AD|.^ 75 F9 \jnz short 004912A8
004912AF|.53 push ebx
004912B0|.56 push esi
004912B1|.57 push edi
004912B2|.8BF0 mov esi, eax
004912B4|.33C0 xor eax, eax
004912B6|.55 push ebp
004912B7|.68 5B144900 push 0049145B
004912BC|.64:FF30 push dword ptr fs:
004912BF|.64:8920 mov dword ptr fs:, esp
004912C2|.33DB xor ebx, ebx
004912C4|.8D45 FC lea eax, dword ptr
004912C7|.8A16 mov dl, byte ptr ;假码第一位ASC
004912C9|.E8 AE31F7FF call 0040447C
004912CE|.8B45 FC mov eax, dword ptr ;假码第一位的ASC
004912D1|.E8 4AFFFFFF call 00491220 ;假码第1位的数值 / 4,求商!
004912D6|.8BF8 mov edi, eax ;EDI(初始为0)+商 到EDI
004912D8|.8D45 F8 lea eax, dword ptr
004912DB|.8A56 01 mov dl, byte ptr ;假码第2位
004912DE|.E8 9931F7FF call 0040447C
004912E3|.8B45 F8 mov eax, dword ptr ;假码第2位的ASC
004912E6|.E8 35FFFFFF call 00491220 ;假码第2位的数值 / 4,求商!
004912EB|.03F8 add edi, eax ;前面相加后的EDI + 商
004912ED|.8D45 F4 lea eax, dword ptr
004912F0|.8A56 02 mov dl, byte ptr ;假码第3位
004912F3|.E8 8431F7FF call 0040447C
004912F8|.8B45 F4 mov eax, dword ptr ;假码第3位的ASC
004912FB|.E8 20FFFFFF call 00491220 ;假码第三位的数值 / 4,求商!
00491300|.03F8 add edi, eax ;再相加
00491302|.8D45 F0 lea eax, dword ptr
00491305|.8A56 03 mov dl, byte ptr ;假码第4位的数值
00491308|.E8 6F31F7FF call 0040447C
0049130D|.8B45 F0 mov eax, dword ptr
00491310|.E8 0BFFFFFF call 00491220 ;假码第4位的数值 / 4,求商
00491315|.03F8 add edi, eax ;继续相加
00491317|.A1 A4464A00 mov eax, dword ptr ;查表!=08
0049131C|.3B38 cmp edi, dword ptr ;累加过后的和与8比较
0049131E|.0F85 1C010000 jnz 00491440 ;貌似一跳就挂了!
00491324|.8D45 EC lea eax, dword ptr
00491327|.8A56 04 mov dl, byte ptr ;假码第5位的数值
0049132A|.E8 4D31F7FF call 0040447C
0049132F|.8B45 EC mov eax, dword ptr
00491332|.E8 E9FEFFFF call 00491220 ;同样求商!
00491337|.8BF8 mov edi, eax
00491339|.8D45 E8 lea eax, dword ptr
0049133C|.8A56 07 mov dl, byte ptr ;假码第8位的数值
0049133F|.E8 3831F7FF call 0040447C
00491344|.8B45 E8 mov eax, dword ptr
00491347|.E8 D4FEFFFF call 00491220 ;同样求商!
0049134C|.03F8 add edi, eax ;商继续累加
0049134E|.8D45 E4 lea eax, dword ptr
00491351|.8A56 0A mov dl, byte ptr ;假码第11位的数值
00491354|.E8 2331F7FF call 0040447C
00491359|.8B45 E4 mov eax, dword ptr
0049135C|.E8 BFFEFFFF call 00491220 ;同样求商!
00491361|.03F8 add edi, eax ;商继续累加
00491363|.8D45 E0 lea eax, dword ptr
00491366|.8A56 0D mov dl, byte ptr ;假码第14位的数值
00491369|.E8 0E31F7FF call 0040447C
0049136E|.8B45 E0 mov eax, dword ptr
00491371|.E8 AAFEFFFF call 00491220 ;同样求商!
00491376|.03F8 add edi, eax ;商继续累加
00491378|.A1 D8464A00 mov eax, dword ptr ;查表!=08
0049137D|.3B38 cmp edi, dword ptr ;累加的商相等吗
0049137F|.0F85 BB000000 jnz 00491440
00491385|.8D45 DC lea eax, dword ptr
00491388|.8A16 mov dl, byte ptr
0049138A|.E8 ED30F7FF call 0040447C
0049138F|.8B45 DC mov eax, dword ptr
00491392|.E8 89FEFFFF call 00491220 ;同样求商!
00491397|.8BF8 mov edi, eax ;商!
00491399|.8D45 D8 lea eax, dword ptr
0049139C|.8A56 01 mov dl, byte ptr ;假码第2位
0049139F|.E8 D830F7FF call 0040447C
004913A4|.8B45 D8 mov eax, dword ptr
004913A7|.E8 74FEFFFF call 00491220 ;同样求商!
004913AC|.03F8 add edi, eax ;商累加
004913AE|.8D45 D4 lea eax, dword ptr
004913B1|.8A56 02 mov dl, byte ptr ;假码第3位
004913B4|.E8 C330F7FF call 0040447C
004913B9|.8B45 D4 mov eax, dword ptr
004913BC|.E8 5FFEFFFF call 00491220 ;同样求商!
004913C1|.03F8 add edi, eax ;商累加
004913C3|.8D45 D0 lea eax, dword ptr
004913C6|.8A56 03 mov dl, byte ptr ;假码第4位
004913C9|.E8 AE30F7FF call 0040447C
004913CE|.8B45 D0 mov eax, dword ptr
004913D1|.E8 4AFEFFFF call 00491220 ;同样求商!
004913D6|.03F8 add edi, eax ;商累加
004913D8|.A1 A4464A00 mov eax, dword ptr ;继续查表 =08
004913DD|.3B38 cmp edi, dword ptr ;相等吗?
004913DF|.75 5F jnz short 00491440
004913E1|.8D45 CC lea eax, dword ptr
004913E4|.8A56 06 mov dl, byte ptr ;假码第7位
004913E7|.E8 9030F7FF call 0040447C
004913EC|.8B45 CC mov eax, dword ptr
004913EF|.E8 2CFEFFFF call 00491220 ;同样求商!
004913F4|.8BF8 mov edi, eax ;商
004913F6|.8D45 C8 lea eax, dword ptr
004913F9|.8A56 09 mov dl, byte ptr ;假码第10位
004913FC|.E8 7B30F7FF call 0040447C
00491401|.8B45 C8 mov eax, dword ptr
00491404|.E8 17FEFFFF call 00491220 ;同样求商!
00491409|.03F8 add edi, eax ;商累加
0049140B|.8D45 C4 lea eax, dword ptr
0049140E|.8A56 0C mov dl, byte ptr ;假码第13位
00491411|.E8 6630F7FF call 0040447C
00491416|.8B45 C4 mov eax, dword ptr
00491419|.E8 02FEFFFF call 00491220 ;同样求商!
0049141E|.03F8 add edi, eax ;商累加
00491420|.8D45 C0 lea eax, dword ptr
00491423|.8A56 0F mov dl, byte ptr ;假码第16位
00491426|.E8 5130F7FF call 0040447C
0049142B|.8B45 C0 mov eax, dword ptr
0049142E|.E8 EDFDFFFF call 00491220 ;同样求商!
00491433|.03F8 add edi, eax ;商累加
00491435|.A1 D0434A00 mov eax, dword ptr ;还是查表 = 08
0049143A|.3B38 cmp edi, dword ptr ;不等就挂了!
0049143C|.75 02 jnz short 00491440
0049143E|.B3 01 mov bl, 1 ;这应该实现才对
00491440|>33C0 xor eax, eax ;危险的家伙!
00491442|.5A pop edx
00491443|.59 pop ecx
00491444|.59 pop ecx
00491445|.64:8910 mov dword ptr fs:, edx
00491448|.68 62144900 push 00491462
0049144D|>8D45 C0 lea eax, dword ptr
00491450|.BA 10000000 mov edx, 10
00491455|.E8 5E2EF7FF call 004042B8
0049145A\.C3 retn
0049145B .^ E9 3828F7FF jmp 00403C98
00491460 .^ EB EB jmp short 0049144D
00491462 .8BC3 mov eax, ebx
00491464 .5F pop edi
00491465 .5E pop esi
00491466 .5B pop ebx
00491467 .8BE5 mov esp, ebp
00491469 .5D pop ebp
0049146A .C3 retn
另外我们看看:
这里来自
00491522|.8B45 F0 mov eax, dword ptr ;
00491525|.E8 B619F7FF call 00402EE0 ;检测
上面这个call 00402EE0的内容:
00402EE0/$53 push ebx
省略部分代码
00402F6B|> \BF FFFFFF0F mov edi, 0FFFFFFF ;Cases 24 ('$'),58 ('X'),78 ('x') of switch 00402F07
00402F70|.8A1E mov bl, byte ptr ;下一位ASC
00402F72|.46 inc esi
00402F73|.84DB test bl, bl
00402F75|.^ 74 DF je short 00402F56
00402F77|>80FB 61 /cmp bl, 61 ;依次假码前(后)8位的ASC
00402F7A|.72 03 |jb short 00402F7F
00402F7C|.80EB 20 |sub bl, 20
00402F7F|>80EB 30 |sub bl, 30 ;Switch (cases 30..46)
00402F82|.80FB 09 |cmp bl, 9
00402F85|.76 0B |jbe short 00402F92
00402F87|.80EB 11 |sub bl, 11
00402F8A|.80FB 05 |cmp bl, 5
00402F8D|.^ 77 D0 |ja short 00402F5F
00402F8F|.80C3 0A |add bl, 0A ;Cases 41 ('A'),42 ('B'),43 ('C'),44 ('D'),45 ('E'),46 ('F') of switch 00402F7F
00402F92|>39F8 |cmp eax, edi ;Cases 30 ('0'),31 ('1'),32 ('2'),33 ('3'),34 ('4'),35 ('5'),36 ('6'),37 ('7'),38 ('8'),39 ('9') of switch 00402F7F
00402F94|.^ 77 C9 |ja short 00402F5F
00402F96|.C1E0 04 |shl eax, 4
00402F99|.01D8 |add eax, ebx
00402F9B|.8A1E |mov bl, byte ptr
00402F9D|.46 |inc esi
00402F9E|.84DB |test bl, bl
00402FA0|.^ 75 D5 \jnz short 00402F77
00402FA2|.FECD dec ch
很明显的,注册码由0-9的数字和a-f的字母组成!!!!!!!!!
OK,现在清楚了!
----------------------------------------------------------------------------
算法总结:
1.注册码由0-9的数字和a-f的字母组成,长度16位,且相同的部分不能大于5个;
2.取每一位作为数值/4,取商且:
注册码的第1、2、3、4位的商之和=8
第5、8、11、14位商之和=8
第7、10、13、16位商之和=8
---------------------------------------------------------------------------
注册信息保存在:HKEY_LOCAL_MACHINE\SOFTWARE\Easy File & Folder Protector\Settings下
inf1=
inf2=
其中:inf1是未注册时对时间的运算结果,提示你是否过期的
inf2是注册码正确时加密后的结果!
根据上面的分析,我们完全可以自定出N组注册码来!
比如:
888890C90C90A900
999980D80D80A800
但是,还有4位注册码呢?难道不参与运算?还是埋伏起来,准备着暗桩呢?
俺随便试用了几个功能,关于、选择被添加的程序或文件夹时,都会调用在注册的同一个CALL里,貌似没有发现暗桩!如果哪位兄弟姐妹发现了千万请告诉我一声哦!
另外,对inf1的判断:
004A1458/$55 push ebp
004A1459|.8BEC mov ebp, esp
004A145B|.83C4 F4 add esp, -0C
004A145E|.53 push ebx
004A145F|.56 push esi
004A1460|.33C0 xor eax, eax
004A1462|.8945 FC mov dword ptr , eax
004A1465|.BE 68694A00 mov esi, 004A6968 ;x古
004A146A|.33C0 xor eax, eax
004A146C|.55 push ebp
004A146D|.68 C4154A00 push 004A15C4
004A1472|.64:FF30 push dword ptr fs:
004A1475|.64:8920 mov dword ptr fs:, esp
004A1478|.B3 01 mov bl, 1
004A147A|.8D45 FC lea eax, dword ptr
004A147D|.E8 F689FFFF call 00499E78
004A1482|.8B45 FC mov eax, dword ptr
004A1485|.E8 E2FFFEFF call 0049146C
004A148A|.84C0 test al, al
004A148C|.0F85 1C010000 jnz 004A15AE ;注册码验证错误则不跳
004A1492|.33DB xor ebx, ebx
004A1494|.8B0D 44464A00 mov ecx, dword ptr ;EFPP.004A5C14
004A149A|.8B09 mov ecx, dword ptr
004A149C|.B2 01 mov dl, 1
004A149E|.A1 FC104A00 mov eax, dword ptr
004A14A3|.E8 A8A8FDFF call 0047BD50
004A14A8|.8906 mov dword ptr , eax
004A14AA|.A1 30454A00 mov eax, dword ptr
004A14AF|.66:C700 3200mov word ptr , 32
004A14B4|.E8 9B90F6FF call 0040A554 ;取时间?
0040A554/$83C4 E8 add esp, -18
0040A557|.8D4424 08 lea eax, dword ptr
0040A55B|.50 push eax ; /pLocaltime
0040A55C|.E8 CFC1FFFF call <jmp.&kernel32.GetLocalTime> ; \GetLocalTime ///哈哈,猜对了!
0040A561|.66:8B4C24 0Emov cx, word ptr
0040A566|.66:8B5424 0Amov dx, word ptr
0040A56B|.66:8B4424 08mov ax, word ptr
0040A570|.E8 6BFDFFFF call 0040A2E0
0040A575|.DD1C24 fstp qword ptr
0040A578|.9B wait
0040A579|.DD0424 fld qword ptr
0040A57C|.83C4 18 add esp, 18
0040A57F\.C3 retn
004A14B9|.DD5D F4 fstp qword ptr
004A14BC|.9B wait
004A14BD|.E8 9687FFFF call 00499C58 ;这个CALL里有inf1的内容,俺就不再详写了,有兴趣自己进去看看
004A14C2|.DC6D F4 fsubr qword ptr
004A14C5|.A1 D8464A00 mov eax, dword ptr
004A14CA|.DB00 fild dword ptr
004A14CC|.DED9 fcompp
004A14CE|.DFE0 fstsw ax
004A14D0|.9E sahf
004A14D1|.73 78 jnb short 004A154B
004A14D3|.8B06 mov eax, dword ptr
004A14D5|.8B80 04030000 mov eax, dword ptr
004A14DB|.8B40 68 mov eax, dword ptr
004A14DE|.BA FF000000 mov edx, 0FF
004A14E3|.E8 7C38F8FF call 00424D64
004A14E8|.8B06 mov eax, dword ptr
004A14EA|.8B80 08030000 mov eax, dword ptr
004A14F0|.8B40 68 mov eax, dword ptr
004A14F3|.BA FF000000 mov edx, 0FF
004A14F8|.E8 6738F8FF call 00424D64
004A14FD|.8B06 mov eax, dword ptr
004A14FF|.8B80 04030000 mov eax, dword ptr
004A1505|.BA DC154A00 mov edx, 004A15DC ;sorry! this trial version of the program has been expired!
004A150A|.E8 291BFCFF call 00463038
004A150F|.8B06 mov eax, dword ptr
004A1511|.8B80 08030000 mov eax, dword ptr
004A1517|.BA 20164A00 mov edx, 004A1620 ;you should register the program now to keep it on your pc.
004A151C|.E8 171BFCFF call 00463038 向楼主学习,下一步自己要更加努力! 学习了啊 很详细 谢谢楼主! 最近比较高产哈,谢谢分享心得 谢谢分享!!!!! 太牛了,膜拜了! 都是好文章..学习
页:
[1]