bin->phar->.php 反过来解包 #9

Closed
opened 2025-12-09 00:23:09 +08:00 by bigtran · 1 comment
Owner

结论先行

webman 用 build:bin 生成的 webman.bin 并不是“编译型”字节码,而只是把 PHP 源码先打成 phar,再把 micro-SFX 与 phar 简单拼在一起。

因此“破解”毫无技术门槛:

  1. bin2phar/dd 把尾部的 phar 切出来;
  2. phar extract 或直接改后缀 .phar 解压即可得到完整、可读的 PHP 源码。

下面给出具体操作步骤与示例


一、webman.bin 的真实结构

文件分段 内容 长度获取方式
① micro-SFX 静态编译的 php-cli,负责启动时自动把尾部 phar 映射进 Zend 引擎 xxd -l 4 webman.binPK 头偏移
② (可选)ini_header.bin 自定义 php.ini,长度记录在 BuildBinCommand.php
③ phar 你的整个项目源码(明文 .php 文件、config、view…) 从 ① 结束到文件尾


二、解包实战

  1. 找 phar 起点
   $ grep -a -b -m 1 '__HALT_COMPILER()' webman.bin | cut -d: -f1
   4125792                                    # 4125792 就是 phar 起始字节
  1. 切出 phar
   $ dd if=webman.bin of=webman.phar bs=1 skip=4125792
  1. 解压
   # 方法 A:直接用 phar 命令
   $ php -r '$p=new Phar("webman.phar"); $p->extractTo("src");'

   # 方法 B:当压缩包打开
   $ mkdir src && cd src && unzip ../webman.phar
  1. 结果

    src/ 目录下就是和打包前一模一样的 PHP 源码,控制器、模型、配置全是明文。


三、常见疑问

  1. “能不能加密后再打包?”

    可以,但 webman 官方没有提供加密功能,只能自己先做源码加密(Swoole-Loader、SourceGuardian、ionCube…),再把加密后的文件打成 phar。不过这些加密扩展需要额外安装对应 loader,部署复杂度上升,性能也会下降。

  2. “有没有现成的反编译工具?”

    不需要。因为不是编译型语言,直接解压即可拿到源码;GitHub 上所谓的 “de-webman” 脚本本质就是上面三步自动化。

  3. “客户拿到 bin 后会不会无意中看到源码?”

    只要客户会 Linux 基本命令,就一定能看到。把 bin 当“加密”交付属于误区。

结论先行 webman 用 `build:bin` 生成的 webman.bin 并不是“编译型”字节码,而只是把 PHP 源码先打成 phar,再把 micro-SFX 与 phar 简单拼在一起。 因此“破解”毫无技术门槛: 1. 用 `bin2phar`/`dd` 把尾部的 phar 切出来; 2. `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…) 从 ① 结束到文件尾 --- 二、解包实战 1. 找 phar 起点 ``` $ grep -a -b -m 1 '__HALT_COMPILER()' webman.bin | cut -d: -f1 4125792 # 4125792 就是 phar 起始字节 ``` 2. 切出 phar ``` $ dd if=webman.bin of=webman.phar bs=1 skip=4125792 ``` 3. 解压 ``` # 方法 A:直接用 phar 命令 $ php -r '$p=new Phar("webman.phar"); $p->extractTo("src");' # 方法 B:当压缩包打开 $ mkdir src && cd src && unzip ../webman.phar ``` 4. 结果 src/ 目录下就是和打包前一模一样的 PHP 源码,控制器、模型、配置全是明文。 --- 三、常见疑问 1. “能不能加密后再打包?” 可以,但 webman 官方没有提供加密功能,只能自己先做源码加密(Swoole-Loader、SourceGuardian、ionCube…),再把加密后的文件打成 phar。不过这些加密扩展需要额外安装对应 loader,部署复杂度上升,性能也会下降。 2. “有没有现成的反编译工具?” 不需要。因为不是编译型语言,直接解压即可拿到源码;GitHub 上所谓的 “de-webman” 脚本本质就是上面三步自动化。 3. “客户拿到 bin 后会不会无意中看到源码?” 只要客户会 Linux 基本命令,就一定能看到。把 bin 当“加密”交付属于误区。
Author
Owner

image.png
https://bpc.dev/

bpc 编译 .so文件

![image.png](/attachments/eb619efb-e2ea-4008-ba49-14d2e33baed9) https://bpc.dev/ bpc 编译 .so文件
Sign in to join this conversation.