吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3772|回复: 36
收起左侧

[其他原创] 一种很新的单文件打包方法:自挂载

  [复制链接]
3I5105 发表于 2023-6-17 20:08
本帖最后由 3I5105 于 2023-6-29 21:56 编辑

一、定义
因为似乎没见过用这种方法打包的单文件程序,所以作者自己给它起了一个名字。与单文件自解压程序 ( 以下简称自解压程序 ) 相似,单文件自挂载程序(以下简称自挂载程序)也是通过可执行文件模块+文件数据模块实现不需要其他软件的支持,自己对自己执行挂载操作
自挂载程序相较于自解压程序的优点是:自挂载操作理论上不需要进行磁盘上的复制,可以直接通过映射访问单文件程序内部的数据。这样就可以减少程序的时间复杂度/执行步骤,从而加快单文件程序启动速度

二、实现
作者的实现是基于wim和cmd的,主要利用了如下特性
1.wim(windows NT6标准安装包格式)文件可以通过dism快速挂载到任意空文件夹
2.cmd.exe运行批处理文件时会跳过无效的命令
(所以依赖的组件只有两个:cmd.exe和dism.exe,不会出现没有运行库之类的问题)


此处以"360驱动大师网卡版"为例,方法大致如下
1.我们先将装着需要打包的程序的文件夹和一个批处理放入一个空文件夹中,如图所示。注意,这一层目录可以有若干个文件夹,但只能有批处理这一个文件
无标题.png
2.编辑这个批处理文件,它的代码流程如下所示
    a.空三行(必须,以防cmd将下一条与文件头部数据作为一行处理)
    b.获取管理员权限
    c.创建挂载所需的文件夹
    d.调用dism.exe以wim方式挂载文件"%0"(%0是批处理文件自身,这里就是自挂载的核心部分)
    e.运行绿化程序(若有)
    f.运行主程序
    g.运行残留清理程序(若有)
    h.调用dism.exe将"%0"文件的挂载卸除
    i.退出脚本
    j.空三行(必须,以防cmd将上一条与其余文件数据作为一行处理)


3.使用任意打包工具对这个文件夹进行打包,此处作者使用wimtool,步骤如下
   a.以管理员身份打开wimtool,打开“新制与追加”一页
   b.点击“配置文件”按钮,进入配置文件编辑页面
   c.在[CompressionEXlusionList]行下插入一行,填入*.bat
   d.点击应用
   e.(可选)点击“压缩类型”选择最大压缩
   f.填入wim文件名和打包路径,开始打包
4.将打包好的wim文件扩展名直接改为.bat或.cmd


三、效果
样本文件:
https://www.123pan.com/s/uTv8Vv-2Fu0A.html
实际使用时的情况:

优点:自挂载程序加载速度明显比自解压程序快,360驱动大师的两种单文件版本在作者的win11虚拟机中冷启动时,自挂载启动用时14s,自解压启动用时25s。理论上在同性能硬件环境下,加载越大的程序,自挂载越有优势

缺点:有一个黑框框(如图所示),而且wim压缩比没有7z高
无标题.jpg




PS:理论上vhd和iso也可以用于自挂载程序的,剩下的就等大家来改进啦!等我们这边初一放暑假我再回来玩awa

免费评分

参与人数 8吾爱币 +9 热心值 +8 收起 理由
tail88 + 1 + 1 谢谢@Thanks!
xlln + 1 + 1 我很赞同!
hyhsll + 1 + 1 谢谢@Thanks!
Bob5230 + 1 + 1 热心回复!
daoye9988 + 1 + 1 我很赞同!
blindcat + 1 + 1 谢谢@Thanks!
一尘不染 + 1 + 1 用心讨论,共获提升!
luliucheng + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 3I5105 发表于 2023-6-17 23:06
luliucheng 发表于 2023-6-17 22:40
bat可以调用vbs脚本实现隐藏窗口,而且这个wim的文件结构还可以优化。

其实只要在按名称排序时,bat在第 ...

谢谢!
学习了,这样可以省一层目录,确实有用。关于vbs隐藏窗口的操作,已经将取得管理员权限的部分改为用vbs实现,这样就可以顺便隐藏窗口
这个优点确实是一个很重要的点,可以根据这个实现单文件自动保存,另外,由于wim文件有文件指针的功能,利用其特性甚至可以实现多用户,多系统地保存设置而互不干扰
灵剑丹心 发表于 2023-6-18 13:21
bcdedit >nul
if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)
:UACPrompt
start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
exit /B
:UACAdmin
cd /d %~dp0
SET WD=%TEMP%\%RANDOM%
MD %WD%
DISM /MOUNT-WIM /WIMFILE:%0 /INDEX:1 /MOUNTDIR:%WD% /READONLY
rem  
%WD%\360DrvMgr\360DrvMgr.EXE
DISM /UNMOUNT-WIM /MOUNTDIR:%WD% /DISCARD

杀软会误报吗?感觉不如用enigma 打包成内存释放单文件

再一个大家都习惯了exe格式,看见你这个bat格式或者cmd格式下意识以为是不是后门木马
zhangweiyi9 发表于 2023-6-17 20:50
zlf2020999 发表于 2023-6-17 21:12
谢谢分享!这么好的软件,感谢分享!!!

头像被屏蔽
丶Guest 发表于 2023-6-17 21:49
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 3I5105 发表于 2023-6-17 21:50
丶Guest 发表于 2023-6-17 21:49
cmd 不是可以隐藏允许吗

我没有在help里面找到相关命令QAQ
还请高手指点指点
头像被屏蔽
丶Guest 发表于 2023-6-17 21:54
提示: 作者被禁止或删除 内容自动屏蔽
llp123 发表于 2023-6-17 21:55
谢谢能分享
头像被屏蔽
moruye 发表于 2023-6-17 22:37
提示: 作者被禁止或删除 内容自动屏蔽
不知道改成啥 发表于 2023-6-17 22:37
没看见下载地址啊
luliucheng 发表于 2023-6-17 22:40
本帖最后由 luliucheng 于 2023-6-17 22:51 编辑

bat可以调用vbs脚本实现隐藏窗口,而且这个wim的文件结构还可以优化。
屏幕截图 2023-06-17 224434.png
其实只要在按名称排序时,bat在第一个就行了,最简单的办法就是在bat文件前加感叹号。
这种方法其实还有一个优点,就是在程序自动升级或是修改设置后还能打包回单文件,而自解压是做不到的。

免费评分

参与人数 2吾爱币 +2 热心值 +1 收起 理由
xiaogao2677 + 1 + 1 我很赞同!
3I5105 + 1 谢谢@Thanks!

查看全部评分

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

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 22:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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