【破解作者】 kerfier
【使用工具】 OD,W32DASM,PEID
【破解平台】 Win9x/NT/2000/XP
【软件名称】 屏幕录像专家V5.0
【下载地址】 http://www.softreg.com.cn/shareware_view.aspx?id=/2E3EB050-8E09-47EE-8F86-FC184429AB38/
【软件简介】 Bland C++
【加壳方式】 无
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】
1、安装,用PEID查,无壳
2、假注册
弹出:注册失败,请检查你的输入是否有误
3、用W32DASM载入,查找该语句,发现上面还有“注册成功,谢谢您的支持”,大喜,跳转,经过仔细观察,确定在
004392F4 /. 55 push ebp
处设断点
4、用OD载入,设断点,F9运行,输入注册名:kerfier;注册码:987654321,断下,单步执行下来,中间只有
00439339 |. E8 CE880500 call 屏录专家.00491C0C ; 读取注册码
0043935F |. E8 A8880500 call 屏录专家.00491C0C ; 读取注册名
继续执行,会出现异常,SHIFT+F9跳过,执行到
004393A9 |. /74 48 je short 屏录专家.004393F3
跳转至
004393F3 |> \6A 14 push 14 ; /Arg3 = 00000014
继续单步执行,直到以下循环,该循环将注册名跟机器码对应位相与,乘以系数后再相加,在此循环中将以浮点数方式相乘、相加
004394E6 |> /8B85 30FFFFFF /mov eax,dword ptr ss:[ebp-D0]
004394EC |. |8A9405 D4FEFFFF |mov dl,byte ptr ss:[ebp+eax-12C]
004394F3 |. |8B8D 30FFFFFF |mov ecx,dword ptr ss:[ebp-D0]
004394F9 |. |32940D ECFEFFFF |xor dl,byte ptr ss:[ebp+ecx-114]
00439500 |. |8B85 30FFFFFF |mov eax,dword ptr ss:[ebp-D0]
00439506 |. |889405 04FFFFFF |mov byte ptr ss:[ebp+eax-FC],dl
0043950D |. |8B95 30FFFFFF |mov edx,dword ptr ss:[ebp-D0]
00439513 |. |0FBE8C15 04FFFFFF |movsx ecx,byte ptr ss:[ebp+edx-FC]
0043951B |. |898D B8FEFFFF |mov dword ptr ss:[ebp-148],ecx
00439521 |. |DB85 B8FEFFFF |fild dword ptr ss:[ebp-148]
00439527 |. |83C4 F8 |add esp,-8 ; /
0043952A |. |DD1C24 |fstp qword ptr ss:[esp] ; |Arg1 (8-byte)
0043952D |. |E8 22870A00 |call 屏录专家.004E1C54 ; \屏录专家.004E1C54
00439532 |. |83C4 08 |add esp,8
00439535 |. |DB85 30FFFFFF |fild dword ptr ss:[ebp-D0]
0043953B |. |DEC9 |fmulp st(1),st
0043953D |. |DB85 34FFFFFF |fild dword ptr ss:[ebp-CC]
00439543 |. |DEC1 |faddp st(1),st
00439545 |. |E8 32870A00 |call 屏录专家.004E1C7C
0043954A |. |8985 34FFFFFF |mov dword ptr ss:[ebp-CC],eax
00439550 |. |FF85 30FFFFFF |inc dword ptr ss:[ebp-D0]
00439556 |. |83BD 30FFFFFF 14 |cmp dword ptr ss:[ebp-D0],14
0043955D |.^\7C 87 \jl short 屏录专家.004394E6
0043955F |. 8185 34FFFFFF 39300>add dword ptr ss:[ebp-CC],3039 ; 将结果和 +0x3039
00439569 |. FFB5 34FFFFFF push dword ptr ss:[ebp-CC] ; /Arg3
0043956F |. 68 A3DD5000 push 屏录专家.0050DDA3 ; |Arg2 = 0050DDA3 ASCII "%d"
00439574 |. 8D95 04FFFFFF lea edx,dword ptr ss:[ebp-FC] ; |
0043957A |. 52 push edx ; |Arg1
0043957B |. E8 EC6C0A00 call 屏录专家.004E026C ; \屏录专家.004E026C
00439580 |. 83C4 0C add esp,0C ; 将上面的结果转化成十进制22372
00439583 |. 66:C785 50FFFFFF 38>mov word ptr ss:[ebp-B0],38
0043958C |. 8D45 E8 lea eax,dword ptr ss:[ebp-18]
继续单步到这,进行注册码的处理
004395E0 |> /8B85 30FFFFFF /mov eax,dword ptr ss:[ebp-D0]
004395E6 |. |0FBE9405 04FFFFFF |movsx edx,byte ptr ss:[ebp+eax-FC]
004395EE |. |8B8D 30FFFFFF |mov ecx,dword ptr ss:[ebp-D0]
004395F4 |. |0FBE840D BCFEFFFF |movsx eax,byte ptr ss:[ebp+ecx-144]
004395FC |. |83C0 EC |add eax,-14 ; 判断注册码前5位是否为以上结果各位加上0x14
004395FF |. |3BD0 |cmp edx,eax
00439601 |. |0F85 AF000000 |jnz 屏录专家.004396B6
00439607 |. |83BD 30FFFFFF 03 |cmp dword ptr ss:[ebp-D0],3
0043960E |. |0F85 8F000000 |jnz 屏录专家.004396A3
00439614 |. |8B95 34FFFFFF |mov edx,dword ptr ss:[ebp-CC]
0043961A |. |81C2 444D0000 |add edx,4D44
00439620 |. |8995 B8FEFFFF |mov dword ptr ss:[ebp-148],edx
00439626 |. |DB85 B8FEFFFF |fild dword ptr ss:[ebp-148] ; 将注册码和展开成十进制
0043962C |. |DC0D 24A14300 |fmul qword ptr ds:[43A124] ; *3.14
00439632 |. |DB2D 2CA14300 |fld tbyte ptr ds:[43A12C] ; *0.1594896331738
00439638 |. |DEC9 |fmulp st(1),st
0043963A |. |E8 3D860A00 |call 屏录专家.004E1C7C ; 将浮点结果转化成整数
0043963F |. |8985 34FFFFFF |mov dword ptr ss:[ebp-CC],eax
00439645 |. |8B85 34FFFFFF |mov eax,dword ptr ss:[ebp-CC]
0043964B |. |B9 A0860100 |mov ecx,186A0
00439650 |. |99 |cdq
00439651 |. |F7F9 |idiv ecx
00439653 |. |8995 34FFFFFF |mov dword ptr ss:[ebp-CC],edx
00439659 |. |33C0 |xor eax,eax
0043965B |. |8985 28FFFFFF |mov dword ptr ss:[ebp-D8],eax
00439661 |. |33D2 |xor edx,edx
00439663 |. |8995 24FFFFFF |mov dword ptr ss:[ebp-DC],edx ; 注册码前5位满足要求,则求注册码前19位和
00439669 |> |8B8D 24FFFFFF |/mov ecx,dword ptr ss:[ebp-DC] ; 注册码求和
0043966F |. |0FBE840D BCFEFFFF ||movsx eax,byte ptr ss:[ebp+ecx-144]
00439677 |. |0185 28FFFFFF ||add dword ptr ss:[ebp-D8],eax
0043967D |. |FF85 24FFFFFF ||inc dword ptr ss:[ebp-DC]
00439683 |. |83BD 24FFFFFF 13 ||cmp dword ptr ss:[ebp-DC],13
0043968A |.^|7C DD |\jl short 屏录专家.00439669
0043968C |. |8B85 28FFFFFF |mov eax,dword ptr ss:[ebp-D8] ; 和放入eax
00439692 |. |B9 0A000000 |mov ecx,0A
00439697 |. |99 |cdq
00439698 |. |F7F9 |idiv ecx
0043969A |. |83C2 30 |add edx,30
0043969D |. |8995 28FFFFFF |mov dword ptr ss:[ebp-D8],edx
004396A3 |> |FF85 30FFFFFF |inc dword ptr ss:[ebp-D0]
004396A9 |. |83BD 30FFFFFF 05 |cmp dword ptr ss:[ebp-D0],5
004396B0 |.^\0F8C 2AFFFFFF \jl 屏录专家.004395E0
继续下面的执行
004396B6 |> \83BD 30FFFFFF 05 cmp dword ptr ss:[ebp-D0],5
004396BD 0F8C 030A0000 jl 屏录专家.0043A0C6
004396C3 |. 0FBE85 CFFEFFFF movsx eax,byte ptr ss:[ebp-131] ; 注册码最后一位
004396CA |. 3B85 28FFFFFF cmp eax,dword ptr ss:[ebp-D8] ; 注册码和的个位
004396D0 74 10 je short 屏录专家.004396E2 ; 该跳
004396D2 0FBE95 CFFEFFFF movsx edx,byte ptr ss:[ebp-131]
004396D9 |. 83FA 41 cmp edx,41
004396DC |. 0F8C E4090000 jl 屏录专家.0043A0C6 ; 出错
004396E2 |> 8B85 34FFFFFF mov eax,dword ptr ss:[ebp-CC]
004396E8 |. B9 0A000000 mov ecx,0A ; 5275
004396ED |. 99 cdq
004396EE |. F7F9 idiv ecx
004396F0 |. 8B85 30FFFFFF mov eax,dword ptr ss:[ebp-D0]
004396F6 |. 0FBE8C05 BCFEFFFF movsx ecx,byte ptr ss:[ebp+eax-144] ; 注册码第6位
004396FE |. 83C1 BF add ecx,-41
00439701 |. 2BCA sub ecx,edx ; 5275除以A取余
00439703 |. 898D 2CFFFFFF mov dword ptr ss:[ebp-D4],ecx
00439709 |. 83BD 2CFFFFFF 00 cmp dword ptr ss:[ebp-D4],0
00439710 74 0D je short 屏录专家.0043971F ; 该跳
00439712 |. 83BD 2CFFFFFF 05 cmp dword ptr ss:[ebp-D4],5
00439719 |. 0F85 5C090000 jnz 屏录专家.0043A07B
0043971F |> 66:C785 50FFFFFF 44>mov word ptr ss:[ebp-B0],44
00439728 |. BA A6DD5000 mov edx,屏录专家.0050DDA6
0043972D |. 8D45 E4 lea eax,dword ptr ss:[ebp-1C]
--------------------------------------------------------------------------------
【破解总结】
我的机器码为:78577554305104500000
注册名为:kerfier
设机器码为:Comp[20];
注册名为: Name[20];
1、 temp += (Comp[i] xor Name[20]) * i;
2、 得到结果 S = 22732
3、 取22732拆成ASCII对应的字符,再分别加上0x14,比如 (2)对应 0x32,再加上 0x14,即为 F,经过处理得到注册码的前5位为:FFGKF
4、 将 S = S + 0x3039 + 0x4d44,再 S = S* 3.14 * 0.1594896331738437120,然后取整,取结果的个位M
5、 M = M + 0x41; 得到注册码的第6位
7、 对注册码的前19位求和(我在其中置7~19位为0),将得到的结果的个位作为注册码的第20位
我的机器码为:78577554305104500000
注册名为:kerfier
注册码为:FFGKFJ00000000000004
附C程序:
int i, tmp, account, bccount;
char cCode[20];
UpdateData(TRUE);
for ( i=0; i<20; i++)
cCode[i] = 0x30;
account = 0;
for (i=0; i<m_strName.GetLength(); i++)
{
tmp = m_strName[i] ^ m_strComp[i];
account = account + tmp * i;
}
for ( i= m_strName.GetLength(); i<20; i++)
{
tmp = m_strComp[i] ^ 0;
account = account + tmp * i;
}
account = account + 0x3039;
bccount = account + 0x4d44;
bccount = bccount * 3.14 * 0.1594896331738437120;
bccount = bccount % 10;
cCode[5] = bccount + 0x41;
for (i=4; i>=0; i--)
{
cCode[i] = account % 10 + 0x14 + 0x30;
account = account / 10;
}
account = 0;
for ( i=0; i<6; i++)
account += cCode[i];
for ( i=6; i<19; i++)
account += 0x30;
cCode[19] = account % 10 + 0x30;
m_strCode = cCode;
m_strCode.Delete(20,7);
UpdateData(FALSE);
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
附件:key.rar
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课