昨天看见了甲壳虫那里关于远程控制的免杀,其中用加密字符串来躲过杀软,还有个叫“小坏”的发了个远控的源码,里面有个“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;
|