bin->phar->.php 反过来解包 #9
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
结论先行
webman 用
build:bin生成的 webman.bin 并不是“编译型”字节码,而只是把 PHP 源码先打成 phar,再把 micro-SFX 与 phar 简单拼在一起。因此“破解”毫无技术门槛:
bin2phar/dd把尾部的 phar 切出来;phar extract或直接改后缀.phar解压即可得到完整、可读的 PHP 源码。下面给出具体操作步骤与示例
一、webman.bin 的真实结构
文件分段 内容 长度获取方式
① micro-SFX 静态编译的 php-cli,负责启动时自动把尾部 phar 映射进 Zend 引擎
xxd -l 4 webman.bin找PK头偏移② (可选)ini_header.bin 自定义 php.ini,长度记录在 BuildBinCommand.php
③ phar 你的整个项目源码(明文 .php 文件、config、view…) 从 ① 结束到文件尾
二、解包实战
结果
src/ 目录下就是和打包前一模一样的 PHP 源码,控制器、模型、配置全是明文。
三、常见疑问
“能不能加密后再打包?”
可以,但 webman 官方没有提供加密功能,只能自己先做源码加密(Swoole-Loader、SourceGuardian、ionCube…),再把加密后的文件打成 phar。不过这些加密扩展需要额外安装对应 loader,部署复杂度上升,性能也会下降。
“有没有现成的反编译工具?”
不需要。因为不是编译型语言,直接解压即可拿到源码;GitHub 上所谓的 “de-webman” 脚本本质就是上面三步自动化。
“客户拿到 bin 后会不会无意中看到源码?”
只要客户会 Linux 基本命令,就一定能看到。把 bin 当“加密”交付属于误区。
https://bpc.dev/
bpc 编译 .so文件