关于线程插入函数如何用的问题
2008-09-23 09:31
295 查看
关于线程插入函数如何用的问题 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061207182656107.html
我现在掌握了不用dll也能代码注入的技术
就是有一个inject函数 把要插入进程的句柄和要插入的函数名前加一个"@"
当作参数传递过去就行了,如下:
procedure Inject(ProcessHandle: longword; EntryPoint: pointer);
本来是很好用的
但是我这里有一份带窗体的程序的代码 想让它插到某个pid里
原来的dpr文件是这样的:
program server;
uses
Forms,
mainserve in 'mainserve.pas' {ServerForm};
begin
Application.Initialize;
Application.CreateForm(TServerForm, ServerForm);
Application.Run;
end.
我改成了:
program server;
uses
Forms,windows,
mainserve in 'mainserve.pas' {ServerForm};
procedure main();
begin
Application.Initialize;
Application.CreateForm(TServerForm, ServerForm);
Application.Run;
end;
var
ProcessHandle, PID: longword;
begin
PID:=1252;//当前我运行的某个IE的PID
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);//打开进程
Inject(ProcessHandle, @Main);//插入代码
CloseHandle(ProcessHandle);//关闭线程句柄
end.
那个mainserve.pas没作改动
编译没错 一运行就出错说 某个内存引用的某个内存不能为writen 结果IE就关了
我的改动并没错呀??
我怀疑这个错误和程序里有窗体有关 但是用到了timer 是不是就不能去掉窗体??
我的怀疑正确吗????
说明一下 我修改时已把inject的定义加上了 只是上面的代码没体现出来
不用DLL 注入 的方法我也想知道哦..
aphex的不用DLL远程注入是
GetWindowThreadProcessId(FindWindow('Shell_TrayWnd', nil), @Pid);
//获取Exp进程的PID码,Shell_TrayWnd为类名,相关的需用SPY++来查看
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, Pid); //打开进程
hModule := Pointer(GetModuleHandle(nil));
//这里得到的值为一个返回一个指针型变量,指向内容包括自身映像的基址和长度
Extent := PImageOptionalHeader(Pointer(integer(hModule) + PImageDosHeader(hModule)._lfanew + SizeOf(dword) + SizeOf(TImageFileHeader))).SizeOfImage;
//得到内存映像的长度
VirtualFreeEx(ProcessHandle, hModule, 0, MEM_RELEASE);
//在Exp进程的内存范围内分配一个足够长度的内存
hModule_News := VirtualAllocEx(ProcessHandle, hModule, Extent, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
//确定起始基址和内存映像基址的位置
WriteProcessMemory(ProcessHandle, hModule_News, hModule, Extent, Size);
//确定上面各项数据后,这里开始进行操作
CreateRemoteThread(ProcessHandle, nil, 0, @Download, hModule, 0, ThreadId);
//建立远程线程,至此注入过程完成
CloseHandle(ProcessHandle);
偶把我的程序定义成个过程 然后用他这样的方法去注入. 结果跟LX一样...
高手详细说下吧..
楼上的是同道中人
实际上我们插入一个小过程可以成功 哪怕这个过程调用其它自定义的过程
但是把一个程序的原代码里dpr文件里的主程序定义为过程 再插入这个过程就会报错
因为什么??
请高手现身
关注
请高手献身
请高手献身
人工置顶
还没有人来么?
我现在也有段代码 他定义的过程注入没问题..我自己写个过程 注入都出错. 郁闷
人工置顶
人工置顶
http://www.delphi2007.net/DelphiAPI/html/delphi_20061207182656107.html
我现在掌握了不用dll也能代码注入的技术
就是有一个inject函数 把要插入进程的句柄和要插入的函数名前加一个"@"
当作参数传递过去就行了,如下:
procedure Inject(ProcessHandle: longword; EntryPoint: pointer);
本来是很好用的
但是我这里有一份带窗体的程序的代码 想让它插到某个pid里
原来的dpr文件是这样的:
program server;
uses
Forms,
mainserve in 'mainserve.pas' {ServerForm};
begin
Application.Initialize;
Application.CreateForm(TServerForm, ServerForm);
Application.Run;
end.
我改成了:
program server;
uses
Forms,windows,
mainserve in 'mainserve.pas' {ServerForm};
procedure main();
begin
Application.Initialize;
Application.CreateForm(TServerForm, ServerForm);
Application.Run;
end;
var
ProcessHandle, PID: longword;
begin
PID:=1252;//当前我运行的某个IE的PID
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, PID);//打开进程
Inject(ProcessHandle, @Main);//插入代码
CloseHandle(ProcessHandle);//关闭线程句柄
end.
那个mainserve.pas没作改动
编译没错 一运行就出错说 某个内存引用的某个内存不能为writen 结果IE就关了
我的改动并没错呀??
我怀疑这个错误和程序里有窗体有关 但是用到了timer 是不是就不能去掉窗体??
我的怀疑正确吗????
说明一下 我修改时已把inject的定义加上了 只是上面的代码没体现出来
不用DLL 注入 的方法我也想知道哦..
aphex的不用DLL远程注入是
GetWindowThreadProcessId(FindWindow('Shell_TrayWnd', nil), @Pid);
//获取Exp进程的PID码,Shell_TrayWnd为类名,相关的需用SPY++来查看
ProcessHandle := OpenProcess(PROCESS_ALL_ACCESS, False, Pid); //打开进程
hModule := Pointer(GetModuleHandle(nil));
//这里得到的值为一个返回一个指针型变量,指向内容包括自身映像的基址和长度
Extent := PImageOptionalHeader(Pointer(integer(hModule) + PImageDosHeader(hModule)._lfanew + SizeOf(dword) + SizeOf(TImageFileHeader))).SizeOfImage;
//得到内存映像的长度
VirtualFreeEx(ProcessHandle, hModule, 0, MEM_RELEASE);
//在Exp进程的内存范围内分配一个足够长度的内存
hModule_News := VirtualAllocEx(ProcessHandle, hModule, Extent, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
//确定起始基址和内存映像基址的位置
WriteProcessMemory(ProcessHandle, hModule_News, hModule, Extent, Size);
//确定上面各项数据后,这里开始进行操作
CreateRemoteThread(ProcessHandle, nil, 0, @Download, hModule, 0, ThreadId);
//建立远程线程,至此注入过程完成
CloseHandle(ProcessHandle);
偶把我的程序定义成个过程 然后用他这样的方法去注入. 结果跟LX一样...
高手详细说下吧..
楼上的是同道中人
实际上我们插入一个小过程可以成功 哪怕这个过程调用其它自定义的过程
但是把一个程序的原代码里dpr文件里的主程序定义为过程 再插入这个过程就会报错
因为什么??
请高手现身
关注
请高手献身
请高手献身
人工置顶
还没有人来么?
我现在也有段代码 他定义的过程注入没问题..我自己写个过程 注入都出错. 郁闷
人工置顶
人工置顶
相关文章推荐
- 关于CCS中如何设置printf函数的问题
- 关于多个异步任务线程如何取消上一个线程的问题
- 关于C++中posix pthread线程函数在类中封装的问题
- 修补bug之路——关于线程执行函数全局的问题
- 关于jquery中封装函数如何传递当前元素的问题
- 关于如何在不使用虚函数的情况下父类调用子类成员函数的问题
- 关于C++中posix pthread线程函数在类中封装的问题
- python中关于小数点后面的数四舍五入问题解决的几个函数供大家参考,现在问题是如何动态输入小数点后多少位,比如12.3000这样的
- 关于单链表插入函数设计问题/c&c++/code/
- 关于动态存储分配函数的调用,在已经过排序的数组中查找及删除内容的操作,余数的分析,删除字符数组中的空格,对链表的逆置,在源字符串中查找子字符串的个数,函数指针以及函数的调用,循环赋值带来的问题以及插入
- 关于在C/C++语言中,函数如何返回数组,数组如何作为参数传递以及返回数组的函数该如何调用问题的总结
- qt- thread —— 关于槽函数所在线程的问题
- 关于Qt中使用线程的时候函数具体在哪个线程中运行的问题
- 关于wf中传参的问题:如何在workflow实例钝化后重新load时传参!
- 关于python函数闭包问题
- 关于Android studio创建时继承ActionBarActivity 如何修改的问题
- 关于Foreach是如何实现的问题
- 关于js中小问题与一些简单函数的用法
- primeFaces关于filter()函数问题
- 关于hook设置函数如何支持多核CPU的一个说明