VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 6328|回复: 13

[经验技巧] 【源码】用Basic语言实现Ring 3 Inline Hook

[复制链接]
 楼主| 发表于 2009-11-21 18:00:22 | 显示全部楼层 |阅读模式
本帖最后由 hovidelphic 于 2009-11-21 18:26 编辑

这是《黑客防线》2009年11期文章《Ring3下全局Inline Hook实现HIPS和Rootkit功能》的源码。
需要安装VB 6和PowerBasic 9。
由于《黑客防线》拥有文章的版权,所以恕我不能提供文章。
想看全文的来这里下载电子书看:http://www.ankty.com/soft/8/163/14433.html
别人盗版的不关我事。

其实bakurise的那个放血贴就有相关内容,这个是我把HOOK的内容从中分离的。
HOOK是什么我就不说了,自己搜索一下吧。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

本帖被以下淘专辑推荐:

发表于 2009-11-21 21:49:16 | 显示全部楼层
那个注入代码是reker写的吧 变量名 注释 都没变的~~~~
.......

'dll注入程序
'主窗体代码
'
'蓝色炫影  制作
'www.rekersoft.cn
'
'最后更新 2008/05/06
'您可以自由用于非商业用途。
'请保留此行版权信息,谢谢。

Public Sub Inject()
'注入子程序

Dim MySnapHandle            As Long   '存放进程快照句柄
Dim ProcessInfo             As PROCESSENTRY32
Dim MyRemoteProcessId       As Long   '目标进程pid
Dim MyDllFileName           As String 'dll文件路径
Dim MyDllFileLength         As Long   'dll文件名长度
Dim MyDllFileBuffer         As Long   '写入dll文件名的内存地址
Dim MyAddr                  As Long   '执行远程线程代码的起始地址。这里等于LoadLibraryA的地址
Dim MyReturn                As Long

MySnapHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
ProcessInfo.dwSize = Len(ProcessInfo)
'建立进程快照

If Process32First(MySnapHandle, ProcessInfo) <> 0 Then
'开始遍历进程
Do
    If InStr(ProcessInfo.szExeFile, "explorer.exe") > 0 Then
        '遍历进程,查找explorer.exe
        
        MyDllFileName = Text1.Text
        'dll文件路径
        MyDllFileLength = LenB(StrConv(MyDllFileName, vbFromUnicode)) + 1
        '这里把dll文件名从Unicode转换成Ansi,否则英文字母是2个字节。 _
         顺便说一下,学过C的应该知道字符串要以/0标志结尾,所以dll文件名长度要加上1个字节存放Chr(0)
        
        MyRemoteProcessId = OpenProcess(PROCESS_ALL_ACCESS, False, ProcessInfo.th32ProcessID)
        '得到进程的句柄
        If MyRemoteProcessId = 0 Then MsgBox "OpenProcess Error"
        
        
        MyDllFileBuffer = VirtualAllocEx(MyRemoteProcessId, 0, MyDllFileLength, MEM_COMMIT, PAGE_READWRITE)
        '在目标进程中申请分配一块空白内存区域。内存的起始地址保存在MyDllFileBuffer中。 _
         这块内存区域我们用来存放dll文件路径,并作为参数传递给LoadLibraryA。
        If MyDllFileBuffer = 0 Then MsgBox "VirtualAllocEx Error"
        
        MyReturn = WriteProcessMemory(MyRemoteProcessId, MyDllFileBuffer, ByVal (MyDllFileName), MyDllFileLength, 0)
        '在分配出来的内存区域中写入dll路径径。注意第二个参数传递的是MyDllFileBuffer的内容, _
         而不是MyDllFileBuffer的内存地址?
        If MyReturn = 0 Then MsgBox "WriteProcessMemory Error"

        MyAddr = GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA")
        '得到LoadLibraryA函数的起始地址。他的参数就是我们刚才写入的dll路径。但是LoadLibraryA本身是不知道参数在哪里的。 _
         接下来我们就用CreateRemoteThread函数告诉他参数放在哪里了?
        If MyAddr = 0 Then MsgBox "GetProcAddress Error"

        MyResult = CreateRemoteThread(MyRemoteProcessId, 0, 0, MyAddr, MyDllFileBuffer, 0, 0)
        '好了,现在用CreateRemoteThread在目标进程创建一个线程,线程起始地址指向LoadLibraryA, _
         参数就是MyDllFileBuffer中保存的dll路径?
        If MyResult = 0 Then MsgBox "error CreateRemoteThread"
        '接下来你可以使用WaitForSingleObject等待线程执行完毕。 _
         并用GetExitCodeThread得到线程的退出代码,用来判断时候正确执行了dll中的代码。
        CloseHandle MyResult
        CloseHandle MyRemoteProcessId
        '扫地工作
    End If
Loop While Process32Next(MySnapHandle, ProcessInfo) <> 0
End If

CloseHandle MySnapHandle
End Sub

Private Sub Command1_Click() '点击注入按钮
Inject '执行注入
End Sub

评分

参与人数 1人气 +1 收起 理由
hovidelphic + 1 适当做了一点改变

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2009-11-21 21:57:14 | 显示全部楼层
刚刚把杂志订了下来,估计几天后才能看到
回复 支持 反对

使用道具 举报

发表于 2009-11-21 22:56:14 | 显示全部楼层
刚刚下了杂志,我是来膜拜楼主的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-21 23:24:53 | 显示全部楼层
刚刚下了杂志,我是来膜拜楼主的
ddd589 发表于 2009-11-21 22:56


没必要膜拜我,去膜拜bakurise。
回复 支持 反对

使用道具 举报

发表于 2009-11-22 01:29:59 | 显示全部楼层
这都行啊…那我抽空写篇文章也投杂志…我们学校有规定,学术发表,国家级的一篇加10学分
回复 支持 反对

使用道具 举报

发表于 2009-11-22 12:19:05 | 显示全部楼层
1# hovidelphic

居然在一期就发了3篇,太牛叉了
回复 支持 反对

使用道具 举报

发表于 2009-11-22 12:20:57 | 显示全部楼层
本帖最后由 bakurise 于 2009-11-22 12:23 编辑

你注意版权问题。你文章中很多代码都是我的原创,那份代码是我做的科研立项。引用代码至少要写上版权。

全局HOOK的模块是安静修改自国外的,我的代码里都留下了,这些版权还是要的吧。。。

谢谢。

评分

参与人数 1威望 +10 人气 +2 收起 理由
hovidelphic + 10 + 2 多谢

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-22 12:31:57 | 显示全部楼层
我在原文里都提到了你和reker,但是发刊时被编辑删去了。
回复 支持 反对

使用道具 举报

发表于 2009-11-22 13:20:38 | 显示全部楼层
那份代码是我做的科研立项
怎么,研究M$的破烂Windows都能作为科研立项???中国的科研水平也太差了吧……

评分

参与人数 2人气 +4 收起 理由
菜鸟学飞 + 2 呵呵 汗一个~~
cnlamb + 2 同感。

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-6-29 20:54

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表