crowdwitches

it works

WordPressのGPL違反したテーマやプラグインのライセンス認証などを突破するメモ

具体的にどういうものがGPL違反に該当するかの説明はここでは割愛します。 WordPressはGPLですので、難読化は禁止されています。

ケース1 難読化されてない || 外部サーバにリクエスト飛ばしていない

所謂シリアルナンバーを見てるパターンです。ソースコードのライセンスチェックディジット部分をいじくればそれで解決です。

関数上書きできるrunkitもどうぞ(pecl extensionですけど._.) PHP: runkit_function_redefine - Manual

ケース2 難読化されてない || 外部サーバにリクエスト飛ばしている

ケース1同様

ケース3 難読化されている && 外部サーバにリクエスト飛ばしている

大体これが多い。 Wireshark等で通信先とリクエスト先、リクエストボディ、レスポンスボディを確認します SSLを経由している場合はmitmproxyやcharlesで中間者攻撃を行う。

wp-config.php 以下proxy設定を追加する

<?php
define( 'WP_PROXY_HOST', '127.0.0.1' );
define( 'WP_PROXY_PORT', '8888' );

もしくは適当に通信をキャプチャするプラグインを作る

<?php
/*
Plugin Name: wp-http-checker
Description:
*/
add_filter('pre_http_request', function($bool,$r,$url) {
    $r['sslverify'] = false;
    file_put_contents(sys_get_temp_dir().DIRECTORY_SEPARATOR.'wp-http-checker.log',date('Y-m-d H:i:s')."\t".$url."\t".json_encode($r).PHP_EOL,FILE_APPEND);
    return false;
},10,3);

add_filter('http_response', function($response,$r,$url) {
    file_put_contents(sys_get_temp_dir().DIRECTORY_SEPARATOR.'wp-http-checker.log',date('Y-m-d H:i:s')."\t".$url."\t".json_encode($response).PHP_EOL,FILE_APPEND);

    return false;
},10,3);

あとは通信を横取りする簡単なプラグインを書く

WordPressは極力触りたくないので私は該当ドメインを見てエミュ鯖に変更する方法しか思いつかないのですが、ほかにうまいやり方があれば教えてください

<?php
/*
Plugin Name: GPL Fixer
*/
add_filter('pre_http_request', function($bool,$r,$url) {
    $prev = $url;
    if(strpos($url,'example.com') !== false && $r['method'] === 'POST'){
        $url = 'http://localhost/GPL/validate.php';
        $http    = _wp_http_get_object();
        $result = $http->request( $url, $r );
        return $result;
    }
    return false;
},10,3);

validate.php

<?php
header('content-type: application/json; charset=utf-8');
echo json_encode(['success'=>true,'is_valid'=>true]);

ケース4 難読化されている && 外部サーバにリクエスト飛ばしていない

まだこのケースは見たことがないですが、もしそのようなプラグイン・テーマがあれば教えてください。 一番厄介かも

codecanyonや国内のWordPressテーマ、プラグインを販売している大手業者も同様の違反が見受けられます。

www.softwarefreedom.org