delphi利用线程注入技术实现刷新流量


本文整理自网络,侵删。

 

用API函数ShellExecute,指定其执行句柄是Explorer.exe,源代码如下:

procedure Runit;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
eProcess:THandle;
pProcess:Thandle;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
//showmessage(FProcessEntry32.szExeFile);
if Uppercase(FProcessEntry32.szExeFile) = 'EXPLORER.EXE' then
begin
eProcess:= FProcessEntry32.th32ProcessID;
pProcess:= FProcessEntry32.th32ParentProcessID ;
//showmessage('我的电脑主进程ID是:'+inttostr(eProcess)+' 其父进程ID是:'+inttostr(pProcess));
ShellExecute(eProcess,'open', 'C:\abc.exe', nil, nil, SW_ShowNormal);
//模拟父进程去运行指定文件.
exit;
end;
ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
CloseHandle (FSnapshotHandle);
end;

很可惜,这段代码居然不起作用,还是运行时两者同时被关掉。郁闷。高手指点 ~~
天无绝人之路,经过某牛人的一点小小启发,想到之前写过关于无进程dll的注入运行技术(典型的病毒/木马技术),注入到EXPLORER.EXE再运行《刷新》不就相当于合法运行了吗?突如其来的这个思路让人兴奋不已!!

经过一番处理,源代码出来了,毫无疑问地成功解决了这问题。也证实了我之前的推断:《刷新》软件在运行时会检测其父进程的技术。看来也不怎么样 ~~~ -_-~~

// +++++++++++++ 源代码开始 +++++++++++++++++++

Program BEYOND;

{$IMAGEBASE $13140000} //这行不要忘了,指定内存映像基址;否则无法注入成功.
uses Windows, shellapi;

function Main(dwEntryPoint: Pointer): longword; stdcall; //关键代码,即运行《刷新》软件.
begin
ShellExecute(0, 'open', 'shua.exe', nil, nil, SW_ShowNormal);
end;

procedure Inject(ProcessHandle: longword; EntryPoint: Pointer);
var
Module, NewModule: Pointer;
Size, BytesWritten, TID: longword;
begin
Module := Pointer(GetModuleHandle(nil));
Size := PImageOptionalHeader(Pointer(integer(Module) + PImageDosHeader(Module)._lfanew + SizeOf(dword) + SizeOf(TImageFileHeader))).SizeOfImage;
VirtualFreeEx(ProcessHandle, Module, 0, MEM_RELEASE);
NewModule := VirtualAllocEx(ProcessHandle, Module, Size, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(ProcessHandle, NewModule, Module, Size, BytesWritten);
CreateRemoteThread(ProcessHandle, nil, 0, EntryPoint, Module, 0, TID);
end;
var
ProcessHandle, PID: longword;
begin
GetWindowThreadProcessId(FindWindow('Shell_TrayWnd', nil), @PID); //获取“我的电脑"(EXPLORER.exe )的PID
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID); //打开进程
Inject(ProcessHandle, @Main); //插入代码,
CloseHandle(ProcessHandle); //关闭线程句柄end.

// +++++++++++++ 源代码结束 +++++++++++++++++++

到此,突然感到“线程注入”技术是如此的强大,真的是很黄,很暴力!!
如果思想有点邪门的人,把Main过程插入各种病毒或木马代码,那这就是一个可怕的程序了。比如插入下载指定网页的程序并在后台运行,它便成了一个木马下载者(网上多得是)。更有甚者,可以考虑把Main过程封装在一个dll中,这就是典型的“无进程”dll插入技术,其实已经广泛被应用于木马和病毒技术当中,杀人于无声 ~~~

相关阅读 >>

Delphi tadoquery 中文使用说明

isnumeric 判断字符串是否为数字

Delphi 如何判断一个exe文件是否运行

Delphi获取dos命令行输出函数 运行cmd命令并获取结果【方法2】

Delphi is 与 as 运算符举例

Delphi 实现产品编号批量生成简单算法

pascal 语言中的关键字及保留字

Delphi 文件名变小写的函数

Delphi ascii 码对照表

Delphi 动态创建组件,单个创建、单个销毁

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...