首页
论坛
课程
招聘
我要用freeRes 0.94~~~
2006-10-22 17:02 10383

我要用freeRes 0.94~~~

2006-10-22 17:02
10383
//freeRes 0.94注册算法

function KUser(Str: String;Num1,Num2,Num3: Integer): String;
var
  I,L: Byte;
  Num: Integer;
begin
  Result := '';
  Num := Num1;
  L := Length(Str);
  for I := 1 to L do
  begin
    Result := Result + Char(Ord(Str[I]) xor ((Num shr 8) and $FF));
    Num := Num + Ord(Result[I]);
    Num := Num * Num2 + Num3;
  end;  
end;

function KCode(Str: String;Num1,Num2,Num3: Integer): String;
var
  I,L: Byte;
  Num: Integer;
begin
  Result := '';
  Num := Num1;
  L := Length(Str);
  for I := 1 to L do
  begin
    Result := Result + Char(Ord(Str[I]) xor ((Num shr 8) and $FF));
    Num := Num + Ord(Str[I]);
    Num := Num * Num2 + Num3;
  end;
end;

function KCode1(Str: String): String;
var
  L,I: Integer;
  B0,B1,B2,B3: Byte;
begin
  Result := '';
  L := Length(Str) shr 1;
  for I := 0 to L - 1 do
  begin
    B0 := Ord(Str[I * 2 + 1]);
    B1 := Ord(Str[I * 2 + 2]);
   
    B2 := B1 and $4F;//0100-1111
    B3 := (B1 and $30) shr 4;
   
    if B1 and $40 = 0 then
    begin
      B0 := 0;
    end
    else
    begin
      if B2 < $43 then
      begin
        B2 := $43 - B2;
        B0 := (B0 shl B2) or B3;
      end
      else
      begin
        if B2 > $43 then
        begin
          B2 := B2 - $43;         
          B0 := B0 shr B2;
        end;
      end;
    end;   
    Result := Result  + Char(B0);   
  end;
end;     

function UserCode(StrCode: String;Num1,Num2,Num3: Integer): String;
var
  Str: String;
begin
  Str := KCode1(StrCode);  
  Result := KCode(Str,Num1,Num2,Num3);   
end;

function UserUser(StrId,StrUser: String;Num1,Num2,Num3: Integer): String;
var
  Str: String;
  L,Pad: Integer;
  LastCh,PadCh,Sign: Byte;
begin
  Str := StrUser + StrId;
  L := Length(Str);
  if L = 0 then
  begin
    Result := '';
    Exit;
  end;

  if L > 18 then
  begin
    PadCh := Ord(Str[18]);
    Pad := L - $14;
    Sign := $14;
    while Pad > 0 do
    begin
      LastCh := Ord(Str[Sign]);
      if PadCh > LastCh then
      begin
        PadCh := PadCh - LastCh;
      end
      else
      begin
        PadCh := LastCh - PadCh;
      end;
      Inc(Sign);
      Dec(Pad);
    end;
   
    SetLength(Str,18);
    if PadCh = 0 then
    begin
      PadCh := $FF;
    end;
    Insert(Char(PadCh),Str,1);
  end
  else
  begin
    PadCh := Ord(Str[L]);
    LastCh := PadCh;
    if L < 18 then
    begin
      if PadCh > $7F then
      begin
        Sign := $FF;
      end
      else
      begin
        Sign := 1;
      end;
      Pad := 18 - L;
      while Pad > 0 do
      begin
        PadCh := PadCh + Sign;
        Insert(Char(PadCh),Str,1);
        Dec(Pad);
      end;   
    end;
    Insert(Char(LastCh),Str,1);
  end;

  if L > $FF then
  begin
    L := $FF;
  end;
  Insert(Char(L),Str,2);
  Result := KUser(Str,Num1,Num2,Num3);   
end;

function GetShift1(I: Integer): Byte;
var
  c: Byte;
begin
  c := 0;
  i := i and $FF;
  repeat
    Inc(c);
    i := i shr 1;//
  until i < $7F;//6x
  Result := c;
end;

function GetFake2(I: Integer): Byte;
var
  c: Byte;
begin
  c := 0;
  i := i and $FF;
  repeat
    Inc(c);
    i := i shl 1;
  until i > $20;
  Result := c;
end;

function GetMask(Shift: Integer): Integer;
begin
  Result := $0;
  while Shift > 0 do
  begin
    Result := (Result shl 1) or 1;
    Dec(Shift);
  end;  
end;

function GetHD(): String;
var
  Serial: DWORD;
  MaximumComponentLength: DWORD;
  FileSystemFlags: DWORD;
  Str: String;
  I,L: Integer;
  ch: Char;
begin
  GetVolumeInformation('C:\',nil,0,@Serial,MaximumComponentLength,FileSystemFlags,nil,0);
  Str := Format('%x',[Serial]);
  Result := '';
  L := Length(Str);
  for I := L downto 1 do
  begin
    Ch := Str[I];
    if Not(Ch in ['9','Z']) then
      Ch := Char(Ord(Ch) + 1);
    Result := Result + Ch;
  end;
end;

//一下是对应函数的反函数
function DKCode1(Str: String): String;
var
  L,I: Integer;
  B0,B1,B2,B3: Byte;
begin
  Result := '';
  L := Length(Str);
  for I := 1 to L do
  begin
    B0 := Ord(Str[I]);
    if B0 = 0 then
    begin
      B0 := Random(26) + $41;//
      B1 := Random(10) + $30;//30-39//防止特殊字符出现, 正常范围还可以包含特殊字符
    end
    else
    begin
      if B0 in[$21..$7E] then
      begin
        B1 := $43;//B1 := $63;//也可以
      end
      else
      begin
        if B0 > $7E then
        begin
          B2 := GetShift1(B0);
          if B2 = 2 then
          begin
            B2 := 3;
          end;
          B3 := B0 and GetMask(B2);
          B0 := B0 shr B2;
          B1 := ($43 - B2) or (B3 shl 4);
        end
        else
        begin
          B2 := GetFake2(B0);
          B0 := B0 shl B2;
          B1 := $43 + B2;
        end;
//   B2=40,则B0=xxxx x000
//   B2=41,则B0=xxxx xx00
//   B2=42,则B0=xxxx xxx0
//   B2=43,则B0=任意可见字符
//   B2=44,则B0=0xxx xxxx
//   B2=45,则B0=00xx xxxx
//   B2=46,则B0=000x xxxx
//   B2=47,则B0=0000 xxxx
//   B2=48,则B0=0000 0xxx
//   B2=49,则B0=0000 00xx
//   B2=4A,则B0=0000 000x
//   B2=4B以上,则B0=0;
      end;
    end;
    Result := Result + Char(B0) + Char(B1);
  end;
end;

function DKCode(Str: String;Num1,Num2,Num3: Integer): String;
var
  I,L: Byte;
  Num: Integer;
begin
  Result := '';
  Num := Num1;
  L := Length(Str);
  for I := 1 to L do
  begin
    Result := Result + Char(Ord(Str[I]) xor ((Num shr 8) and $FF));
    Num := Num + Ord(Str[I]);
    Num := Num * Num2 + Num3;
  end;
end;

function DUserCode(StrUser: String): String;
var
  Str: String;
begin
  Str := KUser(StrUser,982,12675,35892);
  Result := DKCode1(Str);
end;

function Serial(StrId, StrUser: String): String;
begin
  Result := DUserCode(UserUser(StrId,StrUser,982,12675,35892));
end;

//入口函数是Serial

看雪2022 KCTF 秋季赛 防守篇规则,征题截止日期11月12日!(iPhone 14等你拿!)

收藏
点赞0
打赏
分享
最新回复 (16)
雪    币: 226
活跃值: 活跃值 (78)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
龙岱客 活跃值 2006-10-22 17:08
2
0
厉害哦,,呵呵

刚看到是初级会员,,一会儿就是VIP了,
雪    币: 584
活跃值: 活跃值 (11132)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 活跃值 8 2006-10-22 17:08
3
0
最初由 DiKeN 发布
//freeRes 0.94注册算法

function KUser(Str: String;Num1,Num2,Num3: Integer): String;
var
I,L: Byte;
........

看来DiKeN最近心情不错,呵~

最初由 龙岱客 发布
厉害哦,,呵呵

刚看到是初级会员,,一会儿就是VIP了,

以前在001软件调试论DiKeN为论坛做过不少贡献,DiKeN是公认的牛人之一。;)
雪    币: 226
活跃值: 活跃值 (78)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
龙岱客 活跃值 2006-10-22 17:12
4
0
最初由 kanxue 发布
DiKeN是公认的牛人之一

知道哦,

传说中的公牛
雪    币: 331
活跃值: 活跃值 (141)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
winndy 活跃值 17 2006-10-22 18:26
5
0
精华1和2上有很多ID
都隐了
雪    币: 325
活跃值: 活跃值 (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
morning 活跃值 1 2006-10-22 18:31
6
0
......
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
peilan 活跃值 2006-10-23 02:30
7
0
牛啊,

可惜看不懂,可否编译一下呢?
雪    币: 189
活跃值: 活跃值 (487)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xingbing 活跃值 2006-10-23 20:00
8
0
厉害,高人。
雪    币: 200
活跃值: 活跃值 (13)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
shoooo 活跃值 16 2006-10-23 20:13
9
0
D头的要顶一下
雪    币: 1412
活跃值: 活跃值 (1215)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
china 活跃值 5 2006-10-24 08:14
10
0
小糖MM就是厉害,注册通过,其他的呢?

http://restools.hanzify.org/article.asp?id=3

里面的都写了注册机吧。

雪    币: 244
活跃值: 活跃值 (42)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
firstrose 活跃值 16 2006-10-24 08:40
11
0
小糖MM是谁?
雪    币: 1412
活跃值: 活跃值 (1215)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
china 活跃值 5 2006-10-24 08:55
12
0
最初由 firstrose 发布
小糖MM是谁?


DiKeN就是啦。
雪    币: 304
活跃值: 活跃值 (234)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zxc 活跃值 2006-10-24 10:07
13
0
最初由 china 发布
DiKeN就是啦。


别人明明是小明哥
雪    币: 1068
活跃值: 活跃值 (20)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
DiKeN 活跃值 5 2006-10-24 21:18
14
0
没有其他的啊。现在没那么多时间了。每天6点就去出去上班,晚上很晚才回来,很可怜的。
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kongruojun 活跃值 2006-10-24 22:32
15
0
“牛B”不是一个形容词,它是一个名词~~~!
雪    币: 113
活跃值: 活跃值 (11)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
WAKU 活跃值 7 2006-10-25 01:13
16
0
汗楼上的
雪    币: 2089
活跃值: 活跃值 (661)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tommouse 活跃值 2018-5-17 19:08
17
0
函数对应汇编,不错。
最后于 2018-5-18 11:56 被tommouse编辑 ,原因: 发帖错误
游客
登录 | 注册 方可回帖
返回