有时候大家在破解别人的加密算法会遇到加密算法是js的,在php里不能解析,除了将js加密算法用php重写外,还可以用v8js扩展
windows
地址是:https://github.com/phpv8/v8js
扩展下载地址是:https://s3.amazonaws.com/win-phpv8/v8js_vc14_php7_ts.zip
下载完成后,供4个文件,将php_v8js.dll放到php的extension目录下,并在Php.ini中,打开扩展 extension=php_v8js.dll
将剩下的三个文件:v8.dll、icuuc.dll、icui18n.dll 放到apache的bin目录下。
重启apache就可以了。注意,要求PHP版本是7.0以上。还有就是复制上面三个动态库到apache的bin目录,否则会报错:
PHP Warning: PHP Startup: Unable to load dynamic library 'D:\\***\\php7.0.5\\ext\\php_v8js.dll' - \xef\xbf\xbd\xd2\xb2\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xd6\xb8\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xc4\xa3\xef\xbf\xbd\xe9\xa1\xa3\r\n in Unknown on line 0
linux
首先在 Ubuntu 12.04 的安装方法如下:
sudo apt-get install php5-dev php-pear libv8-dev build-essential
sudo pecl install v8js
sudo echo extension=v8js.so >>/etc/php5/cli/php.ini
sudo echo extension=v8js.so >>/etc/php5/apache2/php.ini
php -m | grep v8
下面是一个简单的测试脚本:
executeString($JS, 'basic.js');
echo ' '.(microtime(true)-$start)."\n"; // 3.49s
在 PHP 中使用 JavaScript 处理某些操作时性能会比较好。
下面是在 node.js 中运行相同 js 代码的比较:
time node /tmp/test.js
real 0m0.729s
而 v8js 当时是 beta 版本,希望在正式版方面性能能有更多提升。
下面是 PHP 在使用 V8 引擎中一个使用数据库、会话和请求处理的例子:
// v8js currently crashes with mysqli_result, so wrap it
class DB extends MySQLi {
public function query($sql) {
return parent::query($sql)->fetch_all(MYSQLI_ASSOC);
}
}
// v8js currently has no support for references or magic __set(), so wrap it
class Session {
public function set($key, $value) {
$_SESSION[$key] = $value;
}
public function __get($key) {
if (isset($_SESSION[$key])) return $_SESSION[$key];
return null;
}
public function toJSON() {
return $_SESSION;
}
}
session_start();
$js = new V8Js();
$js->db = new DB('localhost', 'root', '', 'mydb');
$js->session = new Session();
$js->request = $_REQUEST;
$js->executeString(<<
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
windows:
首先检查您的PHP是线程安全性的还是非安全性的,因为我们需要知道要下载正确的模块。你可以在Windows中运行一个简单的命令来检查这个。代码如下:
php -i | findstr "Thread"
如果结果输出是Thread Safety => enabled
,那说明你的PHP版本是线程安全性的,反之亦然。
当然你也可以新建个PHP文件,用php_info();
来获取你PHP的信息。
接下来,在Jan-E这里下载完整的编译好的PHP版本:
https://www.apachelounge.com/viewtopic.php?t=6359
然后你可以从里面提取出你需要的文件,将它们解压到各自的文件夹中:\php\
文件夹:
\php\ext\
文件夹:
还有最后一步,配置你的php.ini
文件:
; V8 Javascript Engine Module extension=php_v8js.dll
最后重启你的服务就可以了!!!
提供个简单的例子:
executeString($JS, 'basic.js'); $temp = explode(",",$temp); print_r($temp); } catch (V8JsException $e) { print_r($e); }
运行结果如下:
[Running] php "e:worktest.php"
Hello World!
Hello World2!
Array
([0] => Hello World! [1] => Hello World2!)
[Done] exited with code=0 in 0.622 seconds