易语言api hook ShellExecuteA 执行程序

ShellExecuteA

.版本 2

.DLL命令 ShellExecuteA, 整数型, "shell32.dll", "ShellExecuteA", , 查找与指定文件关联在一起的程序的文件名,并执行相关操作,成功则返一个大于31的值。
.参数 hwnd, 整数型, , 用来指定被执行文件显示的窗口所属的父窗口句柄,可以为NULL
.参数 lpOperation, 文本型, , 指向一个表示执行方式的字符串
.参数 lpFile, 文本型, , 用来指定文件名,文件名既可以是可执行文件也可以是数据文件,或可执行文件.
.参数 lpParameters, 文本型, , 当lpFile参数指定了一个可执行文件(open),本参数用来指定命令行参数.如果lpFile参数指定是数据文件或其它,那么本参数必须是NULL
.参数 lpDirectoy, 文本型, , 执行或打开文件时使用的默认目录,如果lpFile同时指定了文件名(夹)的目录,此参数无效.
.参数 nShowCmd, 整数型, , 如果函数执行了一个可执行文件,这个参数是指定窗口的打开方式,这个参数定义同ShowWindow函数中的dwCmdShow参数

运行系统notepad.exe

ShellExecuteA (0, “open”, “notepad.exe”, “”, 取运行目录 (), 1)

hook ShellExecuteA

.版本 2
 
h.安装Hook (“shell32.dll”, “ShellExecuteA”, 到整数 (&MySE))
h.开始Hook ()

钩子回调

hook后就不会执行记事本了notepad.exe,而是我们自定义的一个测试.exe

.版本 2
 
.子程序 MySE
.参数 hwnd, 整数型
.参数 lpOperation, 文本型
.参数 lpFile, 文本型
.参数 lpParameters, 文本型
.参数 lpDirectoy, 文本型
.参数 nShowCmd, 整数型
 
信息框 (“ShellExecuteA已经被我劫持!!!”, 0, , )
h.停止Hook ()
运行 (取运行目录 () + “\测试.exe”, 假, )
h.开始Hook ()

注入钩子DLL

同一我们依然可以把钩子写出一个DLL,通过注入来实现,本课视频采用了EIP注入和远程线程注入来演示,下面是DLL源码

.版本 2
 
.子程序 _启动子程序, 整数型, , 请在本子程序中放置动态链接库初始化代码
 
hook ()
_临时子程序 ()  ' 在初始化代码执行完毕后调用测试代码
返回 (0)  ' 返回值被忽略。
 
.子程序 _临时子程序
 
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
.子程序 hook, , 公开
 
h.安装Hook (“shell32.dll”, “ShellExecuteA”, 到整数 (&MySE))
h.开始Hook ()
 
.子程序 MySE
.参数 hwnd, 整数型
.参数 lpOperation, 文本型
.参数 lpFile, 文本型
.参数 lpParameters, 文本型
.参数 lpDirectoy, 文本型
.参数 nShowCmd, 整数型
 
信息框 (“ShellExecuteA已经被我劫持!!!”, 0, , )
h.停止Hook ()
运行 (取运行目录 () + “\测试.exe”, 假, )
h.开始Hook ()

教程获取下载:


发布日期:

所属分类: 易语言 标签: