找回密码
 加入
搜索
查看: 3847|回复: 12

一软件的DLL加载到IE里!AU3怎么把这个DLL御载!怎样卸载进程模块 有图

 火.. [复制链接]
发表于 2009-12-29 08:40:28 | 显示全部楼层 |阅读模式
本帖最后由 风雨网络 于 2009-12-30 04:03 编辑

一软件的DLL加载到IE里!AU3怎么把这个DLL御载!有图



传上查看进程模块的软件 XueTr 0.26  

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2009-12-29 08:47:24 | 显示全部楼层
我借贴请教,你用的是什么软件看的
发表于 2009-12-29 10:42:36 | 显示全部楼层
直接关闭那个EXE不行吗?
 楼主| 发表于 2009-12-29 10:45:52 | 显示全部楼层
这个程序不能关闭的! 关闭了会有人找麻烦的! 你还是帮忙看下有什么办法把这个DLL御载了
发表于 2009-12-29 13:53:57 | 显示全部楼层
这个程序不能关闭的! 关闭了会有人找麻烦的! 你还是帮忙看下有什么办法把这个DLL御载了
风雨网络 发表于 2009-12-29 10:45



    啥叫有人会找麻烦
发表于 2009-12-29 15:33:54 | 显示全部楼层
DLL注入到IE了?
发表于 2009-12-29 17:21:36 | 显示全部楼层
本帖最后由 landays 于 2009-12-29 17:22 编辑

楼主应该把标题改为 怎样卸载进程模块
这方面的资料我在论坛里翻了很多帖子都找不到相关内容
希望有高手能帮忙看看

另外楼主用的软件应该是 Wsyscheck.exe
发表于 2009-12-29 18:24:16 | 显示全部楼层
本帖最后由 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[1][2] = [[$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[0][0]
                If $aModule[$i][1] <> $sModule Then ContinueLoop
                $hThread = _CreateRemoteThread($hProcess, 0, 0, $pFreeLibrary, $aModule[$i][0], 0)
                If @extended Then $iFlags = 1
                _LsaCloseHandle($hThread)
        Next
        $aModule = _EnumProcessModules($hProcess)
        For $i = 1 To $aModule[0][0]
                If $aModule[$i][1] = $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[3]
EndFunc        ;==>_GetFullPathName

Func _GetModuleHandle($sModule)
        Local $iResult
        $iResult = DllCall("Kernel32.dll", "long", "GetModuleHandle", "str", $sModule)
        Return SetError(_GetLastError(), 0, $iResult[0])
EndFunc        ;==>_GetModuleHandle

Func _EnumProcessModules($hProcess)
        Local $pBuffer, $tBuffer, $iResult, $aResult[1][2]

        $iResult = DllCall("Psapi.dll", "int", "EnumProcessModules", "hWnd", $hProcess, _
                        "ptr", 0, "dword", 0, "dword*", 0)
        $pBuffer = _HeapAlloc($iResult[4])
        $iResult = DllCall("Psapi.dll", "int", "EnumProcessModules", "hWnd", $hProcess, _
                        "ptr", $pBuffer, "dword", $iResult[4], "dword*", 0)
        $tBuffer = DllStructCreate("hWnd Modules[" & ($iResult[4] / 4) & "]", $pBuffer)
        $aResult[0][0] = $iResult[4] / 4
        Redim $aResult[$aResult[0][0] + 1][2]
        For $i = 1 To $aResult[0][0]
                $aResult[$i][0] = DllStructGetData($tBuffer, "Modules", $i)
                $aResult[$i][1] = _GetModuleFileNameEx($hProcess, $aResult[$i][0])
        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[3]
EndFunc        ;==>_GetModuleFileNameEx

Func _GetProcAddress($hModule, $sProcdure)
        Local $iResult
        $iResult = DllCall("Kernel32.dll", "hWnd", "GetProcAddress", "hWnd", $hModule, "str", $sProcdure)
        Return $iResult[0]
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[7], $iResult[0])
EndFunc        ;==>_CreateRemoteThread
LocalSecurityAuthority.au3 - http://www.autoitx.com/forum.php ... &extra=page%3D1

评分

参与人数 2金钱 +40 收起 理由
风雨网络 + 20
afan + 20

查看全部评分

发表于 2010-1-5 10:33:32 | 显示全部楼层
看不明白你的思路。
发表于 2010-1-31 19:57:42 | 显示全部楼层
思路:
1、EnumProcessModules枚举目标进程打开的所有模块句柄。
2、GetModuleFileNameEx获取模块句柄所对 ...
pusofalse 发表于 2009-12-29 18:24



    就是替换这个dll吧?
发表于 2010-1-31 20:08:53 | 显示全部楼层
回复 10# 316428696


    不是替换,而是直接从模块链表中删除。关于替换的代码,请搜索“替换 进程 模块”。
发表于 2011-3-27 11:31:16 | 显示全部楼层
8楼的代码好,要学习学习
发表于 2012-1-26 03:09:25 | 显示全部楼层
清除时会报错的,XP SP3
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-30 23:24 , Processed in 0.108683 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表