分享

delphi 字符串加密收集

 ZLM_图书馆 2014-03-20

昨天看见了甲壳虫那里关于远程控制的免杀,其中用加密字符串来躲过杀软,还有个叫“小坏”的发了个远控的源码,里面有个“JIEMIDE“的函数,居然删除了,起始加密函数都差不多,我们只要自己写个就可以,现在到网上收集几个,还有那灰鸽子里面有个加密的模块,也可以调用,奇怪的是,我昨天找了FF115那个远控里的加密函数,试验了点东西,我的卡巴2010版居然报毒呵呵!看来要自己写加密函数了。

这里就收集几个,大家自己去扩展思路吧!

我重来不玩远控那东西,只是感觉这个好玩,连什么恶意程序都没写过,就是感觉这个比较好玩,呵呵!
远控里的东西,也不难理解,至于写远控,看了大家的都是堆积木,没太大的技术含量,基本都是改来改去,没什么技术含量了,菜鸟们拿去做免杀。其实只要自己稍微知道编程,免杀就很好做,至于一些经验之谈,网上都有,大家就拿来堆积木就是了。真正的高手是自己去探索新的思路,至于我这种小鸟,不是吃那饭的,随便玩下!呵呵。。。

function   Encode(Str:String):String;
var//加密
TmpChr:AnsiChar;
i,Len:integer;
begin
Result:=Str;
Len:=Length(Result);
TmpChr:=Result[1];
    for   i:=1   to   Len-1   do
    Result[i]:=Result[i+1];
    Result[Len]:=TmpChr;
end;

function   Decode(Str:String):String;
var//解密
TmpChr:AnsiChar;
i,Len:integer;
begin
          Result:=Str;
          Len:=Length(Result);
          TmpChr:=Result[Len];
   for   i:=Len   DownTo   2   do
   Result[i]:=Result[i-1];
   Result[1]:=TmpChr;
end;

///////////////////////

功能:字符串加密和解密

作用:可用作密码的和一些重要参数的保存,数据经加密后保存即使被人看到了也无防。

首先定义一个常量数组

const

       XorKey:array[0..7] of Byte=($B2,$09,$AA,$55,$93,$6D,$84,$47); //字符串加密用

然后在程序里加入以下两个函数,具体用法就不用多说了吧!

function Enc(Str:String):String;//字符加密函數   這是用的一個異或加密
var
i,j:Integer;
begin
Result:='';
j:=0;
for i:=1 to Length(Str) do
    begin
      Result:=Result+IntToHex(Byte(Str[i]) xor XorKey[j],2);
      j:=(j+1) mod 8;
    end;
end;

function Dec(Str:String):String;//字符解密函數
var
i,j:Integer;
begin
Result:='';
j:=0;
for i:=1 to Length(Str) div 2 do
    begin
      Result:=Result+Char(StrToInt('$'+Copy(Str,i*2-1,2)) xor XorKey[j]);
      j:=(j+1) mod 8;
    end;
end;

function   Crypt(s:   string;   Key:   Word;
      const   bEncrypt:   boolean):   string;  
const  
      SeedA   =   787;   ///   常量,你可以修改
      SeedB   =   787;   ///   常量,你可以修改
var
      i:   integer;  
      ps,   pr   :   ^byte;  
begin  
      if   bEncrypt   then
          s   :=   s+#0;
      SetLength(Result,   Length(s));
      ps   :=   @s[1];
      pr   :=   @Result[1];
      for   i   :=   1   to   length(s)   do
      begin
          pr^   :=   ps^   xor   (Key   shr   8);
          if   bEncrypt   then  
              Key   :=   (pr^   +   Key)   *   SeedA   +   SeedB
          else
              Key   :=   (ps^   +   Key)   *   SeedA   +   SeedB;
          pr   :=   pointer(integer(pr)   +   1);
          ps   :=   pointer(integer(ps)   +   1);
      end;
end;

///////////////////

1.

function EncrypStr(Src, Key: String): String;//字符串加密函数
//对字符串加密(Src:源 Key:密匙)
var KeyLen :Integer;
    KeyPos :Integer;
    offset :Integer;
    dest :string;
    SrcPos :Integer;
    SrcAsc :Integer;
    Range :Integer;
begin
   KeyLen:=Length(Key);
   if KeyLen = 0 then key:='delphi';
   KeyPos:=0;
   Range:=256;
   Randomize;
   offset:=Random(Range);
   dest:=format('%1.2x',[offset]);
   for SrcPos := 1 to Length(Src) do
      begin
         SrcAsc:=(Ord(Src[SrcPos]) + offset) MOD 255;
         if KeyPos < KeyLen
         then KeyPos:= KeyPos + 1
         else KeyPos:=1;
         SrcAsc:= SrcAsc xor Ord(Key[KeyPos]);
         dest:=dest + format('%1.2x',[SrcAsc]);
         offset:=SrcAsc;
      end;
   Result:=Dest;
end;
end;

function UncrypStr(Src, Key: String): string;//字符串解密函数
//对字符串解密(Src:源 Key:密匙)
var KeyLen :Integer;
    KeyPos :Integer;
    offset :Integer;
    dest :string;
    SrcPos :Integer;
    SrcAsc :Integer;
    TmpSrcAsc :Integer;
begin
   KeyLen:=Length(Key);
   if KeyLen = 0 then key:='delphi';
   KeyPos:=0;
   offset:=StrToInt('$'+ copy(src,1,2));
   SrcPos:=3;
   repeat
      SrcAsc:=StrToInt('$'+ copy(src,SrcPos,2));
      if KeyPos < KeyLen
      Then KeyPos := KeyPos + 1
      else KeyPos := 1;
      TmpSrcAsc := SrcAsc xor Ord(Key[KeyPos]);
      if TmpSrcAsc <= offset
      then TmpSrcAsc := 255 + TmpSrcAsc - offset
      else TmpSrcAsc := TmpSrcAsc - offset;
      dest:=dest + chr(TmpSrcAsc);
      offset:=srcAsc;
      SrcPos:=SrcPos + 2;
   until SrcPos >= Length(Src);
   Result:=Dest;
end;

//***************************************************************************************

2.

//********************************************************
//             加密解密 (利用异或运算)    (方式2)          
//********************************************************

function encryptstr(const s:string; skey:string):string;//加密
var
    i,j: integer;
    hexS,hexskey,midS,tmpstr:string;
    a,b,c:byte;
begin
    hexS   :=myStrtoHex(s);
    hexskey:=myStrtoHex(skey);
    midS   :=hexS;
    for i:=1 to (length(hexskey) div 2)   do
    begin
        if i<>1 then midS:= tmpstr;
        tmpstr:='';
        for j:=1 to (length(midS) div 2) do
        begin
            a:=strtoint('$'+midS[2*j-1]+midS[2*j]);
            b:=strtoint('$'+hexskey[2*i-1]+hexskey[2*i]);
            c:=a xor b;
            tmpstr := tmpstr+myStrtoHex(chr(c));
        end;
    end;
    result := tmpstr;
end;

function decryptstr(const s:string; skey:string):string;//解密
var
    i,j: integer;
    hexS,hexskey,midS,tmpstr:string;
    a,b,c:byte;
begin
    hexS :=s;//应该是该字符串
    if length(hexS) mod 2=1 then
    begin
        showmessage('密文错误!');
        exit;
    end;
    hexskey:=myStrtoHex(skey);
    tmpstr :=hexS;
    midS   :=hexS;
    for i:=(length(hexskey) div 2) downto 1 do
    begin
        if i<>(length(hexskey) div 2) then midS:= tmpstr;
        tmpstr:='';
        for j:=1 to (length(midS) div 2) do
        begin
            a:=strtoint('$'+midS[2*j-1]+midS[2*j]);
            b:=strtoint('$'+hexskey[2*i-1]+hexskey[2*i]);
            c:=a xor b;
            tmpstr := tmpstr+myStrtoHex(chr(c));
        end;
    end;
    result := myHextoStr(tmpstr);
end;

delphi 字符串加密收集 - Blueboy - Blueboys blog

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多