吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1312|回复: 9
收起左侧

[求助] 求Delphi大佬帮改改代码

  [复制链接]
270377132 发表于 2020-3-30 14:36
本帖最后由 270377132 于 2020-3-30 14:37 编辑

我也是网上找的传奇私服封包解密的代码如下
function Decode(source : string):string;//解密
var
Source_Len,Len : integer;
Count,c1,c2 : integer;
code : array[0..7] of byte;
a1,a2 : byte;
ind : dword;
Decode_Str : string;
label L1,L2;
begin
Result := '';
Decode_Str := '';
code[2] := $fc;
code[4] := $f0;
code[6] := $c0;
Len := 0;
a1 := 0;
a2 := 0;
c1 := 2;
c2 := 0;
ind := 0;
Count := 0;
Source_Len := Length(source);
while (Count < Source_Len) do
begin
if(ord(Source[Count+1]) - $3c) < 0 then
begin
Decode_Str := Decode_Str + Source[Count+1];
inc(Len);
inc(Count);
a1 := 0;
a2 := 0;
c1 := 2;
c2 := 0;
ind := 0;
Continue;
//break;
end;
a1 := ord(Source[Count+1]) - $3c;
if Len >= Source_Len then
begin
break;
end;
if (c2 + 6) < 8 then
begin
goto L2;
end;
ind := a1 and $3f;
ind := ind shr (6-c1);
Decode_Str := Decode_Str + chr(ind or a2);
Inc(Len);
c2 := 0;
if c1 >= 6 then
begin
c1 := 2;
goto L1;
end;
inc(c1,2);
L2 :a2 := a1 shl c1;
a2 := a2 and code[c1];
c2 := c2 + (8 - c1);
L1 :inc(count);
end;
SetLength(Decode_Str,Len);
Result := Decode_Str;
end;


//16进制字符串转换成字符串
function HexStrToStr(const S:string):string;
var
t:Integer;
ts:string;
M,Code:Integer;
begin
t:=1;
Result:='';
while t<=Length(S) do
begin   //xlh 2006.10.21
    while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do
      inc(t);
    if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
      ts:='$'+S[t]
    else
      ts:='$'+S[t]+S[t+1];
    Val(ts,M,Code);
    if Code=0 then
      Result:=Result+Chr(M);
    inc(t,2);
end;
end;

function strToHexStr(str:string):string;
var
c:char;
ss:string;
i:integer;
begin
while str<>'' do begin
    c:=str[1];
    ss:=ss+format('%0x',[ord(c)]);
    delete(str,1,1);
end;
strtohexStr:= ss;
end;


//解密得到十六进制
edit1.Text:=strToHexStr(Decode(HexStrToStr(‘23 32 6C 48 56 6F 41 4C 3C 3C 3C 3C 3E 78 3C 3C 3C 3C 52 68 70 3E 3C 3C 64 5A 7A 5D 77 78 4E 63 65 48 76 79 75 46 43 6B 64 5A 78 21’)));
//然后十六进制转字符串
edit3.Text:=HexStrToStr(edit1.Text);


我像问的是,为什么解出来上面的包之后十六进制是对的然后转换成字符串就不对了???为什么需要改哪里呢
万分感谢

免费评分

参与人数 1热心值 +1 收起 理由
lizf2019 + 1 兄弟加油,我看你的性格能成大事

查看全部评分

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

lizf2019 发表于 2020-3-30 15:01
帮你加个特效
image.png
lizf2019 发表于 2020-3-30 15:04
只能帮你到这了,好奇下这个语言用什么编译器??
image.png
 楼主| 270377132 发表于 2020-3-30 15:05
 楼主| 270377132 发表于 2020-3-30 15:22
lizf2019 发表于 2020-3-30 15:04
只能帮你到这了,好奇下这个语言用什么编译器??

不知道啊
null119 发表于 2020-3-30 16:31
注意源码的版本,delphi老版本和新版本有差别,
 楼主| 270377132 发表于 2020-3-30 16:56
null119 发表于 2020-3-30 16:31
注意源码的版本,delphi老版本和新版本有差别,

应该是不版本的问题吧
kollas 发表于 2020-3-30 17:48
delphi,年纪好大的语言
lorzl 发表于 2020-3-30 18:06
解出来的16进制的也不对吧
 楼主| 270377132 发表于 2020-3-30 18:24
lorzl 发表于 2020-3-30 18:06
解出来的16进制的也不对吧

后面的是对的,前面的是一个封包的其他数据
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-30 05:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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