大佬教程收集整理的这篇文章主要介绍了如何在Delphi EXE中隐藏或隐藏字符串?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试使用一个基本的HEX转录,如#$65#$78#$61#$6d#$70#$6c#$65,但在编译时它被重新转录.
我寻找封隔器,但它不是最好的解决方案(PECompact可以被检测为一个假阳性恶意软件,UPX太容易de-UPX,…).我更喜欢在我的内部代码中的想法…
有人会把我放在正确的方式.
procedure ROT13(var Str: String); const OrdBigA = Ord('A'); OrdBigZ = Ord('Z'); OrdSmlA = Ord('a'); OrdSmlZ = Ord('z'); var i,o: Integer; begin for i := 1 to length(Str) do begin o := Ord(Str[i]); if InRange(o,OrdBigA,OrdBigz) then Str[i] := chr(OrdBigA + (o - OrdBigA + 13) mod 26) else if InRange(o,OrdSmlA,OrdSmlz) then Str[i] := chr(OrdSmlA + (o - OrdSmlA + 13) mod 26); end; end; function ROT13fun(const Str: String): String; begin result := Str; ROT13(result); end; const ObfuscatedString = 'Guvf vf n frperg zrffntr.'; procedure TForm4.FormCreate(Sender: TObject); begin Showmessage(ROT13fun(ObfuscatedString)); end;
稍微更复杂的是使用凯撒密码或维根埃尔密码.
要获得在源代码中使用的混淆字符串,您可以使用像我自己的Rejbrand Text Editor或Wolfram|Alpha一样的体面的文本编辑器.
更新
ROT13是非常容易破译,但它可能是足够你的情况,取决于它的外观!至少在二进制文件中识别字符串将变得非常困难.获取字符串将需要一些真正的努力. (毕竟,日常用户甚至没有看到十六进制编辑器/文本编辑器中的二进制文件!)凯撒密码是ROT13密码的非常简单的泛化,也很容易解密.的确,只有25个不同的“密码”. Vigenère密码是非常棘手的,并且需要一些非常严肃的努力来破解(特别是因为你不知道字符串中的二进制的精确位置).
例如,下面我给出一个使用Vigenèrecihper进行混淆的字符串:
当然可以扩展密码也可以处理数字和特殊字符,包括空格.也可以混合首都和小写字母.那么这是非常困难的(虽然可能)来破译.如果口令是一个已知的单词,这可以在字典中找到,这可能会更容易解读.如果不是一个字,就会更安全.
上面的文字使用您可以在足够大的字典中找到的单词进行混淆.下面的文本使用无意义的字符串作为密码进行模糊处理:
最后,下面的文本是以相同的方式进行混淆,但是 – 除了字符串中已经删除了所有的空格和特殊字符外:
我挑战你来解读这三个文本.如果任何人成功解密最后一个,我保证给这个人100瑞典克朗(100瑞典克朗)!
但是,还有,Warren P是对的:如果你真的需要高安全性,即使是专家也不能破译,那么你应该去进行一些真正的加密.
更新
根据Warren P的要求,我使用以下代码来加密/解密Vigenère:
const OrdBigA = Ord('A'); OrdBigZ = Ord('Z'); OrdSmlA = Ord('a'); OrdSmlZ = Ord('z'); function imod(const x: Integer; const y: Integer): Integer; begin if x >= 0 then imod := x - floor(x/y) * y else imod := x + ceil(-x/y) * y; end; procedure Vigenère(var Str: String; const Key: String); var n,i,o: Integer; KeyChrs: TBytes; begin n := length(Key); SetLength(KeyChrs,n); for i := 1 to n do if InRange(ord(KeY[i]),OrdBigz) then KeyChrs[i - 1] := Ord(KeY[i]) - OrdBigA else raise Exception.Create('Invalid character in Vigenère key.'); for i := 1 to length(Str) do begin o := Ord(Str[i]); if InRange(o,OrdBigz) then Str[i] := chr(OrdBigA + imod((o - OrdBigA + KeyChrs[(i-1) mod n]),26)) else if InRange(o,OrdSmlz) then Str[i] := chr(OrdSmlA + imod((o - OrdSmlA + KeyChrs[(i-1) mod n]),26)); end; end; function Vigenèref(const Str: String; const Key: String): String; begin result := Str; Vigenère(result,Key); end; procedure VigenèreD(var Str: String; const Key: String); var n,OrdBigz) then Str[i] := chr(OrdBigA + imod((o - OrdBigA - KeyChrs[(i-1) mod n]),OrdSmlz) then Str[i] := chr(OrdSmlA + imod((o - OrdSmlA - KeyChrs[(i-1) mod n]),26)); end; end; function VigenèreDf(const Str: String; const Key: String): String; begin result := Str; VigenèreD(result,Key); end;
以上是大佬教程为你收集整理的如何在Delphi EXE中隐藏或隐藏字符串?全部内容,希望文章能够帮你解决如何在Delphi EXE中隐藏或隐藏字符串?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。