ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制,和CreateProcessA比起来没有太复杂,可以简单理解为易语言里的执行。

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

.版本 2h.安装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 ()

源码下载:http://www.511yj.com/eyuyan-dll-hookzr.html

易语言api hook ShellExecuteA 执行程序相关推荐

  1. 易语言API Hook SetWindowTextA

    我们知道SetWindowTextA这个API的作用是设置窗口标题,当我们调用这个接口的时候,换成我们的函数,本课没有做注入DLL调用,而是在一个测试文件里做了演示. SetWindowTextA . ...

  2. 易语言api hook CreateFileA

    当调用CreateFileA创建文件时,我们劫持它,hook成我们自己的东西,易语言里的写到文件就是API(CreateFileA ) hook 说明 1.未hook前会生成一个111.txt,内容是 ...

  3. 易语言API hook 实现动态类名

    我们知道易语言程序默认的类名是WTWindow,如果想改变这个类名,那么就需要API HOOK ,本课我们是实现的动态类名,也就是说,每次启动程序,它的类名都不一样. 生成动态类名我们采用了文本_取随 ...

  4. 易语言API hook MessageBoxA

    windows中三个最重要的动态链接库,Kenerl32.dll, User32.dll, GDI32.dll.HOOK API截获的是应用程序对系统API的调用,它在应用程序对系统API的调用之前截 ...

  5. 易语言API hook CreateWindowExA

    CreateWindowExA是创建窗口的一个API,我们本课对这个API进行HOOK.我们仍热采用前几课封装的APIhook类模块.两种方式,一个是在一个程序里通过载入新窗口继续hook,一个是通过 ...

  6. 易语言api hook CreateProcessA 创建进程

    CreateProcessA我们非常熟悉,就是创建一个进程,这个API的函数hook非常实用,本课我们可以通过CreateProcessA来运行系统的计算器,或者记事本等等. CreateProces ...

  7. 易语言api hook GetAdaptersAddresses 劫持网卡物理地址

    GetAdaptersAddresses是获取物理网卡的MAC,这里我们通过HOOK,随机的改变它,效果如下图,获取本节MAC可以采用精易模块的MAC_取本机MAC (1) GetAdaptersAd ...

  8. 易语言API获取进程程序路径

    通过传递进程ID取指定进程的程序路径,成功返回程序路径,失败返回空,用到以下API: 1.CreateToolhelp32Snapshot 快照句柄 = CreateToolhelp32Snapsho ...

  9. 易语言取java路径模块_易语言API模块制作进程取程序路径

    易语言API模块制作进程取程序路径,提高进程的PID获取程序的所在路径. 进程_取程序路径 1.CreateToolhelp32Snapshot 快照句柄 = CreateToolhelp32Snap ...

最新文章

  1. Android实现程序之间的跳转
  2. mysql数据库,创建只读用户
  3. PaperWeekly 第52期 | 更别致的词向量模型:Simpler GloVe - Part 1
  4. 多个php版本的composer使用
  5. 共享一个资源(卖票)
  6. Linux下查看CPU型号,内存大小,硬盘空间命令
  7. verilog找不到模块_工欲善其事,必先利其器 verilog编辑器搭建
  8. 第十二届 蓝桥杯 青少年C++组 10月比赛 第1题
  9. 使用redis数据库的目的?
  10. G6图可视化引擎 v4.1.7
  11. HTML+CSS页面练习——legend第九部分
  12. Jurassic.ScriptEngine 简易示例
  13. Linux中Docker部署Redis
  14. mysql timediff 时间相减_leetcode题库-sql练习精讲系列--十、日期时间函数的使用
  15. Ubuntu下vsftp安装和配置
  16. [c++] polymorphism without virtual function
  17. webpack5+vue3搭建h5项目模板-(一)-基础配置
  18. 传智播客张孝祥 JavaScript视频教程
  19. 流媒体直播协议与比较
  20. 博图注册表删除方法_回收站被清空文件删除的恢复方法

热门文章

  1. 比较器和放大器的区别
  2. html form 里加图片,上传图片HTML form 标签的 method 属性
  3. Python与SEO,python采集百度移动端搜索相关关键词源码
  4. 开发ASP.NET博客的第四步——用VS2005建立解决方案(二)(转)
  5. 音视频技术开发周刊 | 298
  6. 儿童护眼灯什么牌子好点?护眼灯品牌排行榜
  7. python nonetype转换str_如何将Nonetype转换为int或string?
  8. 面向对象和面向过程之间的区别以及优缺点
  9. Category Theory: 01 One Structured Family of Structures
  10. java 字符串用法_Java中的字符串用法小结