文件加锁王 8.1算法分析
文件加锁王 8.1算法分析
作者:onlyu[FCG][DFCG]
【软件名称】文件加锁王 8.1
【下载地址】http://hnpy.onlinedown.net/down/lockFile.rar
【应用平台】Win9x/NT/2000/XP
【软件大小】297k
【软件限制】20次限次版
【破解声明】破解只是感兴趣,无其它目的。失误之处敬请诸位大侠赐教!
【破解工具】regshot v1.10,trw2000 v1.22
【软件简介】文件保护工具
【分析过程】运行软件,发现是20次限次版本,先看一下它把使用次数记录在哪里,运行regshot ,先进行一次扫描,运行软件,再关闭,用regshot 进行第二次扫描,比较,得到如下结果:
**Original contents Maybe deleted or modified**H.L.KSoftwareMicrosoftWindowsRuntimes:
"2"H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerNoLogoff:
0x00000000H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciessystemDisableTaskMgr:
0x00000000H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciessystemDisableLockWorkstation:
0x00000000H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciessystemDisableChangePassword:
0x00000000**Keys&values Modified | Added in the
2ndShot**H.L.KSoftwareMicrosoftWindowsRuntimes: "3"H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorerNoLogoff:
0x00000001H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciessystemDisableTaskMgr:
0x00000001H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciessystemDisableLockWorkstation:
0x00000001H.U.DEFAULTSoftwareMicrosoftWindowsCurrentVersionPoliciessystemDisableChangePassword: 0x00000001
真是一目了然啊!它把使用次数信息记录在H.L.KSoftwareMicrosoftWindowsRuntimes键值中,怎么去除使用次数限制不用我说了吧。下面分析一下它的注册算法。来到注册窗口,它会告诉我的电脑ID号码:659428341。好,输入我的试练码:78787878,下万能断点:bpx hmemcpy,结果不停地黑频,**!,没办法,只能用其他方法了,按cntl+m,进入TRW,下s 0 l -1 '78787878',找到了,为30:805c7f32(注:每次都不一样),下bpm 805c7f32。f5来到程序,点确定输入,终于截下了,下pmodule,来到:
0167:0044A7EA CMP EAX,EBX
0167:0044A7EC FNCLEX
0167:0044A7EE JNL 0044A808
0167:0044A7F0 MOV ECX,[EBP+FFFFFF10]
0167:0044A7F6 PUSH DWORD A0
0167:0044A7FB PUSH DWORD 00422F9C
0167:0044A800 PUSH ECX
0167:0044A801 PUSH EAX
0167:0044A802 CALL `MSVBVM60!__vbaHresultCheckObj`
0167:0044A808 MOV EAX,[EBP-28]
0167:0044A80B LEA EDX,[EBP-44]
0167:0044A80E MOV [EBP-3C],EAX
0167:0044A811 LEA EAX,[EBP-54]
0167:0044A814 PUSH EDX
0167:0044A815 PUSH EAX
0167:0044A816 MOV [EBP-28],EBX
0167:0044A819 MOV DWORD [EBP-44],08
0167:0044A820 CALL `MSVBVM60!rtcTrimVar`
0167:0044A826 MOV EAX,00422260
0167:0044A82B LEA ECX,[EBP-54]
0167:0044A82E MOV [EBP+FFFFFF54],EAX
0167:0044A834 MOV [EBP+FFFFFF44],EAX
0167:0044A83A LEA EDX,[EBP+FFFFFF4C]
0167:0044A840 PUSH ECX
0167:0044A841 LEA EAX,[EBP-64]
0167:0044A844 PUSH EDX
0167:0044A845 PUSH EAX
呵呵,是VB程序,还好不是Pcode的,按F10继续往下走,来到:
0167:0044A979 FF1564104000 CALL `MSVBVM60!__vbaHresultCheckObj`
0167:0044A97F 8B8D18FFFFFF MOV ECX,[EBP+FFFFFF18]<------[EBP+FFFFFF18]存储我的ID号码
0167:0044A985 FF1580104000 CALL `MSVBVM60!__vbaI4Abs`<--------求ecx的绝对值
0167:0044A98B 8BC8 MOV ECX,EAX<-------------EAX=0
0167:0044A98D 81E969FE0B00 SUB ECX,000BFE69<--------ECX=ECX-BFE69
0167:0044A993 0F80E0050000 JO NEAR 0044AF79
0167:0044A999 FF1580104000 CALL `MSVBVM60!__vbaI4Abs`<--------求ecx的绝对值EAX=|ECX|
0167:0044A99F 8BC8 MOV ECX,EAX<----------------------ECX=EAX
0167:0044A9A1 B8D3200DD2 MOV EAX,D20D20D3<-----------------EAX=D20D20D3
0167:0044A9A6 F7E9 IMUL ECX<--------------------------EAX*ECX
0167:0044A9A8 03D1 ADD EDX,ECX<----------------------EDX=EDX+ECX
0167:0044A9AA C1FA06 SAR EDX,06<-----------------------EDX=EDX sar 6
0167:0044A9AD 8BCA MOV ECX,EDX<----------------------EDX里存储的就是注册码了
0167:0044A9AF C1E91F SHR ECX,1F
0167:0044A9B2 03D1 ADD EDX,ECX
0167:0044A9B4 52 PUSH EDX
0167:0044A9B5 FF1514104000 CALL `MSVBVM60!__vbaStrI4`
0167:0044A9BB 894594 MOV [EBP-6C],EAX<-----------------[EAX]->"8444132"我的注册码
0167:0044A9BE 8D558C LEA EDX,[EBP-74]
0167:0044A9C1 8D857CFFFFFF LEA EAX,[EBP+FFFFFF7C]
0167:0044A9C7 52 PUSH EDX
0167:0044A9C8 50 PUSH EAX
0167:0044A9C9 C7458C08000000 MOV DWORD [EBP-74],08
0167:0044A9D0 FF15A8104000 CALL `MSVBVM60!rtcTrimVar`
0167:0044A9D6 8D4DAC LEA ECX,[EBP-54]
0167:0044A9D9 8D954CFFFFFF LEA EDX,[EBP+FFFFFF4C]
0167:0044A9DF 51 PUSH ECX
0167:0044A9E0 8D459C LEA EAX,[EBP-64]
0167:0044A9E3 52 PUSH EDX
0167:0044A9E4 50 PUSH EAX
0167:0044A9E5 C78544FFFFFF6022+MOV DWORD [EBP+FFFFFF44],00422260
0167:0044A9EF C7853CFFFFFF0800+MOV DWORD [EBP+FFFFFF3C],08
0167:0044A9F9 FF1540114000 CALL `MSVBVM60!__vbaVarCat`
可以看出这个软件的注册算法极其简单,内存注册机如下:
1、程序名称:LockFile.exe
2、添加数据:
中断地址:44A9BB
中断次数:1
第一字节:89
指令长度:3
3、选择内存方式寄存器EAX,宽字符,生成。
下面引用BKSY[DFCG]用VC编写的注册机源代码:
#include <stdio.h>
int abs(int n)
{
if(n<0) n*=(-1);
return n;
}
void main()
{
int id;
printf("input your id:");
scanf("%d",&id);
id=abs(id);
id-=0xBFE69;
id=abs(id);
__asm
{
mov ecx,id
mov eax,0xD20D20D3
imul ecx
add edx,ecx
sar edx,6
mov id,edx
}
printf("
Your code is %d
",id);
}
最后感谢BKSY[DFCG]和laoxuetong[DFCG]的帮助。