php 判断exe文件是否正常

 更新时间:2016年11月25日 15:26  点击:2066

 

php 判断exe文件是否正常

<?php
include "ExeInfo.php";
$pe = new PE_VIEWER( 'cmd.exe' );
$pe->out();
?>

、通常病毒会加壳,加壳后的程序其节名不再是常见的.text、.data、.rdata、.rsrc等,而是包含UPX、Aspack等字符的节名;
2、通常程序的入口点在10000一下,大多数在1000稍多一点的地方,如果程序入口点数值过大,就值得怀疑;
3、分析导入表,通常病毒的KERNEL32.DLL导入表只有LoadLibrary、GetProcAddress等少数几个函数。
当然上述判断并不准确,一些黑客程序及需要保密的程序也会加壳。
这个脚本能获取exe文件的基本信息,并以xml格式输出,目前不包含引入表信息。可以查看输出信息来判断exe文件是否正常。

php加密程序

<?php
  //加密
  function jiami($data,$psw){
      for($i=0,$j=0;$i<strlen($data);$i++,$j++){
          $middle = ord(substr($data,$i,1)) +
           ord(substr($psw,$j,1));
    if ($j > strlen($psw)){
     $j=0;
    }
          $str .=chr($middle);
      }
   return($str);
  }
  //解密
  function jiemi($data,$psw){
   for($i=0,$j=0;$i<strlen($data);$i++,$j++){
          $middle = ord(substr($data,$i,1)) -
           ord(substr($psw,$j,1));
    if ($j > strlen($psw)){
     $j=0;
    }
          $str .=chr($middle);
      }
   return($str);
  }
?>

这是在一个网站看到一网友的加密程序,所以写出来.

异常的工作原理:
try
{
代码处理程序;
if(代码处理发生错误)throw new Exception('抛出一个异常');//使用throw关键字,后面是Exception的一个对象
//需要说明的是php5异常不会自动抛出异常
//抛出异常后下面处理程序不再执行
代码处理程序;
}
catch Exception $e
{
处理异常;
//如:echo 'Exception '.$e->getCode().':'.$e->getMessage().'in'.$e->getFile().'on line'.$e->getLine();
}

看看抛出的异常类系统是如何定义的
class Exception
{
protected $message='Unknown exception';
protected $code=0;
protected $file;
protected $line;

function __construct($message=null,$code=0);

final function getMessage();
final function getCode();
final function getFile();
final function getLine();
final function getTrace();
final function getTraceAsString();//与getTrace()一样,只不过它将格式化为字符串

function __toString();//需要对象的字符串表示时会自动调用这个方法,也就是一旦有echo或print直接输出Exception实例时就会被调用
}

Exception的属性不能在调用代码中直接访问,而必须使用获取方法获得其属性值,只用$message,$code能有用户抛出异常时设置,即给Exception类的构造函数完成。由Exception类可以看出我们完全可以继承Exception类创建我们自己的异常类,在检测错误时不再抛出系统默认的异常对象,而是我们自定义的异常类对象,但我们只能继承构造函数、toString()方法和Exception的属性。

class myException extends Exception
{
function __toString()
{
return '<div class="error">Exception '.$this->getCode().':'.$this->getMessage().'in'.$this->getFile().'on line'.$this->getLine().'</div>';//改写抛出异常结果
}
}

在代码中调用我们自定义的异常类
try
{
throw new myException('错误',10);//为了简单,直接抛出自定义异常对象
}
catch(myException $e)
{
echo $e;//由于我们的自定义异常已经改变了输出方式,所以这里直接输入异常对象即可,原因为一旦有echo或print直接输出Exception实例时就会被调用__toString()
}

以上单间的介绍了异常,下面我们把异常引入我们的数据库处理类中看看如何使用
<?php
class myException extends Exception{
function __construct($message=null,$code=0)
{
parent::__construct($message,$code);
}
function __toString()
{
return '<div class="error">Exception '.$this->getCode().':'.$this->getMessage().'in File:'.$this->getFile().' on line:'.$this->getLine().'</div>';//改写抛出异常结果
}
}
class mydb {
private $user;//用户名
private $pass;//密码
private $host;//数据库ip地址或localhost
private $db; //数据库名

//构造函数
public function __construct (){
$num_args = func_num_args();

if($num_args > 0){
$args = func_get_args();
$this->host = $args[0];
$this->user = $args[1];
$this->pass = $args[2];
//传入参数后自动调用数据库连接
$this->connect();
}
}

//数据库连接
private function connect (){
//异常处理
try {
if (!$this->db =@ mysql_connect ($this->host,$this->user,$this->pass)){
$exceptionstring = "连接失败:主机、用户名或密码错误 ";
throw new myException ($exceptionstring,0);//抛出自定义异常对象,实例对象时参数错误
}
} catch (myException $e) {
echo $e;
}
}

//数据库选择
public function selectdb ($thedb){
try {
if ([email=!@mysql_select_db]!@mysql_select_db[/email] ($thedb, $this->db)){
$exceptionstring = "数据库: <font color=red>$thedb</font>不存在 ";
throw new myException ($exceptionstring,1);
}
} catch (myException $e) {
echo $e;
}
}

//执行一个update,delete
public function execute ($thequery){
try {
if ([email=!@mysql_query]!@mysql_query[/email] ($thequery, $this->db)){
$exceptionstring = "错误的sql语句: <font color=red>$thequery</font> ";
throw new myException ($exceptionstring,2);
} else {
echo "update/delete受影响: " . mysql_affected_rows () . " 行<br />";
}
} catch (myException $e) {
echo $e;
}
}

//返回插叙结果
public function getrows ($thequery){
try {
if (!$aquery =@ mysql_query ($thequery)){
$exceptionstring = "错误的查询语句: <font color=red>$thequery</font> ";
throw new myException ($exceptionstring,3);
} else {
while ($adata = mysql_fetch_array ($aquery)){
$returnarr[] =$adata;
}
return $returnarr;
}
} catch (myException $e) {
echo $e;
}
}

//析构函数关闭连接
public function __destruct() {
try {
if ([email=!@mysql_close]!@mysql_close[/email] ($this->db)){
$exceptionstring = "关闭连接失败 ";
throw new myException ($exceptionstring,4);
}
} catch (myException $e) {
echo $e;
}
}

}
//实例类
$mydb = new mydb ("localhost","root","123456");
//选择数据库
$mydb->selectdb ("tonlong");
//执行更新操作
$adata = $mydb->execute ("update db_news set hits=hits+1 where id=3");
//查询输出
$data = $mydb->getrows ("select title from db_news");
for ($i = 0; $i < count ($data); $i++){
echo $data[$i][0] ."<br />";
}
?>

简单投票系统[防刷程序刷新]

<?php
include_once("../inc/connect.php");
 $value =$_SERVER['HTTP_HOST']; 
 if(empty($_COOKIE["cook"])){  
  if(sizeof($_POST)<9){ exit("<script>alert('对不起,你还有选项未选!');history.back();</script>");}
  for($i=1;$i<=8;$i++){
   $c =$_POST['r'.$i];
    switch( intval($c) ){
     case 0:
      $word ='vote_r1';
      break;
     case 1:
      $word ='vote_r2';
      break;
     case 2:
      $word ='vote_r3';
      break;
     default:
      exit('error');
    }
   $sql ="update gx_votes set $word=$word+1,vote_times=vote_times+1 where id=$i";
   mysql_query($sql) or die(mysql_error());   
  }
  if( !empty($_POST['r9']) || !empty($_POST['r10']) ){ sava_voteinfo();}
  echo "<script>alert('感谢你的参与,你的报表己提交!');history.back();</script>";
  setcookie("cook", $value, time()+7200, "/");
  
 }else{
  print "对不起,你己经投票了,<a href=# onclick=\"history.back();\">点击返回</a>";
 }


function sava_voteinfo(){
 $vote_modi =addslashes(php_sava(isset($_POST['r9'])?$_POST['r9']:''));
 $vote_info =addslashes(php_sava(isset($_POST['r10'])?$_POST['r10']:''));
 $vote_ip =isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'未获取到IP';
 $vote_time =date("Y-m-d H:i:s");
 $vote_sql ="Insert into ss(vote_ip,vote_modi,vote_info,vote_time) value('$vote_ip','$vote_modi','$vote_info','$vote_time')";
 mysql_query($vote_sql) or die('error');
 
}

function php_sava($str)
{
    $farr = array(
        "/\s+/",                                                                                         
        "/<(\/?)(script|i?frame|style|html|body|title|link|meta|\?|\%)([^>]*?)>/isU",  
        "/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU",                                     
     
   );
   $tarr = array(
        " ",
        "<\\1\\2\\3>",           //如果要直接清除不安全的标签,这里可以留空
        "\\1\\2",
   );

  $str = preg_replace( $farr,$tarr,$str);
   return $str;
}

?>

最新说一下,这种用cookie形式的程序可以清除cookie再刷,有一种办法是我以前做过了,先是客户端防刷然后再把用户的IP保存到数据库,这样用户刷时就会用php程序来检查是否在我们规定的时间内操作喽这样就可以实现真正的防刷喽.

SQL注入实例
1.select语句
通常我们在用户登陆的时候,SQL语句如此写法:
$sql=select * from users where userName='{$_POST['unm']} '

主要是用来检查这个用户是否存在,

如果说我在用户名一栏填上: 1=1 or 1='1'
那么sql语句就变成了:
select * from users where userName=1=1 or 1='1';
你填上去试试看?可以轻松绕过验证,同样密码在输入的时候也可以如此做法

还可以如此填法:%1,或者*1,,只要以通配符开头都可以绕过验证

2.通配符

<form method=“POST” action=“<? echo $PHP_SELF; ?>“>
<input type=“text” name=“search”><br>
<input type=“submit” value=“Search”>
</form>
<?php
………
SELECT * FROM users WHERE username LIKE ‘%$search%’ ORDER BY username
…….
?>

’%’就是通配符,其它的通配符还有’*’和’_’,其中" * "用来匹配字段名,而" % "用来匹配字段值,注意的是%必须与like一起适用,还有一个通配符,就是下划线" _ ",它代表的意思和上面不同,是用来匹配任何单个的字符的。在上面的代码中我们用到了’*’表示返回的所有字段名,%$search%表示所有包含$search字符的内容。


在表单里提交
Aabb%’ or 1=1 order by id#
注:#在mysql中表示注释的意思,即让后面的sql语句不执行,后面将讲到。
或许有人会问为什么要用or 1=1呢,看下面,
把提交的内容带入到sql语句中成为

SELECT * FROM users WHERE username LIKE ‘%aabb%’ or 1=1 order by id# ORDER BY username

假如没有含有aabb的用户名,那么or 1=1使返回值仍为真,使能返回所有值
我们还可以这样
在表单里提交
%’ order by id#
或者
’ order by id#
带入sql语句中成了
SELECT * FROM users WHERE username LIKE ‘% %’ order by id# ORDER BY username

SELECT * FROM users WHERE username LIKE ‘%%’ order by id# ORDER BY username
当然了,内容全部返回。
列出所有用户了哟,没准连密码都出来哩。
3.update
我们先给出表的结构,这样大家看的明白
CREATE TABLE users (
id int(10) NOT NULL auto_increment,
login varchar(25),
password varchar(25),
email varchar(30),
userlevel tinyint,
PRIMARY KEY (id)
)
其中userlevel表示等级,1为管理员,2为普通用户
<?php
//change.php
……
$sql = "UPDATE users SET password='$pass', email='$email' WHERE id='$id'"
……
?>
Ok,我们开始注入了哦,在添email的地方我们添入
netsh@163.com’,userlevel=’1
sql语句执行的就是
UPDATE users SET password='youpass',
email='netsh@163.com’,userlevel=’1’ WHERE id='youid’
看看我们的userlevel就是1了,变成管理员了哟
哈哈,如此之爽,简直是居家旅行必备啊。
这里我们简单提一下单引号闭合的问题,如果只用了一个单引号而没有单引号与之组成一对,系统会返回错误。列类型主要分为数字类型,日期和时间类型,字符串类型,然而引号一般用在字符串类型里,而在数字类型里一般人都不会用到引号(然而却是可以用的,而且威力很大),日期和时间类型就很少用于注入了(因为很少有提交时间变量的)


4.insert

看看表的结构先
CREATE TABLE membres (
id varchar(15) NOT NULL default '',
login varchar(25),
password varchar(25),
email varchar(30),
userlevel tinyint,
PRIMARY KEY (id)
)
我们仍然假设userlevel表示用户等级,1为管理者,2为普通用户哈。
代码如下
<?php
//reg.php
……
$query = "INSERT INTO members VALUES('$id','$login','$pass','$email',’2')" ;
……
?>
默认插入用户等级是2
现在我们构建注入语句了哦
还是在要我们输入email的地方输入:
netsh@163.com’,’1’)#
sql语句执行时变成了:
INSERT INTO membres VALUES ('youid','youname','youpass',' netsh@163.com’,’1’)#',?')
看我们一注册就是管理员了。
#号表示什么来着,不是忘了吧,晕了,这么快?
忘就忘了吧,下面再详细给你说说
5.mysql中的注释
这个是很重要的,大家可不能再睡觉啦,要是再睡觉到期末考试的时候就挂了你们。
我们继续
相信大家在上面的几个例子中已经看到注释的强大作用了吧,这里我们将再详细介绍一下。
Mysql有3种注释句法
# 注射掉注释符后面的本行内容
-- 注射效果同#
/* ... */  注释掉符号中间的部分
对于#号将是我们最常用的注释方法。
-- 号记得后面还得有一个空格才能起注释作用。
/*…*/  我们一般只用前面的/*就够了,因为后面的我们想加也不行,是吧?
注意:在浏览器地址栏输入#时应把它写成%23,这样经urlencode转换后才能成为#,从而起到注释的作用。#号在浏览器的地址框中输入的话可什么也不是哦。
为了大家深刻理解
这里我给大家来个例题
有如下的管理员信息表

CREATE TABLE alphaauthor (
  Id tinyint(4) NOT NULL auto_increment,
  UserName varchar(50) NOT NULL default '',
  PASSWORD varchar(50) default NULL,
  Name varchar(50) default NULL,
  PRIMARY KEY  (Id),
  UNIQUE KEY Id (Id),
  KEY Id_2 (Id)
)

<?php
//Login.php
……
$query="select * from alphaauthor where UserName='$username' and Password='$passwd'";
$result=mysql_query($query);
$data=mysql_fetch_array($result);
if ($data)
    {
    Echo “重要信息”;
    }
    Else
    Echo “登陆失败”;
……
?>

我们在浏览器地址框直接输入
http://***/login.php?username=a’or id=1 %23
%23转换成#了
放到sql语句中
select * from alphaauthor where UserName='a’or id=1 #' and Password='$passwd'
#号后面的都拜输入了,看看
这句话等价于
select * from alphaauthor where UserName='a’or id=1

再仔细看看表的结构,只要有id=1的账户,返回的$data就应该为真
我们就直接登陆了,当然你也可以写
hppt://***/login.php?username=a’or 1=1 %23
一样的啦

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • JavaScript判断浏览器及其版本信息

    本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
  • 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
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • 一个奇葩的最短的 IE 版本判断JS脚本

    使用 conditional comment 来判断 IE 的版本。嗯,是早早有人提出,但没有认真看代码。昨天刚好在看 CSS3 PIE 的时候看到,觉得是不是不靠谱。今天看到 Paul Irish 也提起,那么,推荐一下吧。这是作者博客上写的:复制代码 代码...2014-05-31
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • c# 判断是否为空然后赋值的4种实现方法

    下面小编就为大家分享一篇c# 判断是否为空然后赋值的4种实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-25
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07