HiHand结构设计工具箱 2005 Build 0430 破解教程
软件大小: 1134 KB
软件下载地址:http://www.skycn.com/soft/16018.html
简介:『HiHand结构设计工具箱』是依照现行建筑结构设计规范编制的一款结构设计软件。软件主要面向结构工程师,
旨在解决建筑结构设计中的一些手算问题。
ASP2.12壳用AspackDie141脱掉。
破解目的:为了学习解密编程。
破解过程:学习了头疼的浮点算法.
注册加密在UIClass.dll中用了ASP2.12壳用AspackDie141脱掉。VCMFC编写。
BP RegQueryValueExA下断
====================================================================================================
1000AB8E |. 50 push eax
1000AB8F |. 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
1000AB93 |. C68424 5C040000 0>mov byte ptr ss:[esp+45C],6
1000AB9B |. E8 38CB0000 call <jmp.&MFC42.#858_CString::operator=>
1000ABA0 |. 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
1000ABA4 |. 889C24 58040000 mov byte ptr ss:[esp+458],bl
1000ABAB |. E8 62CA0000 call <jmp.&MFC42.#800_CString::~CString>
1000ABB0 |. 68 02000080 push 80000002
1000ABB5 |. 8D4C24 28 lea ecx,dword ptr ss:[esp+28]
1000ABB9 |. E8 221C0000 call UIClass.CRegistry::CRegistry
1000ABBE |. 68 E0300210 push UIClass.100230E0 ; ASCII "Software\HiHand"
1000ABC3 |. 8D4C24 28 lea ecx,dword ptr ss:[esp+28]
1000ABC7 |. C68424 5C040000 0>mov byte ptr ss:[esp+45C],7
1000ABCF |. E8 2C1D0000 call UIClass.CRegistry::Open
1000ABD4 |. 8D5424 0C lea edx,dword ptr ss:[esp+C]
1000ABD8 |. 8D4C24 24 lea ecx,dword ptr ss:[esp+24]
1000ABDC |. 52 push edx ; /Arg2
1000ABDD |. 68 D8300210 push UIClass.100230D8 ; |Arg1 = 100230D8 ASCII "UName"
1000ABE2 |. E8 B91E0000 call UIClass.CRegistry::Read ; \CRegistry::Read
1000ABE7 |. 8D4424 10 lea eax,dword ptr ss:[esp+10]
1000ABEB |. 8D4C24 24 lea ecx,dword ptr ss:[esp+24]
1000ABEF |. 50 push eax ; /Arg2
1000ABF0 |. 68 D0300210 push UIClass.100230D0 ; |Arg1 = 100230D0 ASCII "RegNo"
1000ABF5 |. E8 A61E0000 call UIClass.CRegistry::Read ; \CRegistry::Read
1000ABFA |. 8D4C24 24 lea ecx,dword ptr ss:[esp+24]
1000ABFE |. 8BF8 mov edi,eax
1000AC00 |. E8 3B1D0000 call UIClass.CRegistry::Close
1000AC05 |. 85FF test edi,edi
1000AC07 |. 0F84 13010000 je UIClass.1000AD20
1000AC0D |. 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
1000AC11 |. 8D5424 0C lea edx,dword ptr ss:[esp+C]
1000AC15 |. 51 push ecx
1000AC16 |. 8D4424 1C lea eax,dword ptr ss:[esp+1C]
1000AC1A |. 52 push edx
1000AC1B |. 50 push eax
1000AC1C |. E8 A5CD0000 call <jmp.&MFC42.#922_operator+>
1000AC21 |. 50 push eax
1000AC22 |. 8D4C24 24 lea ecx,dword ptr ss:[esp+24]
1000AC26 |. C68424 5C040000 0>mov byte ptr ss:[esp+45C],8
1000AC2E |. E8 A5CA0000 call <jmp.&MFC42.#858_CString::operator=>
1000AC33 |. 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
1000AC37 |. C68424 58040000 0>mov byte ptr ss:[esp+458],7
1000AC3F |. E8 CEC90000 call <jmp.&MFC42.#800_CString::~CString>
1000AC44 |. 8D4C24 20 lea ecx,dword ptr ss:[esp+20]
1000AC48 |. 8D5424 18 lea edx,dword ptr ss:[esp+18]
1000AC4C |. 51 push ecx ; /Arg2
1000AC4D |. 52 push edx ; |Arg1
1000AC4E |. 8BCE mov ecx,esi ; |
1000AC50 |. E8 6B010000 call UIClass.CCheckReg::HowAreYou ; \CCheckReg::HowAreYou 这个函数名有意思吧 f7
===================================================================================================================
1000ADC0 U>/$ 6A FF push -1
1000ADC2 |. 68 0F8A0110 push UIClass.10018A0F ; SE handler installation
1000ADC7 |. 64:A1 00000000 mov eax,dword ptr fs:[0]
1000ADCD |. 50 push eax
1000ADCE |. 64:8925 00000000 mov dword ptr fs:[0],esp
1000ADD5 |. 83EC 24 sub esp,24
1000ADD8 |. 53 push ebx
1000ADD9 |. 33C0 xor eax,eax
1000ADDB |. 55 push ebp
1000ADDC |. 56 push esi
1000ADDD |. 33ED xor ebp,ebp
1000ADDF |. 894424 25 mov dword ptr ss:[esp+25],eax
1000ADE3 |. 57 push edi
1000ADE4 |. 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
1000ADE8 |. 896C24 1C mov dword ptr ss:[esp+1C],ebp
1000ADEC |. C64424 28 00 mov byte ptr ss:[esp+28],0
1000ADF1 |. 894424 2D mov dword ptr ss:[esp+2D],eax
1000ADF5 |. E8 30C80000 call <jmp.&MFC42.#540_CString::CString>
1000ADFA |. 8B4C24 48 mov ecx,dword ptr ss:[esp+48]
1000ADFE |. 33C0 xor eax,eax
1000AE00 |. 33D2 xor edx,edx
1000AE02 |. BE 01000000 mov esi,1
1000AE07 |. 8B19 mov ebx,dword ptr ds:[ecx]
1000AE09 |. 83C9 FF or ecx,FFFFFFFF
1000AE0C |. 8BFB mov edi,ebx
1000AE0E |. 897424 3C mov dword ptr ss:[esp+3C],esi
1000AE12 |. F2:AE repne scas byte ptr es:[edi]
1000AE14 |. F7D1 not ecx
1000AE16 |. 49 dec ecx ; ecx=len
1000AE17 |. 896C24 14 mov dword ptr ss:[esp+14],ebp
1000AE1B |. 895C24 18 mov dword ptr ss:[esp+18],ebx
1000AE1F |. 8BF9 mov edi,ecx
1000AE21 |. 0F84 A5010000 je UIClass.1000AFCC
1000AE27 |. 3BFE cmp edi,esi
1000AE29 |. 897424 48 mov dword ptr ss:[esp+48],esi
1000AE2D |. 0F8C AD000000 jl UIClass.1000AEE0
1000AE33 |. DD05 00A80110 fld qword ptr ds:[1001A800]
1000AE39 |. EB 04 jmp short UIClass.1000AE3F
1000AE3B |> 8B5C24 18 /mov ebx,dword ptr ss:[esp+18] ; ebx=name
1000AE3F |> 8A5C33 FF mov bl,byte ptr ds:[ebx+esi-1] ; bl=name[i]
1000AE43 |. DB4424 48 |fild dword ptr ss:[esp+48]
1000AE47 |. 0FBED3 |movsx edx,bl ; edx=bl
1000AE4A |. DD5C24 20 |fstp qword ptr ss:[esp+20]
1000AE4E |. 895424 48 |mov dword ptr ss:[esp+48],edx
1000AE52 |. DB4424 48 |fild dword ptr ss:[esp+48] ; st0=name[i]
1000AE56 |. 0FBEC3 |movsx eax,bl ; eax=bl
1000AE59 |. D9FA |fsqrt ; st0=sqrt(bl) 用户名求平方根
1000AE5B |. 0FAFC6 |imul eax,esi ; eax*=esi
1000AE5E |. DC4C24 20 |fmul qword ptr ss:[esp+20] ; st0*(i+1)
1000AE62 |. DC05 F8A70110 |fadd qword ptr ds:[1001A7F8] ; st0++
1000AE68 |. 0FAFC6 |imul eax,esi ; eax*=esi
1000AE6B |. 894424 48 |mov dword ptr ss:[esp+48],eax ; [esp+48]=eax
1000AE6F |. DB4424 48 |fild dword ptr ss:[esp+48] ; st1=[esp+48]
1000AE73 |. DEC9 |fmulp st(1),st ; sum=st0*=st1
1000AE75 |. D8C1 |fadd st,st(1)
1000AE77 |. E8 94CD0000 |call <jmp.&MSVCRT._ftol> ; 结果取整后保存到EAX
1000AE7C |. 99 |cdq
1000AE7D |. DDD8 |fstp st
1000AE7F |. B9 A0860100 |mov ecx,186A0 ; ecx=186A0
1000AE84 |. F7F9 |idiv ecx ; eax/ecx
1000AE86 |. 895424 14 |mov dword ptr ss:[esp+14],edx ; [esp+14]=eax%ecx 这里保存累计计算重要数
1000AE8A |. 0FBED3 |movsx edx,bl ; edx=bl (name[i])
1000AE8D |. 895424 48 |mov dword ptr ss:[esp+48],edx
1000AE91 |. DB4424 48 |fild dword ptr ss:[esp+48] ; st0=edx
1000AE95 |. DD05 10AE0110 |fld qword ptr ds:[1001AE10]
1000AE9B |. E8 6ACE0000 |call <jmp.&MSVCRT._CIpow> ; st0*st0
1000AEA0 |. DC4C24 20 |fmul qword ptr ss:[esp+20]
1000AEA4 |. E8 67CD0000 |call <jmp.&MSVCRT._ftol> ; 结果取整后保存到EAX
1000AEA9 |. DB4424 14 |fild dword ptr ss:[esp+14]
1000AEAD |. 8BCE |mov ecx,esi ; ecx=i+1
1000AEAF |. 0FAFCD |imul ecx,ebp ; ecx*ebp
1000AEB2 |. D9C0 |fld st
1000AEB4 |. D9FA |fsqrt ; sqrt(sum)
1000AEB6 |. 03C1 |add eax,ecx ; eax+ecx
1000AEB8 |. B9 A0860100 |mov ecx,186A0
1000AEBD |. 99 |cdq
1000AEBE |. F7F9 |idiv ecx ; eax/ecx
1000AEC0 |. 8BEA |mov ebp,edx ; ebp=eax%ecx
1000AEC2 |. E8 49CD0000 |call <jmp.&MSVCRT._ftol> ; eax=sqrt(sum)
1000AEC7 |. 03C5 |add eax,ebp ; eax+=ebp
1000AEC9 |. B9 A0860100 |mov ecx,186A0
1000AECE |. 99 |cdq
1000AECF |. F7F9 |idiv ecx ; eax/186a0
1000AED1 |. 46 |inc esi
1000AED2 |. 3BF7 |cmp esi,edi
1000AED4 |. 897424 48 |mov dword ptr ss:[esp+48],esi
1000AED8 |.^ 0F8E 5DFFFFFF \jle UIClass.1000AE3B
1000AEDE |. DDD8 fstp st
1000AEE0 |> 33C0 xor eax,eax ; eax=0
1000AEE2 |> 8BC8 /mov ecx,eax ; ecx=eax
1000AEE4 |. 8B7424 14 |mov esi,dword ptr ss:[esp+14] ; esi=[esp+14]=sum
1000AEE8 |. 0FAFC8 |imul ecx,eax ; ecx=eax
1000AEEB |. 0FAFC8 |imul ecx,eax ; ecx=eax
1000AEEE |. 8D4C31 1F |lea ecx,dword ptr ds:[ecx+esi+1F] ; ecx=ecx+esi+if
1000AEF2 |. 81E1 7F000080 |and ecx,8000007F ; ecx&8000007f
1000AEF8 |. 79 05 |jns short UIClass.1000AEFF
1000AEFA |. 49 |dec ecx
1000AEFB |. 83C9 80 |or ecx,FFFFFF80
1000AEFE |. 41 |inc ecx ; ecx++
1000AEFF |> 884C04 28 |mov byte ptr ss:[esp+eax+28],cl ; zhucema[i]=cl
1000AF03 |. 40 |inc eax ; eax++
1000AF04 |. 83F8 03 |cmp eax,3
1000AF07 |.^ 7C D9 \jl short UIClass.1000AEE2
1000AF09 |. B8 03000000 mov eax,3 ; eax=3
1000AF0E |> 8BC8 /mov ecx,eax ; ecx=eax
1000AF10 |. 0FAFC8 |imul ecx,eax ; ecx*=eax
1000AF13 |. 0FAFC8 |imul ecx,eax ; ecx*=eax
1000AF16 |. 8D4C29 1F |lea ecx,dword ptr ds:[ecx+ebp+1F]
1000AF1A |. 81E1 7F000080 |and ecx,8000007F
1000AF20 |. 79 05 |jns short UIClass.1000AF27
1000AF22 |. 49 |dec ecx
1000AF23 |. 83C9 80 |or ecx,FFFFFF80
1000AF26 |. 41 |inc ecx
1000AF27 |> 884C04 28 |mov byte ptr ss:[esp+eax+28],cl
1000AF2B |. 40 |inc eax
1000AF2C |. 83F8 06 |cmp eax,6
1000AF2F |.^ 7C DD \jl short UIClass.1000AF0E
1000AF31 |. B8 03000000 mov eax,3
1000AF36 |> 8BC8 /mov ecx,eax
1000AF38 |. 0FAFC8 |imul ecx,eax
1000AF3B |. 0FAFC8 |imul ecx,eax
1000AF3E |. 8D4C11 1F |lea ecx,dword ptr ds:[ecx+edx+1F]
1000AF42 |. 81E1 7F000080 |and ecx,8000007F
1000AF48 |. 79 05 |jns short UIClass.1000AF4F
1000AF4A |. 49 |dec ecx
1000AF4B |. 83C9 80 |or ecx,FFFFFF80
1000AF4E |. 41 |inc ecx
1000AF4F |> 884C04 28 |mov byte ptr ss:[esp+eax+28],cl
1000AF53 |. 40 |inc eax
1000AF54 |. 83F8 08 |cmp eax,8
1000AF57 |.^ 7C DD \jl short UIClass.1000AF36
1000AF59 |. 33D2 xor edx,edx ; edx=0
1000AF5B |. C64424 30 00 mov byte ptr ss:[esp+30],0
1000AF60 |. 33C9 xor ecx,ecx
1000AF62 |> 8A4414 28 /mov al,byte ptr ss:[esp+edx+28]
1000AF66 |. 3C 30 |cmp al,30
1000AF68 |. 7C 04 |jl short UIClass.1000AF6E ; 小于30吗
1000AF6A |. 3C 39 |cmp al,39
1000AF6C |. 7E 29 |jle short UIClass.1000AF97 ; 小于等于39吗
1000AF6E |> 3C 41 |cmp al,41 ; 小于41吗
1000AF70 |. 7C 04 |jl short UIClass.1000AF76
1000AF72 |. 3C 5A |cmp al,5A
1000AF74 |. 7E 21 |jle short UIClass.1000AF97 ; 小于等于5A吗
1000AF76 |> 3C 61 |cmp al,61
1000AF78 |. 7C 04 |jl short UIClass.1000AF7E
1000AF7A |. 3C 7A |cmp al,7A
1000AF7C |. 7E 19 |jle short UIClass.1000AF97
1000AF7E |> 0FBEC0 |movsx eax,al
1000AF81 |. 8D4408 1F |lea eax,dword ptr ds:[eax+ecx+1F] ; EAX=EAX+ECX+IF
1000AF85 |. 25 7F000080 |and eax,8000007F
1000AF8A |. 79 05 |jns short UIClass.1000AF91
1000AF8C |. 48 |dec eax
1000AF8D |. 83C8 80 |or eax,FFFFFF80
1000AF90 |. 40 |inc eax
1000AF91 |> 884414 28 |mov byte ptr ss:[esp+edx+28],al
1000AF95 |.^ EB CB |jmp short UIClass.1000AF62
1000AF97 |> 3C 4F |cmp al,4F ; 不等于4F吗 等于4F就换成44
1000AF99 |. 75 05 |jnz short UIClass.1000AFA0
1000AF9B |. C64414 28 44 |mov byte ptr ss:[esp+edx+28],44
1000AFA0 |> 807C14 28 6F |cmp byte ptr ss:[esp+edx+28],6F
1000AFA5 |. 75 05 |jnz short UIClass.1000AFAC ; 不等于6F吗 等于6F就换成48
1000AFA7 |. C64414 28 48 |mov byte ptr ss:[esp+edx+28],48
1000AFAC |> 83C1 07 |add ecx,7 ; ECX+=7
1000AFAF |. 42 |inc edx ; EDX++
1000AFB0 |. 83F9 38 |cmp ecx,38 ; ECX<38吗
1000AFB3 |.^ 7C AD \jl short UIClass.1000AF62
1000AFB5 |. 8D4C24 28 lea ecx,dword ptr ss:[esp+28]
1000AFB9 |. 8D5424 10 lea edx,dword ptr ss:[esp+10]
1000AFBD |. 51 push ecx
1000AFBE |. 68 F4300210 push UIClass.100230F4 ; ASCII "%s"
1000AFC3 |. 52 push edx
1000AFC4 |. E8 09CA0000 call <jmp.&MFC42.#2818_CString::Format>
1000AFC9 |. 83C4 0C add esp,0C
1000AFCC |> 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
1000AFD0 |. E8 F7C90000 call <jmp.&MFC42.#4204_CString::MakeUpper>
1000AFD5 |. 8B7424 44 mov esi,dword ptr ss:[esp+44]
========================================================================================================================
注册机算法:
#include<iostream.h>
#include <conio.h>
#include <stdlib.h>
#include<math.h>
#include<string.h>
void main()
{
char jqm[8]={0}/* 这是我的机器码 AP8UFEPM */,name[12]={0},zhucema[12]={0};
unsigned int len,tmp=0,sum=0,ebp=0,edx=0,ecx=0,tt=0;
double res;
cout<<"请输入 3位用户名"<<endl;
cin>>name;
len=strlen(name);
if(len!=3)
{
cout<<"请输入 3位用户名"<<endl;
exit(0);
}
cout<<"请输入 8位机器码"<<endl;
cin>>jqm;
cout<<"name is:"<<name<<endl<<"jqm is :"<<jqm<<endl;
strcat(name,jqm);
len=strlen(name);
cout<<"cat name is:"<<name<<endl;
for(unsigned int i=0;i<len;i++)
{
tmp=name[i];
res=sqrt(tmp);//用户名求平方根
res*=(i+1);
res+=1;
tmp*=(i+1);
tmp*=(i+1);
res*=tmp;
tt=res;//取整保存
sum+=tt;
sum=sum%0x186A0;
tmp=pow(name[i],2)*(i+1);//后面利用
/////////////////////////////////////////////
ecx=i+1;
ecx*=ebp;
tmp+=ecx;
res=sqrt(sum);
ebp=tmp%0x186A0;//后面利用
/////////////////////////////////////////
tmp=res;//取整
tmp+=ebp;
edx=tmp%0x186A0;//后面用
}
ecx=0;
for(i=0;i<3;i++)
{
ecx=i;
tmp=sum;
ecx*=i;
ecx*=i;
ecx=ecx+tmp+0x1f;
ecx=ecx&0x8000007F;
zhucema[i]=ecx;
}
for(i=3;i<6;i++)
{
ecx=i;
tmp=ebp;
ecx*=i;
ecx*=i;
ecx=ecx+tmp+0x1f;
ecx=ecx&0x8000007F;
zhucema[i]=ecx;
}
for(i=3;i<8;i++)
{
ecx=i;
tmp=edx;
ecx*=i;
ecx*=i;
ecx=ecx+tmp+0x1f;
ecx=ecx&0x8000007F;
zhucema[i]=ecx;
}
ecx=0;
for(i=0;i<8;i++)
{
if(zhucema[i]<'0'||zhucema[i]>'9')//
{
if(zhucema[i]<'A'||zhucema[i]>'Z')//
{
if(zhucema[i]<'a'||zhucema[i]>'z')//
{
tmp=zhucema[i];
tmp=ecx+tmp+0x1f;
tmp=tmp&0x8000007F;
zhucema[i]=tmp;
if(zhucema[i]<'0'||zhucema[i]>'9')//
{
if(zhucema[i]<'A'||zhucema[i]>'Z')//
{
if(zhucema[i]<'a'||zhucema[i]>'z')//
{
tmp=zhucema[i];
tmp=ecx+tmp+0x1f;
tmp=tmp&0x8000007F;
zhucema[i]=tmp;
}
}
}
}
}
}
ecx+=7;
}
for(i=0;i<8;i++)
{
if(zhucema[i]==0x4f)
zhucema[i]=0x44;
else
if(zhucema[i]==0x6f)
zhucema[i]=0x48;
}
cout<<zhucema<<endl;
}
==============================================================================================
如有得罪或疏漏之处请谅解,下次再会!