光盘伴侣2.0不完全注册机
目的:
1.介绍一个debug软件Ollydbg1.03,因为它支持浮点寄存器显示,且不必开机就运行......;而trw2000不支持浮点寄存器显示,softice需要开机就运行。
2.delphi的一个控件KOL&MCK,你可以从http://kol.cjb.net下载,用它编写的delphi程序只有30K左右,大小是不用它编译的程序的十分之一;而且不必再害怕DEDE等基于Form的反编译软件。
注册码计算
:00408FF9 0FBE0F movsx ecx, byte ptr [edi]
:00408FFC 8BC1 mov eax, ecx
:00408FFE 99 cdq
:00408FFF 33C2 xor eax, edx
:00409001 2BC2 sub eax, edx
:00409003 85DB test ebx, ebx
:00409005 8BF0 mov esi, eax
:00409007 750E jne 00409017
//用户名大于1个字符就跳
:00409009 8975A8 mov dword ptr [ebp-58], esi//取用户名[1]ascii码
:0040900C DB45A8 fild dword ptr [ebp-58] //装入st0
:0040900F D845AC fadd dword ptr [ebp-54] //加dword
ptr[ebp-54]指向的数
:00409012 D95DAC fstp dword ptr [ebp-54] //存入dword ptr [ebp-54]
:00409015 EB31 jmp 00409048
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00409007(C)
|
:00409017 8975A8 mov dword ptr [ebp-58], esi //依次取用户名的2、3....字符ascii码,换算为十进制数
:0040901A DB45A8 fild dword ptr [ebp-58] //装入st0
:0040901D 83C4F4 add esp, FFFFFFF4
:00409020 DB3C24 fstp tbyte ptr [esp]
:00409023 895DA4 mov dword ptr [ebp-5C], ebx
:00409026 DB45A4 fild dword ptr [ebp-5C]
:00409029 83C4F4 add esp, FFFFFFF4
:0040902C DB3C24 fstp tbyte ptr [esp]
:0040902F E8FC820A00 call 004B1330 //计算用户名[i]的(i-1)次方
:00409034 D845AC fadd dword ptr [ebp-54] //累加
:00409037 895DA0 mov dword ptr [ebp-60], ebx
:0040903A DB45A0 fild dword ptr [ebp-60]
:0040903D DEE9 fsubp st(1), st(0) //减(i-1)
:0040903F D825CC914000 fsub dword ptr [004091CC] //减1
:00409045 D95DAC fstp dword ptr [ebp-54] //放入dword
ptr [ebp-54]
:00409048 43 inc ebx
:00409049 47 inc edi
:0040904A 8B45B4 mov eax, dword ptr [ebp-4C]
:0040904D E8BEB60A00 call 004B4710
:00409052 3BC3 cmp eax, ebx
:00409054 77A3 ja 00408FF9 //i<=length(name)则跳回
.....
.....
但是存在一个问题,根据动态跟踪所得,若用户名>4位,则注册码有校正,我不知道是如何进行的?
注册机(用户名不超过4位)
(使用KOL&MCK控件,其中部分函数的写法依照此控件规定;delphi5.0编译通过,仅26K,哈哈)
main form中有editbox1,editbox2,button1
----------------cut here--------------------------------------
{ KOL MCK } // Do not remove this line!
{$DEFINE KOL_MCK}
unit Unit1;
interface
{$IFDEF KOL_MCK}
uses Windows, Messages, ShellAPI, KOL {$IFNDEF KOL_MCK}, mirror, Classes,
mckCtrls, Controls {$ENDIF};
{$ELSE}
{$I uses.inc} mirror,
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
mirror;
{$ENDIF}
type
{$IFDEF KOL_MCK}
{$I MCKfakeClasses.inc}
PForm1 = ^TForm1;
TForm1 = object(TObj)
Form: PControl;
{$ELSE not_KOL_MCK}
TForm1 = class(TForm)
{$ENDIF KOL_MCK}
KOLProject1: TKOLProject;
KOLForm1: TKOLForm;
EditBox1: TKOLEditBox;
EditBox2: TKOLEditBox;
Button1: TKOLButton;
procedure Button1Click(Sender: PObj);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1 {$IFDEF KOL_MCK} : PForm1 {$ELSE} : TForm1 {$ENDIF} ;
len,a,b,i,t,code,sum:integer;
name:string;
{$IFDEF KOL_MCK}
procedure NewForm1( var Result: PForm1; AParent: PControl );
{$ENDIF}
implementation
{$IFNDEF KOL_MCK} {$R *.DFM} {$ENDIF}
{$IFDEF KOL_MCK}
{$I Unit1_1.inc}
{$ENDIF}
procedure TForm1.Button1Click(Sender: PObj);
begin
len:=length(editbox1.text);
name:=editbox1.text;
if len=0 then editbox2.text:='input your name';
if len=1 then editbox2.text:=int2str(ord(name[1]))
else
if len>4 then editbox2.text:='this keygen only support name of
4 digits max!'
else
begin
i:=2; code:=0;
while i<=len do
begin
a:=ord(name[i]);
b:=1; t:=2;
while
t<= i do
begin
b:=b*a; t:=t+1;
end;
b:=b-i;
code:=code+b;
i:=i+1;
end;
editbox2.text:=int2str(code+ord(name[1]));
end;
end;
end.
--------------------------end--------------------------------
- 标 题:写光盘伴侣2.0不完全注册机(支持到5位以下的用户名),目的是介绍一个新DEBUG软件及一个delhpi控件 (4千字)
- 作 者:小楼
- 时 间:2001-6-27 22:56:5
- 链 接:http://bbs.pediy.com