-
-
[原创]看雪论坛原来的一个crackme自己分析算法后的delphi注册机
-
发表于: 2008-2-15 11:17 4343
-
这个crackme里面用了大数算法,有兄弟用C++很容易实现了它的算法,我想用delphi实现一下,结果成功了,你自己可以试,虽然delphi里有成形的inttothex函数,但没办法用的,另外,把longword改成longint会溢出的.
procedure TForm1.Button1Click(Sender: TObject);
var username,out_strL,out_strR:string;
user_length,i:integer;
Teax,Tebx,out_intL,out_intR:longword;
begin
username:=form1.Edit1.Text;
user_length:=length(username);
i:=0;
out_intL:=0;
out_intR:=0;
out_strL:='';
out_strR:='';
Tebx:=$654789;
for i:=1 to user_length do
begin
Teax:=ord(username[user_length-i+1]);
Tebx:=Tebx-1;
Teax:=Tebx*2;
Tebx:=Tebx+Teax;
Tebx:=Tebx-1;
out_intR:=out_intR+ord(username[i])*4;
end;
out_intL:=Tebx;
out_strL:=Bint_Hex(out_intL);
out_strR:=IntTostr(out_intR);
form1.edit2.text:='BS-'+out_strL+'-'+out_strR;
end;
function Bint_Hex(bignum:longword): string;
var j,yushu:integer;
out_string,biaoge:string;
tempchar:char;
begin
biaoge:='0123456789ABCDEF' ; //初始化表格
//用求模和求余的方式把一个大数变成HEX串
while bignum>=16 do
begin
yushu:=bignum mod 16 ;
out_string:=out_string +biaoge[yushu+1];
bignum:=bignum div 16;
end ;
out_string:=out_string +biaoge[bignum+1];
//字符串自身逆向
for j:=1 to length(out_string) div 2 do
begin
tempchar:=out_string[j];
out_string[j]:=out_string[length(out_string)-j+1];
out_string[length(out_string)-j+1]:=tempchar;
end;
result:=out_string;
end;
end.
procedure TForm1.Button1Click(Sender: TObject);
var username,out_strL,out_strR:string;
user_length,i:integer;
Teax,Tebx,out_intL,out_intR:longword;
begin
username:=form1.Edit1.Text;
user_length:=length(username);
i:=0;
out_intL:=0;
out_intR:=0;
out_strL:='';
out_strR:='';
Tebx:=$654789;
for i:=1 to user_length do
begin
Teax:=ord(username[user_length-i+1]);
Tebx:=Tebx-1;
Teax:=Tebx*2;
Tebx:=Tebx+Teax;
Tebx:=Tebx-1;
out_intR:=out_intR+ord(username[i])*4;
end;
out_intL:=Tebx;
out_strL:=Bint_Hex(out_intL);
out_strR:=IntTostr(out_intR);
form1.edit2.text:='BS-'+out_strL+'-'+out_strR;
end;
function Bint_Hex(bignum:longword): string;
var j,yushu:integer;
out_string,biaoge:string;
tempchar:char;
begin
biaoge:='0123456789ABCDEF' ; //初始化表格
//用求模和求余的方式把一个大数变成HEX串
while bignum>=16 do
begin
yushu:=bignum mod 16 ;
out_string:=out_string +biaoge[yushu+1];
bignum:=bignum div 16;
end ;
out_string:=out_string +biaoge[bignum+1];
//字符串自身逆向
for j:=1 to length(out_string) div 2 do
begin
tempchar:=out_string[j];
out_string[j]:=out_string[length(out_string)-j+1];
out_string[length(out_string)-j+1]:=tempchar;
end;
result:=out_string;
end;
end.
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
看原图
赞赏
雪币:
留言: