xml地图|网站地图|网站标签 [设为首页] [加入收藏]
PHP之外观模式,reactor加密源码保软件安全
分类:编程

1.认识程序

外观(Facade)模式

当使用子系统的代码时,你也许会发现自己过于深入地调用子系统的逻辑代码。如果子系统代码总是在不断变化,而你的代码却又在许多不同地方与子系统代码交互,那么随着子系统的发展,你也许会发现维护代码变得非常困难。

在项目中集成复杂的第三方代码,或在系统中逐渐形成大量仅在系统自身内部有用的代码,在这些情况下,你总可以应用外观模式,为复杂的系统创建一个简单、清晰的接口。

假设有下面一段很乱的代码,其功能是从文件中获取log信息并将它转换为对象:

function getProductFileLines($file)
{
    return file($file);
}

function getProductObjectFromID($id, $productname)
{
    // 一些数据库查询
    return new Product($id, $productname);
}

function getNameFromLine()
{
    if (preg_match("/.*-(.*)sd+/"), $line, $array) {
        return str_replace('_', ' ', $array[1]);
    }
    return '';
}

function getIDFromLine($line)
{
    if (preg_match("/^(d{1,3})-/", $line, $array)) {
        return $array[1];
    }
    return -1;
}

class Product()
{
    public $id;
    public $name;
    public __construct($id, $name)
    {
        $this->id = $id;
        $this->id = $name;
    }
}

我们的目的是将包含类似下面数据的文件转换为一个对象数组:

 234-ladies_jumper 55
 532-gents_hat 44

客户端使用该功能时要调用所有的方法:

$lines = getProductFileLines('text.txt');
$objects = array();
foreach ($lines as $line) {
    $id = getIDFromLine($line);
    $name = getNameFromLine($line);
    $objects[$id] = getProductObjectFromID($id, $name);
}

如果在项目中直接调用这些方法,那么我们的代码会和子系统紧紧耦合在一起。当子系统变化时,或者我们决定将其与子系统完全断开时,代码就会出问题。

下面这个简单的类为上面的过程式代码提供了一个接口:

class ProductFacade
{
    private $products = array();

    function __construct($file)
    {
        $this->file = $file;
        $this->compile();
    }

    private function complie()
    {
        $lines = getProductFileLines($this->line);
        foreach ($lines as $line) {
            $id = getIDFromLine($line);
            $name = getNameFromLine($line);
            $this->products[$id] = getProductObjectFromID($id, $name);
        }
    }

    function getProducts()
    {
        return $this->products;
    }

    function getProduct($id)
    {
        return $this->product[$id];
    }
}

现在,从一个log文件访问Product对象就简单多了:

$facade = new ProductFacade('test.txt');
$facade->getProduct(234);

外观模式的好处:(1)对于调用者来说,访问代码变得简洁、非常方便.(2),由于只在一个地方调用子系统,减少了出错的可能.(3),Facade类还能使调用者避免不正确地使用内部方法,从而减少错误的发生。

注1:这是《深入PHP:面对对象、模式与实践》第十章的部分内容(其他的都看不懂,逃~)
注2:此文章也可以在我单独的博客里面看到:

上一次介绍用 Xenocode Postbuild for .NET 混淆加密源代码确保软件安全,本篇将讨论用 Eziriz .NET Reactor 混淆加密软件源代码,为从未用过该软件加密的用户分享net reactor使用方法,也就是平常说的net reactor使用教程。

1.1 程序

程序是指根据语言提供的指令按照一定逻辑顺序对获得的数据进行运算,并最终返回给我们的指令和数据的组合。

程序是用语言写成的。语言分高级语言和低级语言。

低级语言有时叫机器语言或汇编语言。

高级语言翻译成机器代码有两种方法,即解释和编译。

解释型语言是边读源程序边执行。高级语言是源代码。

编译型语言是将源代码完整地编译成目标代码后才能执行,以后在执行时不需要再编译。

图片 1

1.2 调试

程序错误被称为bug,查找bug的过程称为调试(debugging)。

1.3 语法错误

语法指的是程序的结构和此结构的规则。比如('hello,worldbank'),括号中的单引号是成对的,执行时才能正确执行。

如果输入('hello,world!)或(hello,world')就会报错,这属于语法错误。

1.4 运行错误

鉴于现在计算机软硬件的理论水平、工业制造水平、使用者的水平等一些内在的、外在的因素,出现错误并不稀奇,且程序越复杂,出现异常的概率越大。

异常的种类很多,如内存用尽、除数为零的除法等都可能导致异常。python为了把错误的影响降至最低,提供了专门的异常处理语句。

运行时错误一般在代码量偏多时才容易遇到。

1.5 语义错误

称序即使有语义错误,也能正常运行,不会产生任何错误信息,但得到的结果和我们预料的不一致。

发生这种错误一般是我们对语句的运行机制了解得不够透彻,自以为它应该如此运行,实际却不是这样。

还有可能是你解决问题的思路本身就是错的,写的程序当然是错的。

  还是那句话,用工具加密不能绝对确保软件安全,却能阻大多数人破解出软件的源代码,在一定程序上确保软件安全。

2.数据类型

2.1 整型

int 通常被称为整型或整数,是正、负整数,不带小数点。

2.2 浮点型

浮点型 由整数部分与小数部分组成,也可以使用科学计数法表示。

2.3 复数

复数由实数部分和虚数部分构成,可以用a+bj或complex(a,b)表示,复数的实部a和虚部b都是浮点型。

2.4 数据类型转换

int(x)将x转换为一个整数

float(x)将x转换为一个浮点数

complex(x)将x转换为一个复数,实数部分为x,虚数部分为0.

complex(x,y)将x和y转换为一个复数。实数部分为x,虚数部分为y。x和y是数字表达式。

2.5 常量

所谓常量就是不能变的变量,比如常用的数字常数π就是一个常量。

在python中,通常用全部大写的变量名表示常量。

python中有两个比较常见的变量名,即PI和E.

PI:数学常量pi(圆周率,一般以π表示)。

E:数学常量e,即自然对数。

  Eziriz .NET Reactor 的主要功能包括:NecroBit IL(转为非托管代码)、反 ILDASM(反编译器)、混淆代码、合并、压缩源码、支持命令行等,支持所有 .NET 框架和几乎所有开发语言,如 C#、C++.NET、VB.NET、Delphi.NET、J# 等等。

本文由澳门新葡亰手机版发布于编程,转载请注明出处:PHP之外观模式,reactor加密源码保软件安全

上一篇:爬虫学习笔记,自兴人工智能 下一篇:没有了
猜你喜欢
热门排行
精彩图文