软件名称:实用图书管理软件v1.1版
下栽地址:
http://count.skycn.com/softdown.php?id=13993&url=http://on165-http.skycn.net:8181/down/bokMger0828.rar
作者:谭志勇
破解工具:ollydbg,w32Dasm ver10;hiew;fi;
破解者: mejy
破解步骤:1、安装该软件!为什么要提这个呢?呵呵!!看看作者的理想:
为振兴中华软件业而奋斗!:)
2、我们的动作开始了!先运行一下该软件,试着注册一下,
试练码:123456;注册码:654321 看见“注册码不对,注册
不成功”,记下这句话。
(先来看看爆破)3、Fi出场,检测加壳否。结果:三无产品!!Delphi编写!!
4、快乐中。。。。。
5、用W32Dasm反之。用“字符串参考”----〉“注册不成功。”
双击,来到
:0051F271 803D048F520000 cmp byte ptr [00528F04], 00
:0051F278 0F84CE000000 je 0051F34C
:0051F27E 8D45F0 lea eax, dword ptr [ebp-10]
:0051F281 E87655EEFF call 004047FC
:0051F286 8D55F8 lea edx, dword ptr [ebp-08]
:0051F289 8B8600030000 mov eax, dword ptr [esi+00000300]
:0051F28F E83C99F2FF call 00448BD0
:0051F294 8D55F4 lea edx, dword ptr [ebp-0C]
:0051F297 8B8604030000 mov eax, dword ptr [esi+00000304]
:0051F29D E82E99F2FF call 00448BD0 //可在此附近设断
:0051F2A2 8D4DF0 lea ecx, dword ptr [ebp-10]
:0051F2A5 8B55F8 mov edx, dword ptr [ebp-08]
:0051F2A8 A1008F5200 mov eax, dword ptr [00528F00] //用户申请码
:0051F2AD E8FEFBFFFF call 0051EEB0 //此处为计算注
册码的算法,我们f8跟进很快找到!
:0051F2B2 8B55F0 mov edx, dword ptr [ebp-10]
:0051F2B5 8B45F4 mov eax, dword ptr [ebp-0C]
:0051F2B8 E82B9BEEFF call 00408DE8 //可见此处为
比较注册码的关键的call
:0051F2BD 85C0 test eax, eax
:0051F2BF 740C je 0051F2CD //跳则成功,不跳玩完。
爆破时必改!---〉jne
* Possible StringData Ref from Code Obj ->"注册码不对,注册不成功!"
|
:0051F2C1 B8B0F35100 mov eax, 0051F3B0
:0051F2C6 E8E12AF2FF call 00441DAC
:0051F2CB EB7F jmp 0051F34C
对如爆破软件每次启动都检测注册表,所以每次都得注册一下,很烦!不过还好未注册版没功能限制,只有次数限制。
改完后你就能成功注册!不过下次启动又变成了未注册版!别急!!!
再来看看解除它的次数限制。同样用串试参考---〉“软件使用次数已到!“双击之
来到这0051F10D B8E8F15100 mov eax, 0051F1E8
我们从这往上看,来到一下地点:
* Possible StringData Ref from Code Obj ->"软件没注册!还有"
|
:0051F0CA 68BCF15100 push 0051F1BC
:0051F0CF 8D55E8 lea edx, dword ptr [ebp-18]
:0051F0D2 A1088F5200 mov eax, dword ptr [00528F08]
:0051F0D7 E8D0A1EEFF call 004092AC
:0051F0DC FF75E8 push [ebp-18]
* Possible StringData Ref from Code Obj ->"次使用机会!" //显而易见此处是计算使用次数的,我改了几次都提示内存出错,没成功!不过没关系,往下看:(若谁知道怎么改这的次数请补充)
:0051F0DF 68D4F15100 push 0051F1D4
:0051F0E4 8D45EC lea eax, dword ptr [ebp-14]
:0051F0E7 BA03000000 mov edx, 00000003
:0051F0EC E8835AEEFF call 00404B74
:0051F0F1 8B55EC mov edx, dword ptr [ebp-14]
:0051F0F4 A1008F5200 mov eax, dword ptr [00528F00]
:0051F0F9 8B8008030000 mov eax, dword ptr [eax+00000308]
:0051F0FF E8FC9AF2FF call 00448C00
:0051F104 833D088F520000 cmp dword ptr [00528F08], 00000000
:0051F10B 7F16 jg 0051F123 //来到这,呵熟悉的面孔!如果超过试用次数往下执行,死悄悄,这儿很好改,jmp,管你超不超过我都跳走,不向下执行。呵呵!你执行10的n次方次都没问题!;〉
* Possible StringData Ref from Code Obj ->"软件使用次数已到!"
|
:0051F10D B8E8F15100 mov eax, 0051F1E8
:0051F112 E8952CF2FF call 00441DAC
:0051F117 A1B0755200 mov eax, dword ptr [005275B0]
:0051F11C 8B00 mov eax, dword ptr [eax]
:0051F11E E8F19FF4FF call 00469114
其注册信息保存在
* Possible StringData Ref from Code Obj ->"Software
egbook emark" //注册码的保存键,将此主键下的值全部删去,你的注册版又变成了未注册版!呵呵!可多次研究!
|
:0051F2EA BAD0F35100 mov edx, 0051F3D0
:0051F2EF E8A055EEFF call 00404894
:0051F2F4 B101 mov cl, 01
:0051F2F6 8B55FC mov edx, dword ptr [ebp-04]
:0051F330 C605048F520000 mov byte ptr [00528F04], 00
:0051F337 A1008F5200 mov eax, dword ptr [00528F00]
:0051F33C 8B8008030000 mov eax, dword ptr [eax+00000308]
* Possible StringData Ref from Code Obj ->"软件已注册"
以上就是爆破:总结一下 1、改0051F2BF 740C je为jne(可注册成功)
2、改0051F10B 7F16 jg 为jmp(可解除限制)
用什么工具就不用说啦!;)
下面看看注册码算法:
上面已标出关键位置,下面看看注册码的计算方法:
0051F2AD E8FEFBFFFF call 0051EEB0 //跟进f7键
来到
0051EEB0 /$ 55 PUSH EBP
0051EEB1 |. 8BEC MOV EBP,ESP
0051EEB3 |. 83C4 F0 ADD ESP,-10
0051EEB6 |. 53 PUSH EBX
0051EEB7 |. 56 PUSH ESI
0051EEB8 |. 57 PUSH EDI
0051EEB9 |. 33DB XOR EBX,EBX
0051EEBB |. 895D F0 MOV DWORD PTR SS:[EBP-10],EBX
0051EEBE |. 895D F4 MOV DWORD PTR SS:[EBP-C],EBX
0051EEC1 |. 894D F8 MOV DWORD PTR SS:[EBP-8],ECX
0051EEC4 |. 8955 FC MOV DWORD PTR SS:[EBP-4],EDX
0051EEC7 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0051EECA |. E8 CD5DEEFF CALL 实用图书.00404C9CSS:[
0051EECF |. 33C0 XOR EAX,EAX
0051EED1 |. 55 PUSH EBP
0051EED2 |. 68 6AEF5100 PUSH 实用图书.0051EF6A
0051EED7 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
0051EEDA |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
0051EEDD |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
0051EEE0 |. E8 1759EEFF CALL 实用图书.004047FCSS:[
0051EEE5 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0051EEE8 |. E8 C75BEEFF CALL 实用图书.00404AB4SS:[
0051EEED |. 8BF0 MOV ESI,EAX //esi为用户申请码长度
0051EEEF |. 85F6 TEST ESI,ESI
0051EEF1 |. 7E 49 JLE SHORT 实用图书.0051EF3C
0051EEF3 |. BB 01000000 MOV EBX,1 //ebx为计数器,即为申请码各个字符的位序,设为i;
0051EEF8 |> 8BCB /MOV ECX,EBX //ecx=ebx第一次是1,第二次是2……i=1,2,3…..
0051EEFA |. 0FAFCB |IMUL ECX,EBX //ecx=i*i, i的平方
0051EEFD |. 8BC1 |MOV EAX,ECX //将ecx赋给eax,下面的除法要用到作为分子。
0051EEFF |. F7EB |IMUL EBX //计算i的立方
0051EF01 |. F7EB |IMUL EBX //计算i的四次方
0051EF03 |. 8D53 1E |LEA EDX,DWORD PTR DS:[EBX+1E] //将i+1EH赋值给edx
0051EF06 |. 8BFA |MOV EDI,EDX //将edx赋给edi,作为除数即分母
0051EF08 |. 99 |CDQ
0051EF09 |. F7FF |IDIV EDI // 计算 eax/edi 商为eax,余数为edx
0051EF0B |. 8BFA |MOV EDI,EDX //将余数存到 edi中,下面要用到
0051EF0D |. 8BC1 |MOV EAX,ECX //将i*i,赋给eax作为被除数;
0051EF0F |. 8D53 14 |LEA EDX,DWORD PTR DS:[EBX+14] //将(i+14H)赋值给 edx
0051EF12 |. 8BCA |MOV ECX,EDX //ecx=edx;作为分母;即除数
0051EF14 |. 99 |CDQ
0051EF15 |. F7F9 |IDIV ECX //除法运算 eax为商;edx为余数
0051EF17 |. 03FA |ADD EDI,EDX //将edi=第一次的余数与第二次的余数相加
0051EF19 |. 03FB |ADD EDI,EBX //将edi=edi+i;
0051EF1B |. 8D45 F0 |LEA EAX,DWORD PTR SS:[EBP-10] //
0051EF1E |. 8B55 FC |MOV EDX,DWORD PTR SS:[EBP-4]
0051EF21 |. 0FB6541A FF |MOVZX EDX,BYTE PTR DS:[EDX+EBX-1] //得到申请码的第i为字符的ascii码
0051EF26 |. 03D7 |ADD EDX,EDI //将第i位的ascii码值+上面求得的edi ;即为改为对应的注册码
0051EF28 |. E8 AF5AEEFF |CALL 实用图书.004049DC
0051EF2D |. 8B55 F0 |MOV EDX,DWORD PTR SS:[EBP-10]
0051EF30 |. 8D45 F4 |LEA EAX,DWORD PTR SS:[EBP-C]
0051EF33 |. E8 845BEEFF |CALL 实用图书.00404ABCSS:[
0051EF38 |. 43 |INC EBX
0051EF39 |. 4E |DEC ESI //申请注册码的长度,没算完一次减1
0051EF3A |.^75 BC JNZ SHORT 实用图书.0051EEF8
算完了!简单吧!
我的123456-----〉4HNZXF
我的第一篇破文,写得不好,技术也有限,让大家见笑了!!
注册机vc编写
#include <iostream.h>
void main()
{
char a[10];int len=0;
int i,j,k,x,y,m;
cin>>a;
for(i=0;a[i]!=' ';i++)
len++;
for(i=0;i<len;i++)
{ k=(i+1)*(i+1);
j=k*k;
m=i+1+30;
x=j%m;
y=k%(i+1+20);
x=x+y+1+i;
a[i]+=x;
}
for(i=0;i<len;i++)
cout<<a[i];
cout<<endl;
}