导入表内注入代码(二)
2007-03-17 21:59:50 来源:WEB开发网核心提示: 现在我想要论述更为深入的主题,该主题对于希望理解在Windows System上的用户级(ring-3) rootkits [7]操作的人们是会特别感兴趣的,导入表内注入代码(二)(4),首先也是最终的问题,注入一个运行时进程的导入表是怎样做到的,9. HANDLE hProcess =
现在我想要论述更为深入的主题。该主题对于希望理解在Windows System上的用户级(ring-3) rootkits [7]操作的人们是会特别感兴趣的。首先也是最终的问题,注入一个运行时进程的导入表是怎样做到的,该节将回答这个问题。我们想要注入一个运行时进程并修改之。你是否记得:在我得以前的文章[2],我创建了一个Windows Spy来捕获Windows Class的属性并在运行时修改他们。这一次,我将走近改写内存和从外界重定向导入表。
1. 通过使用WindowFromPoint()我们能获得一个特定点的窗体句柄,GetWindowThreadProcessId()帮助我们知道该窗体句柄的进程ID和线程ID。
2. POINT point;
3. HWND hWindowUnderTheMouse = WindowFromPoint(point);
4. ...
5. DWORD dwProcessId;
6. DWORD dwThreadId;
7. dwThreadId=GetWindowThreadProcessId(hSeekedWindow, &dwProcessId);
8. 进程和线程的句柄由OpenProcess()和OpenThread()获得。但是在Windows 98中没有OpenThread()。不要担心,用EliCZ’找到RT,一个在Windows 98中模拟OpenThread(), CreateRemoteThread(),VirtualAllocEX(), 和 VirtualFreeEx()的库。9. HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, dwProcessId );
10. HANDLE hThread = OpenThread( THREAD_ALL_ACCESS, FALSE, dwThreadId);
11. 为了开始操作进程的内存,我们应该首先通过挂起主线程冻结进程。12. SuspendThread(hThread);
13. Thread Environment Block (TEB)位置可以通过我们没有权限访问的FS:[18]获得!因此GetThreadContext() 和 GetThreadSelectorEntry()帮助我们来了解FS段的基值。
更多精彩
赞助商链接