image
前一陣子,參加了一個阿里的PHP技術(shù)小會議锚国。主講人周夢康腕巡,分享了一下 phar 這個東東。
之前血筑,還真沒咋注意绘沉。
正好今兒有時間有興趣,自己也研究一下豺总。梳理一下流程车伞。
image.png
開始咯。喻喳。另玖。。
首先要做的一件事就是...等等表伦。谦去。。好像忘記說了一個東西蹦哼。
自從 php5.3開始鳄哭,就集成了 phar 這個東東。但是翔怎,但是窃诉,但是Q畎摇!飘痛!這玩意兒默認(rèn)是關(guān)閉的珊膜。。宣脉。
clipboard.png
找到 自己的 php.ini 文件车柠,進入,修改 【phar】phar.readonly 為 off 塑猖。它默認(rèn)是 on竹祷。
kengdie.png
尋找自己的 php.ini 找不到的話,在自己的控制臺羊苟, php -ini | grep ini
phpini.png
不羅嗦了塑陵,開始,開始~~~ 真的開始~~~
1.創(chuàng)建a.php文件
<?php
class a{
private $b='1';
public function setB($b1){
$this->b = $b1;
}
public function prf(){
echo 'prf function prfffff'.$this->b;
}
}
2蜡励、創(chuàng)建c.php文件令花,實例化類 a
<?php
include('a.php');
$a = new a();
$a->prf();
$a->setB('bbbbbb');
$a->prf();
3、 將 a.php 的代碼打包凉倚,并設(shè)置默認(rèn)啟動類
<?php
$phar = new Phar('a.phar');
$phar->buildFromDirectory(dirname(__FILE__));
$phar->setStub($phar->createDefaultStub('c.php','c.php'));
$phar->compressFiles(Phar::GZ);
4兼都、在當(dāng)前目錄下,就會出現(xiàn) a.phar 文件稽寒。此文件就是打包好的 phar 文件扮碧。此文件可以直接通過 php 運行
4.png
5、直接運行 phar 文件杏糙∩魍酰可以看到,輸出上面的結(jié)果了搔啊。
5.png
6柬祠、除此之外,此 phar 包文件负芋,還可以通過代碼解析漫蛔,然后和java類似的方式,進行 Jar 包內(nèi)的方法調(diào)用旧蛾。而 phar 亦可以達到同等的效果莽龟。
<?php
//include('a.phar'); // 這種方式,會將a.phar包內(nèi)的所有的類都加載進來锨天。類似于 java的 import com.a.*的這種效果毯盈。將不需要的也導(dǎo)入進來。
真的沒必要
include('phar://a.phar/a.php'); //需要啥病袄,就從包內(nèi)加載啥搂赋。很方便赘阀,又簡潔
$d = new a();
$d->setB('dddd');
$d->prf();
效果:
cd.png
這玩意兒,簡直是 做兼職啥的神器啊……不給錢脑奠,就不給你源碼……
hahjpeg.jpeg
后來又 vim 看了一下, a.phar 里面的內(nèi)容基公。
里面全都是
luanma.png
這也算認(rèn)為是一種混淆了吧~~~~
就是不知道,其混淆程度能不能達到 android 的程度~
android 的原生混淆宋欺,亦有各種反編譯的存在轰豆。但是一旦通過各種第三方比如360,加殼混淆打包等處理一下齿诞,基本就反編譯無望了酸休。這也應(yīng)該是目前大部分人在用的吧。
phar 這個玩意兒祷杈,不知道能不能反編譯回來~拿到源碼或者大概能看懂的代碼斑司。
有時間再研究吧。就到這里了吠式。