[转载]Windows Hook 易核心编程<2>远程线程注入 下

现在主程序已经完成了它的任务,现在来看看我们执行的核心,HookDLL.dll的代码:


.版本 2

.全局变量 TheNodeP, 整数型
.全局变量 hhook, 整数型, 公开
.全局变量 DLL, Main

.程序集 HOOK程序集
.程序集变量 hMod, 整数型
.程序集变量 lpProc, 子程序指针


.程序集 DLL程序集
.版本 2
.子程序 _启动子程序, 整数型, , 请在本子程序中放置动态链接库初始化代码

复制共享数据 ()  '初始化代码,只有在程序第一次加载DLL时才被执行
_临时子程序 ()
返回 (0)

'先看看钩子回调函数:

.子程序 GetMsgProc, 整数型, 公开, 钩子回调函数
.参数 code, 整数型
.参数 wParam, 整数型
.参数 lParam, 整数型
.局部变量 lpThreadA, SECURITY_ATTRIBUTES
.局部变量 LibraryH, 整数型
.局部变量 ThreadPt, 整数型
.局部变量 ThreadID, 整数型

' 截获到消息,开始执行下面的自定以代码(回调函数)
 复制共享数据 () 
 .如果真 (TheNodeP ≠ 0 且 pnode.ExplorerID ≠ 0 且 api_GetCurrentProcessId () =

pnode.ExplorerID)  ' 是资源管理器
    .如果真 (倒找文本 (MainPath, “.dll”, , 真) ≠ -1)  ' DLL路径是否正确
        LibraryH = api_LoadLibraryA (MainPath)  ' 装载动态链接库
    .如果真结束
    .如果真 (LibraryH ≠ 0)
        ThreadPt = 到整数 (api_GetProcAddress (LibraryH, “ThreadPro”))  ' 定位线程函数
        .如果真 (ThreadPt ≠ 0)
            api_CreateThread (lpThreadA, 0, ThreadPt, 0, 0, ThreadID)  ' 创建新线程
        .如果真结束

    .如果真结束

.如果真结束
返回 (api_CallNextHookEx (hhook, code, wParam, lParam))  ' 钩子循环

再看看子程序:复制共享数据

.子程序 复制共享数据, 逻辑型
.局部变量 i, 整数型
.局部变量 MainPath, 文本型
.局部变量 FileMapH, 整数型

FileMapH = api_OpenFileMapping (#FILE_MAP_ALL_ACCESS, 0, “HookExplorer8Mazi”)
.如果真 (FileMapH = 0)
    输出调试文本 (“打开内存映射文件出错!”)
    返回 (假)
.如果真结束
TheNodeP = api_MapViewOfFile (FileMapH, #FILE_MAP_ALL_ACCESS, 0, 0, 0)
.如果真 (TheNodeP = 0)
    api_CloseHandle (FileMapH)
    输出调试文本 (“映射到本进程空间出错!”)
    返回 (假)
.如果真结束

'取回共享数据
DLL.ExplorerID = 取字节集数据 (指针到字节集 (TheNodeP, 4), 3, )'整数型数据尺寸大小是4
DLL.MainThread = 取字节集数据 (指针到字节集 (TheNodeP + 4, 4), 3, )   '+4
DLL.MainPath = 指针到文本 (TheNodeP + 8)   '+8
API_UnmapViewOfFile (TheNodeP)  ' 关闭内存映射
api_CloseHandle (FileMapH)  ' 关闭文件映射对象
返回 (真)

 

'钩子回调函数完成,现在开始写待插线程代码,这里实现写文字到屏幕的功能

.版本 2

.子程序 ThreadPro, , 公开, 待插线程代码
.局部变量 Count, 整数型
.局部变量 theMsg, MSG
.局部变量 FileMap, 整数型
.局部变量 nil, SECURITY_ATTRIBUTES
.局部变量 HotKeyID, 整数型

api_PostThreadMessage (DLL.MainThread, #WM_QUIT, 0, 0)
FileMap = api_OpenFileMapping (#FILE_MAP_ALL_ACCESS, 0, “hacker0058Explorer8Mazi”)  ' 禁

止重复运行
api_CloseHandle (FileMap)
.如果真 (FileMap = 0)
    FileMap = api_CreateFileMapping (-1, nil, 4, 0, 2, “hacker0058Explorer8Mazi”)
    Count = 0
    HotKeyID =GlobalAddAtom(“hacker0058andALT+L”) ' 申请全局原子
    RegisterHotKey (0, HotKeyID, 1, #L键)           '注册热键Alt+L
    .判断循环首 (api_PeekMessage (theMsg, 0, 0, 0, #PM_REMOVE) = 0 且 取反 (theMsg.message

= #WM_HOTKEY) 或 theMsg.message = #WM_QUIT)
        WriteScreen (“  ” + Int2Hex (Count) + “  [The Thread is From ” + 取执行文件

名 () + “ and Alt+L to Exit  ”)
        Count = Count + 1
        延时 (500)
    .判断循环尾 ()
    api_CloseHandle (FileMap)
    UnregisterHotKey(0, HotKeyID)   '撤销热键Alt+L
    DeleteAtom (HotKeyID)       '释放全局原子


.子程序 WriteScreen, , , 写文字到屏幕
.参数 s, 文本型
.局部变量 hScreenDC, 整数型

hScreenDC = 取设备场景_ (0)
api_TextOut (hScreenDC, 0, 0, s, 取文本长度 (s))  '写文字到屏幕
api_ReleaseDC (0, hScreenDC)  '撤消写文字到屏幕


.子程序 Int2Hex, 文本型, , 数值转字符串
.参数 v, 整数型
.局部变量 i, 整数型
.局部变量 a, 文本型
.局部变量 b, 文本型

b = 取十六进制文本 (v) '
.计次循环首 (8 - 取文本长度 (b), i)
    a = a + “0”
.计次循环尾 ()
返回 (“$” + a + b)


.子程序 GetMsgHookOff, 逻辑型, 公开, 关闭全局消息钩子

  返回 (api_UnhookWindowsHookEx (hhook))


.子程序 GetMsgHookOn, 整数型, 公开, 安装全局消息钩子

hMod = api_LoadLibraryA (MainPath) '加载DLL,返回模块地址

lpProc = api_GetProcAddress (hMod, “GetMsgProc”) 'DLL中钩子回调函数地址


hhook = api_SetWindowsHookExA (#WH_GETMESSAGE, lpProc, hMod, 0) '安装钩子

返回 (hMod)

 


好了,整个框架就这样了,由于篇幅原因,具体的不再细说了.附件里有完整的易程序源码,具体细节大家可

以参阅,源码在Windows xp+sp2 易4.02中测试通过.

下期预告:

下一期我们将介绍API Hook技术,API Hook技术应用广泛,常用于屏幕取词,网络防火墙,病毒木马,加壳
软件,串口红外通讯,游戏外挂,internet通信等领域.API HOOK的中文意思就是钩住API,对API进行预处理

,先执行我们的函数,例如我们用API Hook技挂接ExitWindowsEx API函数,使关机失效等等......

敬请期待

end

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值