昨天看見了甲殼蟲那里關(guān)于遠程控制的免殺,其中用加密字符串來躲過殺軟,還有個叫“小壞”的發(fā)了個遠控的源碼,里面有個“JIEMIDE“的函數(shù),居然刪除了,起始加密函數(shù)都差不多,我們只要自己寫個就可以,現(xiàn)在到網(wǎng)上收集幾個,還有那灰鴿子里面有個加密的模塊,也可以調(diào)用,奇怪的是,我昨天找了FF115那個遠控里的加密函數(shù),試驗了點東西,我的卡巴2010版居然報毒呵呵!看來要自己寫加密函數(shù)了。 這里就收集幾個,大家自己去擴展思路吧! 我重來不玩遠控那東西,只是感覺這個好玩,連什么惡意程序都沒寫過,就是感覺這個比較好玩,呵呵! 遠控里的東西,也不難理解,至于寫遠控,看了大家的都是堆積木,沒太大的技術(shù)含量,基本都是改來改去,沒什么技術(shù)含量了,菜鳥們拿去做免殺。其實只要自己稍微知道編程,免殺就很好做,至于一些經(jīng)驗之談,網(wǎng)上都有,大家就拿來堆積木就是了。真正的高手是自己去探索新的思路,至于我這種小鳥,不是吃那飯的,隨便玩下!呵呵。。。 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; /////////////////////// 功能:字符串加密和解密 作用:可用作密碼的和一些重要參數(shù)的保存,數(shù)據(jù)經(jīng)加密后保存即使被人看到了也無防。 首先定義一個常量數(shù)組 const XorKey:array[0..7] of Byte=($B2,$09,$AA,$55,$93,$6D,$84,$47); //字符串加密用 然后在程序里加入以下兩個函數(shù),具體用法就不用多說了吧! function Enc(Str:String):String;//字符加密函數(shù) 這是用的一個異或加密 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;//字符解密函數(shù) 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;//字符串加密函數(shù) //對字符串加密(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;//字符串解密函數(shù) //對字符串解密(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;//應(yīng)該是該字符串 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;
|