前言
以前也用过subst模拟盘符, 那时觉得用了就是调试目录统一些, 每个迁出工程的同事,都能统一开发目录, 不用再去改自己的开发目录设置.
今天想到,还有安全性问题啊. 因为编译出来的PE文件里面有开发目录的全路径,这属于信息泄漏.
写好设置开发目录模拟盘的脚本后,测试过了,即使是编译的是Debug版程序,PE中也没有原始开发目录的信息了, 只能看到基于虚拟盘的相对开发路径.
如果不隐藏开发目录,有些场景下后果还是很严重的.
用mklink组织工程文件目录
当工程目录要包含其他目录(其他分区上的目录或是在工程目录之外的目录时),拷贝过来不好。
可以用mklink将其他目录的连接放到本目录下。
C:\Users\me\Desktop>mklink /H /J 3rd D:\3rd\
为 3rd <<===>> D:\3rd\ 创建的联接
C:\Users\me\Desktop>dir
驱动器 C 中的卷没有标签。
卷的序列号是 780F-2AA4
C:\Users\me\Desktop 的目录
2017/12/11 10:19 <DIR> .
2017/12/11 10:19 <DIR> ..
2017/12/11 10:19 <JUNCTION> 3rd [D:\3rd\]
2017/11/27 17:53 815 IDA Pro (32-bit).lnk
2017/11/27 17:53 827 IDA Pro (64-bit).lnk
设置开发目录为虚拟盘的脚本
echo off
rem @file 设置开发目录虚拟盘符.cmd
rem ------------------------------------------------------------
echo 卸载Y盘
rem ------------------------------------------------------------
subst Y: /D
rem ------------------------------------------------------------
echo 挂载Y盘 - 挂载调试目录(挂载当前目录下子目录的例子)
rem ------------------------------------------------------------
subst Y: %~dp0"doc\PEiD.0.95"
rem ------------------------------------------------------------
echo 卸载Z盘
rem ------------------------------------------------------------
subst Z: /D
rem %~dp0 是.cmd所在的当前目录, 将此.cmd放到开发目录顶级目录
rem ------------------------------------------------------------
echo 挂载Z盘 - 挂载开发目录
rem ------------------------------------------------------------
rem %~sdp0 是全路径的短名称, %~dp0是全路径的长名称
rem 测试过了, 挂载的目录后不能带\符号
rem e.g. OK subst Z: c:\testDir
rem e.g. ERROR subst Z: c:\testDir\
rem so subst Z: %~sdp0 不会成功的, 因为 %~sdp0 全路径后面有\
subst Z: %~sdp0"ReKanalPlugin"
rem ------------------------------------------------------------
rem 执行过脚本后的效果
rem ------------------------------------------------------------
rem .\doc\PEiD.0.95\plugins为Y盘
rem .\ReKanalPlugin为Z盘
rem 开发前,只在绝对路径执行开发目录设置成虚拟盘的脚本.cmd
rem 开发时,直接点开Z盘,编译工程进行开发, 不打开绝对路径开发
rem 编译时, 宿主程序也写成相对于虚拟盘的路径, e.g. Y:\PEID_dump.exe
rem 编译时, 编译出的程序也写成相对于虚拟盘的路径, e.g. Y:\plugins\ReKanalPlugin.dll
rem 即使工程发布出去,别人也看不出我的开发目录的绝对路径
rem 经过测试,从编译后的PE文件也看不出开发目录的绝对路径
rem 在PE文件中能看到的开发目录的痕迹也只是虚拟盘的相对路径.
rem ------------------------------------------------------------
echo off
pause
<2016-1022>
整理了一个新的脚本, 可以将脚本放到开发根目录, 将开发根目录模拟成虚拟盘, 比原来方便一些.
echo off
rem @file 设置开发目录虚拟盘符.cmd
rem ------------------------------------------------------------
echo 卸载Z盘
rem ------------------------------------------------------------
subst Z: /D
rem %~dp0 是.cmd所在的当前目录, 将此.cmd放到开发目录顶级目录
rem ------------------------------------------------------------
echo 挂载Z盘 - 挂载开发目录
rem ------------------------------------------------------------
rem %~sdp0\..\"devDir" 可以避免写全路径,只写开发根目录就行.
subst Z: %~sdp0\..\"MyDevDir"
rem ------------------------------------------------------------
echo off
pause
<2017-06-19>
想起来,模拟工程为虚拟盘后,还要自动打开虚拟盘才方便:)
echo off
rem @file 设置开发目录虚拟盘符.cmd
rem ------------------------------------------------------------
echo 卸载Z盘
rem ------------------------------------------------------------
subst Z: /D
rem %~dp0 是.cmd所在的当前目录, 将此.cmd放到开发目录顶级目录
rem ------------------------------------------------------------
echo 挂载Z盘 - 挂载开发目录
rem ------------------------------------------------------------
rem %~sdp0\..\"devDir" 可以避免写全路径,只写开发根目录就行.
subst Z: %~sdp0\..\"MyProjectDir"
rem 打开虚拟出来的Z盘
start explorer.exe Z:\
rem ------------------------------------------------------------
echo off
pause