image
前一阵子,参加了一个阿里的PHP技术小会议。主讲人周梦康,分享了一下 phar 这个东东。
之前,还真没咋注意。
正好今儿有时间有兴趣,自己也研究一下。梳理一下流程。
image.png
开始咯。。。。
首先要做的一件事就是...等等。。。好像忘记说了一个东西。
自从 php5.3开始,就集成了 phar 这个东东。但是,但是,但是!!!这玩意儿默认是关闭的。。。
clipboard.png
找到 自己的 php.ini 文件,进入,修改 【phar】phar.readonly 为 off 。它默认是 on。
kengdie.png
寻找自己的 php.ini 找不到的话,在自己的控制台, php -ini | grep ini
phpini.png
不罗嗦了,开始,开始~~~ 真的开始~~~
1.创建a.php文件
class a{
private $b='1';
public function setB($b1){
$this->b = $b1;
}
public function prf(){
echo 'prf function prfffff'.$this->b;
}
}
2、创建c.php文件,实例化类 a
include('a.php');
$a = new a();
$a->prf();
$a->setB('bbbbbb');
$a->prf();
3、 将 a.php 的代码打包,并设置默认启动类
$phar = new Phar('a.phar');
$phar->buildFromDirectory(dirname(__FILE__));
$phar->setStub($phar->createDefaultStub('c.php','c.php'));
$phar->compressFiles(Phar::GZ);
4、在当前目录下,就会出现 a.phar 文件。此文件就是打包好的 phar 文件。此文件可以直接通过 php 运行
4.png
5、直接运行 phar 文件。可以看到,输出上面的结果了。
5.png
6、除此之外,此 phar 包文件,还可以通过代码解析,然后和java类似的方式,进行 Jar 包内的方法调用。而 phar 亦可以达到同等的效果。
//include('a.phar'); // 这种方式,会将a.phar包内的所有的类都加载进来。类似于 java的 import com.a.*的这种效果。将不需要的也导入进来。
真的没必要
include('phar://a.phar/a.php'); //需要啥,就从包内加载啥。很方便,又简洁
$d = new a();
$d->setB('dddd');
$d->prf();
效果:
cd.png
这玩意儿,简直是 做兼职啥的神器啊……不给钱,就不给你源码……
hahjpeg.jpeg
后来又 vim 看了一下, a.phar 里面的内容。
里面全都是
luanma.png
这也算认为是一种混淆了吧~~~~
就是不知道,其混淆程度能不能达到 android 的程度~
android 的原生混淆,亦有各种反编译的存在。但是一旦通过各种第三方比如360,加壳混淆打包等处理一下,基本就反编译无望了。这也应该是目前大部分人在用的吧。
phar 这个玩意儿,不知道能不能反编译回来~拿到源码或者大概能看懂的代码。
有时间再研究吧。就到这里了。