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