原版CGI是怎么打包成单文件?
本帖最后由 2012胡言乱语 于 2017-7-3 10:20 编辑我在修改CGI时,发现原版cgi打包方式有点特殊。发现原版cgi.exe运行时,不仅会释放文件到%Temp%,并运行pecmd load cgi.wcz,还会判断cgi.exe自身运行目录,并把自身目录的路径保存到一个为cgipath.dat的纯文本,并把cgipath.dat也存到%Temp%下,然后在cgi.wcz里读取cgipath.dat,把这目录存储在变量CGIEXEDir,再在这变量 CGIEXEDir下搜索gho文件 如果有,就会默认在下拉列表里显示这个gho。还会复制自身下的onekey.ini到%Temp%,这是怎么做到的?
试验:1.下载原版cgi,并在同目录下放一个gho,运行cgi 看图
2.解压原版cgi,什么都不修改,在打包成单文件 再运行 就不会显示当前目录下的gho 看图
原因是 我们只是简单打包成单文件 运行时,单文件解压到临时目录后,自动运行pecmd加参数 load cgi.wcz,而原版代码里有这几句 大家看
这个 cgipath.dat 到底怎么来的
2012胡言乱语 发表于 2017-7-3 13:48
去研究研究NSIS打包方法
这个目录可以用PECMD代码获取:
ENVI &fPID=
ENVI &MyDir=
FIND --pid*@.%&__PID% &fPID,
MSTR* * &fTID=<2>&fPID
IFEX $%&fTID%>0,
{*
ENVI &gPID=
FIND --pid*@.%&fTID% &gPID,
MSTR* * &tidFILE=<6>&gPID
FIND $%&tidFILE%<>%SYSTEMDRIVE%\Windows\Explorer.EXE, FDIR &MyDir=%&tidFILE%
}
MESS. cgi源文件目录:%&MyDir%\
注意:64位系统必需用64位PECMD,否则获取不到。
作者应该是用NSIS打包的。 如果是自释放单文件,应该是用NSIS打包的。 kcyou 发表于 2017-7-3 12:29
让原版释放到%temp%,解密CGI.WCZ,删除file cgipath.dat 相关,运行后并没发现CGIPATH.DAT,不知CGIPATH.DAT ...
CGIPATH.DAT内容肯定是cgi本身运行的目录名, 比如cgi在桌面运行,CGIPATH.DAT的内容是"C:\Users\Administrator\Desktop",而CGIPATH.DAT是怎么生成的,猜测应该是打包工具里的代码生成的,举例:主程序在释放CLDStandard文件夹到TEMP后 在判断自身目录 并自动生成CGIPATH.DAT到%TEMP%\CLDStandard,还要判断自身目录里有没有onekey.ini无人值守文件,如果有 一并复制到%TEMP%\CLDStandard里, 最后在运行CLDStandard里的pecmd加参数LOAD CGI.WCZ。
发没发现 被我们重新打包后 onekey.ini都不管用, 因为cgi.wcz里 IFEX onekey.ini, TEAM ENVI &FromConfig=1|ENVI &KillVD=1|FILE cgipath.dat|CALL GetGHOConfig! CALL @MHGHO2012
cgi.wcz判断有没有onekey.ini,都是相对于释放后的目录 %TEMP%\CLDStandard,
去研究研究NSIS打包方法 527104427 发表于 2017-7-3 16:40
这个目录可以用PECMD代码获取:
ENVI &fPID=
谢谢五大的代码,刚才测试了一下代码果然有用{:3_138:}
页:
[1]