无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站数据恢复、数据保护、视频编辑
Win To Go 极致利器(IXUNCIS固态U盘)无忧启动网成立20周年!广告联系 QQ:184822951 微信:wuyouceo
查看: 2480|回复: 6

[讨论] 原版CGI是怎么打包成单文件?

[复制链接]
发表于 2017-7-3 10:07:58 | 显示全部楼层 |阅读模式
本帖最后由 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 看图
捕获.JPG

2.解压原版cgi,什么都不修改,在打包成单文件 再运行 就不会显示当前目录下的gho 看图
4.JPG

原因是 我们只是简单打包成单文件 运行时,单文件解压到临时目录后,自动运行pecmd加参数 load cgi.wcz,而原版代码里有这几句 大家看
QQ截图20170703101738.jpg
这个 cgipath.dat 到底怎么来的




发表于 2017-7-3 16:40:24 | 显示全部楼层
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,否则获取不到。



点评

谢谢五大的代码,刚才测试了一下代码果然有用  详情 回复 发表于 2017-7-3 19:57

评分

参与人数 1无忧币 +5 收起 理由
1400700226 + 5

查看全部评分

回复

使用道具 举报

发表于 2017-7-3 12:03:15 | 显示全部楼层
作者应该是用NSIS打包的。
回复

使用道具 举报

发表于 2017-7-3 13:02:29 | 显示全部楼层
如果是自释放单文件,应该是用NSIS打包的。
回复

使用道具 举报

 楼主| 发表于 2017-7-3 13:45:34 | 显示全部楼层
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,




点评

非单文件版CGI-m.exe与标准版的脚本是相同的,非单文件版CGI.WCZ里面也有CGIPATH.DAT,是不是作者忘了删除,应该说,不要这个没有影响,onekey.ini不一定要在CLDStandard里面  详情 回复 发表于 2017-7-3 17:36
回复

使用道具 举报

 楼主| 发表于 2017-7-3 13:48:15 | 显示全部楼层
去研究研究NSIS打包方法

点评

这个目录可以用PECMD代码获取: ENVI &fPID= ENVI &MyDir= FIND --pid*@.%&__PID% &fPID, MSTR* * &fTID=&fPID IFEX $%&fTID%>0, {* ENVI &gPID= FIND --pid*@.%&fTID% &gPID, MSTR* * &tidFILE=&gPID  详情 回复 发表于 2017-7-3 16:40
回复

使用道具 举报

 楼主| 发表于 2017-7-3 19:57:33 | 显示全部楼层
527104427 发表于 2017-7-3 16:40
这个目录可以用PECMD代码获取:

ENVI &fPID=

谢谢五大的代码,刚才测试了一下代码果然有用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2021-4-13 20:42

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表