一软件的DLL加载到IE里!AU3怎么把这个DLL御载!怎样卸载进程模块 有图
本帖最后由 风雨网络 于 2009-12-30 04:03 编辑一软件的DLL加载到IE里!AU3怎么把这个DLL御载!有图
传上查看进程模块的软件 XueTr 0.26 :face (31): 我借贴请教,你用的是什么软件看的 直接关闭那个EXE不行吗? 这个程序不能关闭的! 关闭了会有人找麻烦的! 你还是帮忙看下有什么办法把这个DLL御载了 这个程序不能关闭的! 关闭了会有人找麻烦的! 你还是帮忙看下有什么办法把这个DLL御载了
风雨网络 发表于 2009-12-29 10:45 http://www.autoitx.com/images/common/back.gif
啥叫有人会找麻烦 DLL注入到IE了? 本帖最后由 landays 于 2009-12-29 17:22 编辑
楼主应该把标题改为 怎样卸载进程模块
这方面的资料我在论坛里翻了很多帖子都找不到相关内容
希望有高手能帮忙看看
另外楼主用的软件应该是 Wsyscheck.exe 本帖最后由 pusofalse 于 2009-12-30 02:28 编辑
思路:
1、EnumProcessModules枚举目标进程打开的所有模块句柄。
2、GetModuleFileNameEx获取模块句柄所对应的Dll文件名称,找到要卸载的Dll。
3、CreateRemoteThread嵌入一个线程到目标进程,代替自己的进程调用FreeLibrary函数关闭目标进程自身加载的模块。#include <LocalSecurityAuthority.au3>
$iProcessID = ProcessExists("iexplore.exe")
$sModule = "C:\Watcher\APIHook_Dll.dll"
_UnloadDll($iProcessID, $sModule) ; Returns True if succeeds.
Func _UnloadDll($iProcessID, $sModule)
Local $aModule, $hModule, $pFreeLibrary, $hThread, $hProcess
Local $hToken, $aPriv = [[$SE_DEBUG_NAME, 2]], $iFlags
$hToken = _OpenProcessToken(-1)
_AdjustTokenPrivileges($hToken, $aPriv)
_LsaCloseHandle($hToken)
$hProcess = _OpenProcess($iProcessID)
If $hProcess < 1 Then Return SetError(@error, 0, 0)
$sModule = _GetFullPathName($sModule)
$hModule = _GetModuleHandle("Kernel32.dll")
$pFreeLibrary = _GetProcAddress($hModule, "FreeLibrary")
$aModule = _EnumProcessModules($hProcess)
For $i = 1 To $aModule
If $aModule[$i] <> $sModule Then ContinueLoop
$hThread = _CreateRemoteThread($hProcess, 0, 0, $pFreeLibrary, $aModule[$i], 0)
If @extended Then $iFlags = 1
_LsaCloseHandle($hThread)
Next
$aModule = _EnumProcessModules($hProcess)
For $i = 1 To $aModule
If $aModule[$i] = $sModule Then $iFlags = 0
Next
Return SetError(0, _LsaCloseHandle($hProcess), $iFlags)
EndFunc ;==>_UnloadDll
Func _GetFullPathName($sFile)
Local $iResult
$iResult = DllCall("Kernel32.dll", "int", "GetFullPathName", _
"str", $sFile, "dword", 260, "str", "", "str", "")
Return $iResult
EndFunc ;==>_GetFullPathName
Func _GetModuleHandle($sModule)
Local $iResult
$iResult = DllCall("Kernel32.dll", "long", "GetModuleHandle", "str", $sModule)
Return SetError(_GetLastError(), 0, $iResult)
EndFunc ;==>_GetModuleHandle
Func _EnumProcessModules($hProcess)
Local $pBuffer, $tBuffer, $iResult, $aResult
$iResult = DllCall("Psapi.dll", "int", "EnumProcessModules", "hWnd", $hProcess, _
"ptr", 0, "dword", 0, "dword*", 0)
$pBuffer = _HeapAlloc($iResult)
$iResult = DllCall("Psapi.dll", "int", "EnumProcessModules", "hWnd", $hProcess, _
"ptr", $pBuffer, "dword", $iResult, "dword*", 0)
$tBuffer = DllStructCreate("hWnd Modules[" & ($iResult / 4) & "]", $pBuffer)
$aResult = $iResult / 4
Redim $aResult[$aResult + 1]
For $i = 1 To $aResult
$aResult[$i] = DllStructGetData($tBuffer, "Modules", $i)
$aResult[$i] = _GetModuleFileNameEx($hProcess, $aResult[$i])
Next
_HeapFree($pBuffer)
Return SetError(0, _FreeVariable($tBuffer), $aResult)
EndFunc ;==>_EnumProcessModules
Func _GetModuleFileNameEx($hProcess, $hModule)
Local $iResult
$iResult = DllCall("Psapi.dll", "dword", "GetModuleFileNameEx", "hWnd", $hProcess, _
"hWnd", $hModule, "str", "", "dword", 260)
Return $iResult
EndFunc ;==>_GetModuleFileNameEx
Func _GetProcAddress($hModule, $sProcdure)
Local $iResult
$iResult = DllCall("Kernel32.dll", "hWnd", "GetProcAddress", "hWnd", $hModule, "str", $sProcdure)
Return $iResult
EndFunc ;==>_GetProcAddress
Func _CreateRemoteThread($hProcess, $pThreadSecur, $iStackSize, $pStartAddr, $pParam, $iFlags)
Local $iResult
$iResult = DllCall("Kernel32.dll", "hWnd", "CreateRemoteThread", "hWnd", $hProcess, _
"ptr", $pThreadSecur, "dword", $iStackSize, "ptr", $pStartAddr, _
"ptr", $pParam, "dword", $iFlags, "dword*", 0)
Return SetError(_GetLastError(), $iResult, $iResult)
EndFunc ;==>_CreateRemoteThread
LocalSecurityAuthority.au3 - http://www.autoitx.com/forum.php?mod=viewthread&tid=7080&extra=page%3D1 看不明白你的思路。 思路:
1、EnumProcessModules枚举目标进程打开的所有模块句柄。
2、GetModuleFileNameEx获取模块句柄所对 ...
pusofalse 发表于 2009-12-29 18:24 http://www.autoitx.com/images/common/back.gif
就是替换这个dll吧? 回复 10# 316428696
不是替换,而是直接从模块链表中删除。关于替换的代码,请搜索“替换 进程 模块”。 8楼的代码好,要学习学习 清除时会报错的,XP SP3
页:
[1]