吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1037|回复: 4
收起左侧

[求助] 还有没有会DelPhi的老哥存在、、

[复制链接]
无情老皮蛋 发表于 2020-9-25 22:29
function Encode(source : string):string;
var
Source_Len,Len : integer;
Count,c : integer;
a1,a2 : byte;
ind : dword;
Encode_Str : string;
begin
Result := '';
Encode_Str := '';
Len := 0;
a1 := 0;
a2 := 0;
c := 0;
ind := 0;
Count := 0;
Source_Len := Length(source);
while Count < Source_Len do
begin
if Len >= $2710 then
break;
ind := ord(source[Count+1]);
ind := ind shr (c+2);
a1 := ind or a2;
a1 := a1 and $3f;
ind := ord(source[Count+1]);
ind := ind shl (8-(c+2));
ind := ind shr 2;
a2 := ind and $3f;
inc(c,2);
if c >= 6 then
begin
if Len >= $270f then
begin
Encode_Str := Encode_Str + chr(a1 + $3c);
inc(Len);
end
else
begin
Encode_Str := Encode_Str + chr(a1 + $3c);
Encode_Str := Encode_Str + chr(a2 + $3c);
Inc(Len,2);
end;
c := 0;
a2 := 0;
end
else
begin
Encode_Str := Encode_Str + chr(a1 + $3c);
Inc(Len);
end;
inc(Count);
end;
if c > 0 then
begin
Encode_Str := Encode_Str + chr(a2 + $3c);
Inc(Len);
end;
SetLength(Encode_Str,Len);
Result := Encode_Str;
end;
能否帮忙解释一下这段加密。或者翻译成C语言
感谢

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

冥界3大法王 发表于 2020-9-25 23:04
本帖最后由 冥界3大法王 于 2020-9-25 23:05 编辑

[Delphi] 纯文本查看 复制代码
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function Encode(source: string): string;
var
  Source_Len, Len: integer;
  Count, c: integer;
  a1, a2: byte;
  ind: dword;
  Encode_Str: string;
begin
  Result := '';
  Encode_Str := '';
  Len := 0;
  a1 := 0;
  a2 := 0;
  c := 0;
  ind := 0;
  Count := 0;
  Source_Len := Length(source);
  while Count < Source_Len do
  begin
    if Len >= $2710 then
      break;
    ind := ord(source[Count + 1]);
    ind := ind shr (c + 2);
    a1 := ind or a2;
    a1 := a1 and $3f;
    ind := ord(source[Count + 1]);
    ind := ind shl (8 - (c + 2));
    ind := ind shr 2;
    a2 := ind and $3f;
    inc(c, 2);
    if c >= 6 then
    begin
      if Len >= $270f then
      begin
        Encode_Str := Encode_Str + chr(a1 + $3c);
        inc(Len);
      end
      else
      begin
        Encode_Str := Encode_Str + chr(a1 + $3c);
        Encode_Str := Encode_Str + chr(a2 + $3c);
        Inc(Len, 2);
      end;
      c := 0;
      a2 := 0;
    end
    else
    begin
      Encode_Str := Encode_Str + chr(a1 + $3c);
      Inc(Len);
    end;
    inc(Count);
  end;
  if c > 0 then
  begin
    Encode_Str := Encode_Str + chr(a2 + $3c);
    Inc(Len);
  end;
  SetLength(Encode_Str, Len);
  Result := Encode_Str;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(Encode('ABCDEFGHIJKLMNOPQRSTUVWXYZ'));
end;

end.

F9编译后
image.png
链接: https://pan.baidu.com/s/13YONQO9fDtdXCiQgRDsrlg 提取码: m9b9
你自己  IDA  F5 吧

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
无情老皮蛋 + 1 + 1 热心回复!

查看全部评分

jjyywg 发表于 2020-9-26 07:13
xfwb 发表于 2020-9-26 07:38
xuanle 发表于 2020-9-26 08:39
本帖最后由 xuanle 于 2020-9-26 08:44 编辑

delphi7中string字符串,取单个字符是从1开始,不是象C那样从0开始

s1,s2: string
s1:='ABCD';
s2:=s1[1]; //第一个字符等于 A

ord 是 取ascii码
shl 是 向左位移
shr 是 向右位移
or 是 或
and 是 与
chr 转换成字符
Length 是计算字符串长度, 一个汉字算2个
SetLength 是设置字符串长度
Inc 是加 1  ,   Inc(Len, 2); 是加2
$ 是 十六进制

delphi变量不区分大小写

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
无情老皮蛋 + 1 + 1 我很赞同!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 12:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表