欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

让绿色版的 PhotoShop CS5 支持 Bridge CS5 组件

让绿色版的 PhotoShop CS5 支持 Bridge CS5 组件


   网上有很多绿色版的 PhotoShop CS5 ,但是都没有带上 Bridge CS5 组件,原因之一就是 Bridge CS5 组件不能移动位置,否则就无法调用。
   为了能解决这个问题,我决定尝试一下。
   Bridge CS5 是 PhotoShop CS5 的一个附加组件,是可独立运行的应用程序,那么在 PS 中要调用它的话,肯定是要创建进程。理所应当就应该下断 bp CreateProcessW/A 了因为系统只知道这样来创建一个进程,下面是实际操作过程:
   启动 PS 后用 OD 附加,下断 CreateProcessW 后点击界面上的 “启动 Bridge 按钮”,在 OD 中被断下:

    此时的堆栈如下:

    因为我使用的是绿色版的 PS ,并没有 Bridge CS5 组件,所以可以肯定的是程序使用了固定的路径来调用 Bridge CS5,所以就造成了 Bridge CS5 的目录不能移动。从堆栈中可以看到需要修正的参数有两个,一是命令行中 Bridge 主程序的路径,二是 Brdge 的所在目录路径(这个路径作用是 CreateProcess 的当前目录参数值)。
   首先想到的方法是使用 API Hook 。这样的话所有调用到 CreateProcess 的地方都会被拦截,修改参数就很简单了。
   从上面继续简单地跟踪还可以知道 PS 调用 Bridge 的函数都是一个,参数也是不变的。
   如果 Hook 所有的 CreateProcess 那么效率肯定会受到影响,所以我想了一个折中的方案,自己写一个函数来接替 PS 调用 Bridge 的 CreateProcess 函数,在自定义的函数里面判断参数是否是我们需要修改的值,如果是则修改参数后再调用 CreateProcess。
   这样的话,只需要写一个 Dll ,导出一个自定义函数,名为 CallBridgeCS5。用它来接替调用 Bridge 处的 CreateProcess 函数,这样流程就转到了我们的 Dll 了,想干什么都可以了。
    VC6 新建一个 Dll 工程,添加导出函数 CallBridgeCS5 ,并且参数和返回值必须和 CreateProcess 一样:

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功