能力值:
( LV12,RANK:1010 )
|
-
-
2 楼
据偶知道的,从SSDT好像不能知晓是谁调用的,不过跳出这个小圈圈,可以看看filemon是怎么做的~
另外监视模块可以调用PsSetLoadImageNotifyRoutine,不过MS和这个没什么关系呀~
R3层挂个全局HOOK, 谁调用就注入到谁的进程里面.然后得到进程相关信息...
|
能力值:
( LV8,RANK:130 )
|
-
-
3 楼
psgetcurrentprocess 获得调用ntcreatefile的进程 然后自己分析调用堆栈找到call ntdll!ntcreatefile的地址,然后拿着这个地址在进程加载的dll表中找到相应的dll
|
能力值:
( LV12,RANK:1010 )
|
-
-
4 楼
感动
炉子牛就是牛啊
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
其实我和炉子兄的想法是一样的,但无奈水平有限,不知道该怎样分析堆栈然后拿这个地址在加载的DLL表中找
我现在退一步,已知有一个线程是123.dll创建的,能否根据这个线程ID来找到123.dll呢?我看Process Explorer就实现了这样的功能(在用户模式实现也可以)
|
能力值:
( LV8,RANK:130 )
|
-
-
6 楼
psgetchrrentthread
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
我找到一个方法,根据线程ID
procedure GetModuleByTID(PID,TID:Cardinal;szModuleName:PWideChar);
var
hProcess,hThread:THandle;
StartAddr,tmp:DWORD;
szNameTmp:array [0..FILENAMESIZE - 1] of WideChar;
i:Byte;
const
THREAD_QUERY_INFORMATION = $40;
begin
hThread := OpenThread(THREAD_QUERY_INFORMATION,False,TID);
ZwQueryInformationThread(hThread,ThreadQuerySetWin32StartAddress,@StartAddr,
SizeOf(DWORD),@tmp);
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION,False,PID);
GetMappedFileNameW(hProcess,Pointer(StartAddr),szModuleName,FILENAMESIZE);
{……}
CloseHandle(hThread);
CloseHandle(hProcess);
end;
|
能力值:
( LV8,RANK:130 )
|
-
-
8 楼
GetMappedFileNameW(hProcess,Pointer(StartAddr),szModuleName,FILENAMESIZE);
不知道GetMappedFileNameW能得到类似于dll1.dll+0x2345这样的StartAddress不。
既然根据tid,那就PsGetCurrentThreadId吧
|
|
|