利用NtUnmapViewOfSection强制卸载模块
2007-09-14 10:19
543 查看
确实可以卸载指定进程指定位置的模块,但有几个问题:
[1] PEB的模块列表中还存在该模块的记录,大部分模块枚举函数都是枚举这个列表
[2] 可能会出现访问异常
看来RING3下是不可能做到强制卸载模块的完美实现,要进ring0才行。下面是测试代码
typedef ULONG (WINAPI *PFNNtUnmapViewOfSection)( IN HANDLE ProcessHandle,IN PVOID BaseAddress );
BOOL UnmapViewOfModule ( DWORD dwProcessId, LPVOID lpBaseAddr )
...{
HMODULE hModule = GetModuleHandle ( L"ntdll.dll" ) ;
if ( hModule == NULL )
hModule = LoadLibrary ( L"ntdll.dll" ) ;
PFNNtUnmapViewOfSection pfnNtUnmapViewOfSection = (PFNNtUnmapViewOfSection)GetProcAddress ( hModule, "NtUnmapViewOfSection" ) ;
HANDLE hProcess = OpenProcess ( PROCESS_ALL_ACCESS, TRUE, dwProcessId ) ;
ULONG ret = pfnNtUnmapViewOfSection ( hProcess, lpBaseAddr ) ;
CloseHandle ( hProcess ) ;
return ret ? false : true ;
}
[1] PEB的模块列表中还存在该模块的记录,大部分模块枚举函数都是枚举这个列表
[2] 可能会出现访问异常
看来RING3下是不可能做到强制卸载模块的完美实现,要进ring0才行。下面是测试代码
typedef ULONG (WINAPI *PFNNtUnmapViewOfSection)( IN HANDLE ProcessHandle,IN PVOID BaseAddress );
BOOL UnmapViewOfModule ( DWORD dwProcessId, LPVOID lpBaseAddr )
...{
HMODULE hModule = GetModuleHandle ( L"ntdll.dll" ) ;
if ( hModule == NULL )
hModule = LoadLibrary ( L"ntdll.dll" ) ;
PFNNtUnmapViewOfSection pfnNtUnmapViewOfSection = (PFNNtUnmapViewOfSection)GetProcAddress ( hModule, "NtUnmapViewOfSection" ) ;
HANDLE hProcess = OpenProcess ( PROCESS_ALL_ACCESS, TRUE, dwProcessId ) ;
ULONG ret = pfnNtUnmapViewOfSection ( hProcess, lpBaseAddr ) ;
CloseHandle ( hProcess ) ;
return ret ? false : true ;
}
相关文章推荐
- the item width must be less than the width of the UICollectionView minus the section insets left and
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- MmCreateSection/MmMapViewOfSection个人注释及理解(一)
- 【iOS】Ambiguous reference to member 'tableView(_:numberOfRowsInSection:)'
- Linux强制卸载内核模块(由于驱动异常导致rmmod不能卸载)
- linux3.x 内核如何强制卸载模块?
- python 利用pip 安装 卸载 更新某个模块
- Android中除了利用VideoView、Mediaplayer播放视频文件外,还可以用发送Intent来调用视频播放模块。
- 删除tableview的section遇到crash:The number of rows contained in an existing section after the update
- 强制卸载目标进程模块
- NtMapViewOfSection注入
- [YFHomeViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x79
- 0.ring3-NtMapViewOfSection注入
- [转]Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- ring3-NtMapViewOfSection注入
- Windows环境下利用“共享内存”实现进程间通信的C/C++代码---利用CreateFileMapping和MapViewOfFile
- linux3.x 内核如何强制卸载模块?
- tableView numberOfRowsInSection:(NSInteger)section;不执行
- MDI程序中反射生成菜单并与权限控制的结合(利用XML将模块组件装配与卸载)