一个php函数的逆向工程


Reverse engineering on a php function

我知道这实际上不是逆向工程

我有这个功能:

<?=$this->get('translator')->trans('dashboard.actions', array(), 'front');?>

我想了解如何插入一个函数(使用include maybe),当使用该代码时调用。

我知道函数名需要是trans,它有3个参数,但如何定义它?让我用一种更简单的方式来表达:在php脚本中,当使用$this->get('translator')->trans('dashboard.actions', array(), 'front');

时,我如何打印Hello world

这只是一个普通的类方法:

class Traslator{
    public function trans($a, $b, $c){
        return 'Hello world';
    }
}

现在,您只需要另一个名为get()的类方法,它返回前一个类的实例:

class Foo{
    public function get(){
        return new Traslator;
    }
}

完整代码:

<?php
class Traslator{
    public function trans($a, $b, $c){
        return 'Hello world';
    }
}
class Foo{
    public function get(){
        return new Traslator;
    }

    public function test(){
        ?>
        <?=$this->get('translator')->trans('dashboard.actions', array(), 'front');?>
        <?php
    }
}
$f = new Foo;
$f->test();

$this引用当前对象实例,该变量不能被重新赋值。也就是说,要欺骗PHP做你想做的事情,需要在之前和之后添加代码。

通过创建单个类,可以获得结果。

<?=...行前

<?php
    class C {
        function get($s) {
            return $this;
        }
        function trans($s, $a, $f) {
            return 'Hello world';
        }
        function hw() {
?>

然后是

<?=$this->get('translator')->trans('dashboard.actions', array(), 'front');?>

然后需要结束类,并调用做你想做的事情的方法

<?php
}}
    $i = new C();
    $i->hw();

将这3块代码放到一个文件中并调用PHP, <?=...行应该显示"Hello world"

$this->get('translator')返回类的实例,让它称为"Translator" -在该实例中,您调用trans()方法

所以你想将"Translator"的实例更改为扩展版本

class ExtTranslator extends Translator{
    public function trans($params){
        echo 'fdsfds'; // here you could add what you like
        return parent::trans($params);
    }
}

,是的,这很难帮助你,因为我真的不知道你在做什么,要使用这些代码,你必须首先理解它。