php利用Zend Guard 6.0: 加密php文件教程

 更新时间:2016年11月25日 15:21  点击:1901
加密php文件对于一些重要的非开源程序都会这样做了,而加密php程序官方有提供一个Zend工具了,下面我们来给各位介绍Zend加密php文件的操作步骤.

安装破解版的Zend Guard 6.0软件之后,博主Jhonse哥就尝试给php文件加密。


第一步: 打开Zend Guard 6.0软件


20150124142748

 

20150124142757

 

第二步: php文件加密

 

1. 创建Zend Guard Project

 

20150124143014

 

2. 填写项目信息

 

20150124143436

 

3. 添加源文件或者源文件夹

 

20150124143849

 

4. 配置源文件加密属性

 

因为我的windows/Linux服务器的php版本都是5.4的,所以选择版本为5.4加密

 

20150124144015

 

5. 开始加密

 

20150124144247

 

6. 加密成功

 

20150124144448

 

7. 查看php文件加密效果

 

20150124144627

 

20150124144711

 

本文我们来讲讲另外一种网站注入攻击方式,PNG图像元数据中iFrame注入攻击,这个也是本人最近接触,以前没有注意过,或许也有很多站长不清楚,现在分享出来。

我们一直在努力保持领先的最新趋势,今天我们发现了一个非常有趣的事,这或者是我们之前没有发现,或者是刚发生的。 我们只能说这是新发现的。

我们都了解的iFrame注入攻击,对吧?

了解一个iFrame注入

今天的iFrame 是非常标准的HTML标记,它是在自己网页中嵌入其他网站内容的简单方式。 被几乎所有的浏览器支持和百万计的网站使用,使用AdSense吗? 那么你的网站中就有一个iFrame。

我知道这东西很好,然而总是福祸相惜。

今天的攻击,特别是当我们谈论路过式下载,首选是利用IFRAME标记。 它简单方便,只需简单的属性修改,攻击者可以稳妥的从另一个站点嵌入代码,并通过客户的浏览器不知不觉的加载。

像这样:

iframe-sample

攻击者通常从其他网站嵌入的恶意文件,通常是一个PHP文件或类似的形式。 当然,这并不是唯一的方法,但是是最普遍的。 从检测和修复的角度来看,这往往很容易修复。

新的iFrame注入法

然而今天,我们发现一个有趣的iFrame注入类型。

它的特殊之处不是在iframe标签中嵌入的内容,而是它分发恶意软件的方式。 你会看到,攻击者将威胁隐藏在PNG文件中。

我几乎可以听到很多你的窃笑,PFF .. 这不是新的…. 但问题是在细节上我的朋友。

如下,iFrame加载了一个有效的文件,没有什么恶意,一个叫jquery.js的JavaScript文件。这一切看上去都很好。你要细细的找:

blog_injection1-494x650

起初,很多人会说我们傻。 这些代码很好,没看见什么问题,对不对? 然后,我们注意到了这个小函数,loadFile()。 函数本身并不奇怪,但事实上,它是装载一个PNG-var strFile = ‘./dron.png。 你会被它惊讶良久,它才是一个真正的黑手。

自然,下一步就是好奇的打开dron.png文件。 会有什么可怕的事情发生吗?

噢,什么都没有,太无聊了,这纯粹是浪费时间。

Sucuri-iframe-png

但是,请等一下,我发现这里有个有趣的小循环。

Sucuri-PNG-Decoding-Loop

嗯,这是确实挺奇怪的,这是一个解码循环。 为什么要一个循环的解码PNG文件呢?

作为一个优秀的研究人员,采取最简单的方式,我可以将它加载到简单的测试页上 并提取图像内容。搞定!

测试页上加载它之后这,我们获得了strData变量:

sucuri-png-iframe-payload

看到它在干嘛了吗?

它做了个iFrame注入,并把它嵌入到PNG的元数据中,像一个新的分配机制。

有两点需要特别注意了,它使用createElement做了一个iFrame标签,然后设置elm.style.position.left 和 elm.style.position.top 属性的值为-1000px,把iframe放到可视区域之外。这些值都是负值,在浏览器中根本看不到。但是你知道谁能看到吗?只有浏览器和Google能看到。这就是下载驱动和搜索引擎感染(SEP)攻击的小伎俩。

最后我们在elm.src元素中发现了真正的威胁。

做的这么独特到底有什么用呢?

它尽力隐藏真正的威胁的水平是独特的。现在的杀毒软件不会解码图像元数据,直到JavaScript文件加载完毕就停止扫描。不会追踪cookie文件,对于攻击者来说,这太好了,使它们很难被发现。

记住一点,尽管我们这里谈论的是PNG文件,这些方法和概念也可以应用到其他类型图像中。重要的一点是:留意你的web 服务状态,了解哪些修改和未修改的文件并确保漏洞未被利用。

通常情况下,一些新的侦查和排障需要一定的时间。 现在我们的 网站恶意软件扫描器能发现它吗 ? 绝对可以!

验证码通常是用来安全保证我们网站注册或登录不被注入的,但为了更安全我们通常会生成一些混合验证码了,下面一起来看看例子.

在我们开发登录模块或者是论坛的灌水模块的时候,为了防止恶意提交,需要用到验证码。验证码就是用来区分人和机器的一种手段,当然这种手段不是万无一失,但总归会起到一些作用。

验证码的实现需要GD库的支持,没有开启GD库的童鞋需开启GD库。

其实验证码的制作和使用非常的简单,仅仅只是需要4个步骤就可以搞定:创建验证码底图,显示验证码内容,增加干扰元素,输出验证码。下面我们来进行步骤拆分:

第一步:创建验证码底图

$image = imagecreatetruecolor(100, 30); // 创建一个宽为 100 高为 30 的底图  该底图的背景色 为黑色  是系统定义的
$bgcolor = imagecolorallocate($image, 255, 255, 255);   // 为上面创建的底图分配 白色的背景颜色
imagefill($image, 0, 0, $bgcolor);  // 填充白色背景色


第二步:显示验证码内容

// 输出验证码内容
for ($i=0; $i < 4; $i++) {
    $fontsize = 6;
    $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));
    $data = 'qwertyuipkjhgfdsazxcvbnm23456789';
    $content = substr($data, rand(0, strlen($data)), 1);

    $x = ($i*100/4) + rand(5,9); 
    $y = rand(5,10);
    imagestring($image, $fontsize, $x, $y, $content, $fontcolor);  //在图像上水平输出一行字符串
}


第三步:增加干扰元素

// 增加干扰点元素
for ($i=0; $i < 300; $i++) {
    $pointcolor = imagecolorallocate($image, rand(50,200), rand(50,200), rand(50,200));
    imagesetpixel($image, rand(0,99), rand(0,29), $pointcolor);
}

// 增加干扰线元素   线 和 点 的颜色一定要控制好  要比验证码数字的颜色浅  避免出现验证码数字看不见的现象
for ($i=0; $i < 4; $i++) {
    $linecolor = imagecolorallocate($image, rand(100,240), rand(100,240), rand(100,240));
    imageline($image, rand(0,99), rand(0,29), rand(0,99), rand(0,29), $linecolor);
}

第四步:输出验证码

// 输出创建的图像   在输出图像之前 必须输出头信息  用来规定输出的图像类型
header("Content-Type: image/png");
imagepng($image);

// 销毁图像
imagedestroy($image);


至此,一个简单的验证码就实现了,关于实现验证码的注意事项已经写在了注释里。

使用验证码的时候,我们一般都需要用session来保存以便验证,在这里就不作详细介绍。

我们只要查看开源的程序几乎都会有下面两段差不多相关的代码,代码的功能就是过滤提交数据中的一些特殊字符了,通常是有post与get了,下面来看看吧.

 

/**
 * 递归方式的对变量中的特殊字符进行转义
 *
 * @access  public
 * @param   mix     $value
 *
 * @return  mix
 */
function addslashes_deep($value)
{
    if (empty($value))
    {
        return $value;
    }
    else
    {
        return is_array($value) ? array_map('addslashes_deep', $value) : addslashes($value);
    }
}

使用:

/* 对用户传入的变量进行转义操作。*/
if (!get_magic_quotes_gpc())
{
    if (!empty($_GET))
    {
        $_GET  = addslashes_deep($_GET);
    }
    if (!empty($_POST))
    {
        $_POST = addslashes_deep($_POST);
    }
 
    $_COOKIE   = addslashes_deep($_COOKIE);
    $_REQUEST  = addslashes_deep($_REQUEST);
}

AES加密是一个非常高级的加密了,听很多人说要破解AES加密是非常的困难了,下文小编来为各位整理一个使用AES加密算法加密数据的例子。

在研究Discuz 的时候,发现Discuz有一套相当完美的加密算法(相对而言)。这个算法可以将数据加密后,储存起来,到需要用的时候,用之前加密的秘钥将之还原。

除了这个之外,还有AES这个算法能够将数据很好的加密起来,在传输过程中不容易被破解。

在PHP中,我们必须先安装好mcrypt这个模块,并且添加相应版本的扩展到php中,详情可以看 不重新编译PHP安装Mcrypt扩展

AES加密模式和填充方式有以下之中,但不是全部

算法/模式/填充                16字节加密后数据长度        不满16字节加密后长度
AES/CBC/NoPadding             16                          不支持
AES/CBC/PKCS5Padding          32                          16
AES/CBC/ISO10126Padding       32                          16
AES/CFB/NoPadding             16                          原始数据长度
AES/CFB/PKCS5Padding          32                          16
AES/CFB/ISO10126Padding       32                          16
AES/ECB/NoPadding             16                          不支持
AES/ECB/PKCS5Padding          32                          16
AES/ECB/ISO10126Padding       32                          16
AES/OFB/NoPadding             16                          原始数据长度
AES/OFB/PKCS5Padding          32                          16
AES/OFB/ISO10126Padding       32                          16
AES/PCBC/NoPadding            16                          不支持
AES/PCBC/PKCS5Padding         32                          16
AES/PCBC/ISO10126Padding      32                          16

下面就是在PHP中使用AES对数据加密

AES-CBC 加密方案

 代码如下 复制代码

<?php
$privateKey = "1234567812345678";
$iv = "1234567812345678";
$data = "Test String";

//加密
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $privateKey, $data, MCRYPT_MODE_CBC, $iv);
echo(base64_encode($encrypted));
echo '<br/>';

//解密
$encryptedData = base64_decode("2fbwW9+8vPId2/foafZq6Q==");
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $privateKey, $encryptedData, MCRYPT_MODE_CBC, $iv);
echo($decrypted);
?>

AES-ECB加密方案

 代码如下 复制代码

<?php 
//加密   
$key = '1234567890123456';   
$content = 'hello';   
$padkey = pad2Length($key,16);   
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');   
$iv_size = mcrypt_enc_get_iv_size($cipher);   
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); #IV自动生成?   
echo '自动生成iv的长度:'.strlen($iv).'位:'.bin2hex($iv).'<br>';   
if (mcrypt_generic_init($cipher, pad2Length($key,16), $iv) != -1)   
{   
   // PHP pads with NULL bytes if $content is not a multiple of the block size..   
   $cipherText = mcrypt_generic($cipher,pad2Length($content,16) );   
   mcrypt_generic_deinit($cipher);   
   mcrypt_module_close($cipher);   
    
   // Display the result in hex.   
   printf("128-bit encrypted result:n%snn",bin2hex($cipherText));   
   print("<br />");   
    
}   
//解密   
$mw = bin2hex($cipherText);   
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');   
if (mcrypt_generic_init($td, $padkey, $iv) != -1)   
{   
   $p_t = mdecrypt_generic($td, hexToStr($mw));   
   mcrypt_generic_deinit($td);   
   mcrypt_module_close($td);   
    
   $p_t = trimEnd($p_t);   
   echo '解密:';   
   print($p_t);   
   print("<br />");   
   print(bin2hex($p_t));   
   echo '<br><br>';   
}   
//将$text补足$padlen倍数的长度   
function pad2Length($text, $padlen){   
   $len = strlen($text)%$padlen;   
   $res = $text;   
   $span = $padlen-$len;   
   for($i=0; $i<$span; $i++){   
       $res .= chr($span);   
   }   
   return $res;   
}   
//将解密后多余的长度去掉(因为在加密的时候 补充长度满足block_size的长度)   
function trimEnd($text){   
   $len = strlen($text);   
   $c = $text[$len-1];   
   if(ord($c) <$len){   
       for($i=$len-ord($c); $i<$len; $i++){   
           if($text[$i] != $c){   
               return $text;   
           }   
       }   
       return substr($text, 0, $len-ord($c));   
   }   
   return $text;   
}   
//16进制的转为2进制字符串   
function hexToStr($hex)   
{   
   $bin="";   
   for($i=0; $i<strlen($hex)-1; $i+=2)   
   {   
       $bin.=chr(hexdec($hex[$i].$hex[$i+1]));   
   }   
   return $bin;   
}   

AES-ECB加密方案

 代码如下 复制代码

<?php       
$key = '1234567890123456';   
$key = pad2Length($key,16);   
$iv = 'asdff';   
$content = 'hello';   
$content = pad2Length($content,16);   
$AESed =  bin2hex( mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$content,MCRYPT_MODE_ECB,$iv) ); #加密   
echo "128-bit encrypted result:".$AESed.'<br>';   
$jiemi = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,hexToStr($AESed),MCRYPT_MODE_ECB,$iv); #解密   
echo '解密:';   
echo trimEnd($jiemi);     
?> 

以上只是我列出的简单的3种加密方法,事实上还有很多中方法,需要我们不断的学习。密码学的道路还任重而道远

[!--infotagslink--]

相关文章

  • Painter绘制红衣喝酒男水粉画效果教程

    今天小编在这里就来给Painter的这一款软件的使用者们来说一说绘制红衣喝酒男水粉画效果的教程,各位想知道具体绘制步骤的使用者,那么下面就快来跟着小编一起看一看教程...2016-09-14
  • iPhone6怎么激活?两种苹果iPhone6激活教程图文详解

    iPhone6新机需要激活后才可以正常使用,那么对于小白用户来说,iPhone6如何激活使用呢?针对此问题,本文就为大家分别介绍Wifi无线网络激活以及iPhone6连接电脑激活这两种有效的方法,希望本文能够帮助到大家...2022-09-14
  • Photoshop制作雨中野外孤独行走的一头牛海报教程

    今天小编在这里就来给各位photoshop的这一款软件的使用者们来说下制作雨中野外孤独行走的一头牛海报的教程,各位想知道具体制作方法的使用者们,大家就快来看一看小编给...2016-09-14
  • Painter绘制帅气卡通魔法王子漫画教程

    今天小编在这里就来给Painter的这一款软件的使用者们来说一下绘制帅气卡通魔法王子漫画的具体教程,各位想知道绘制步骤的使用者,那么下面就快来跟着小编一起看一看教程...2016-09-14
  • Illustrator鼠绘堆雪人的孩童矢量插画教程

    今天小编在这里就来给各位Illustrator的这一款软件的使用者们来说说鼠绘堆雪人的孩童矢量插画的教程,各位想知道具体绘制方法的使用者们,那么各位就快来跟着小编来看看...2016-09-14
  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • 安卓手机app添加支付宝支付开发教程

    支付宝支付在国内算是大家了,我们到处都可以使用支付宝了,下文整理介绍的是在安卓app应用中使用支付宝进行支付的开发例子。 之前讲了一篇博客关与支付宝集成获取...2016-09-20
  • 美图秀秀给照片天空加蓝天白云教程一览

    今天小编在这里就来给美图秀秀的这一款软件的使用者们来说下究竟该怎么给照片天空加蓝天白云的教程,各位想知道具体制作步骤的,那么下面就来跟着小编一起看看吧。 ...2016-09-14
  • llustrator绘制扁平化风格卡通警察护士空姐肖像教程

    今天小编在这里就来给llustrator的这一款软件的使用者们来说一说绘制扁平化风格卡通警察护士空姐肖像的教程,各位想知道具体绘制步骤的使用者们,那么下面就快来跟着小编...2016-09-14
  • Illustrator绘制一个方形的录音机图标教程

    今天小编在这里就来给Illustrator的这一款软件的使用者们来说一下绘制一个方形的录音机图标的教程,各位想知道具体绘制方法的使用者们,那么下面就来看一下小编给大家分...2016-09-14
  • photoshop简单制作一个搞笑的换脸表情包教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说一说简单制作一个搞笑的换脸表情包的教程,各位想知道具体制作方法的使用者们,那么大家就快来看一看教程吧。...2016-09-14
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • photoshop给手绘画调色变换场景后期教程

    今天小编在这里就来给各位photoshop的这一款软件的使用者们来说说给手绘画调色变换场景的后期教程,各位想知道具体后期处理步骤的使用者们,那么大家就快来跟着小编来看...2016-10-02
  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • 美图秀秀让你胸丰满起来处理教程

    今天小编在这里就来给美图秀秀的这一款软件的使用者们来说一下让你胸丰满起来的处理教程,各位想知道具体处理步骤的,那么下面就快来跟着小编一起看一下教程吧。 给...2016-09-14
  • Painter绘制雷神传插画教程

    今天小编在这里就来给Painter的这一款软件的使用者们来说一下绘制雷神传插画的教程,各位想知道具体绘制步骤的使用者,那么下面就快来跟着小编一起看看绘制方法吧。 ...2016-09-14
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25