Sequencia de color ANSI en PHP

Todas las terminales modernas soporte la sequencia de colores ANSI, con lo cual podemos hacer que nuestros scripts de consola sean mas divertidos llamativos xD utilizando colores para el texto o el fondo.

<?
 
// Ansi Escape Sequences in PHP
// by deerme.org
function movecursor($x,$y)
{
        return sprintf("33[".$x.";".$y."H");
}
 
function colorshell($c,$t,$f = 40)
{
        // Color
        // 30 - 37
        // Fondo 40-47
        return sprintf("%c[%d;%d;%dm".$t,27,1, $c ,$f);
}
 
 
 
echo colorshell(32,"Welcome to Testing Server ");
echo colorshell(35,"
 
                          /|_
                        ,'  .
                    ,--'    _,'
                   /       /
                  (   -.  |
                  |     ) |
                 (`-.  '--.)
                  `. )----'
");
 
echo colorshell(32,"ttt Miauuu ");
echo colorshell(37,"nr");
 
?>
 




Descargar Articulo y Ejemplos - Comentarios

Leer datos de planillas excel en PHP

Gracias a la clase Spreadsheet_Excel_Reader de Vadim Tkachenko, podemos leer facilmente una planilla excel en PHP, solo hay que crear una instancia de la clase y ejecutar el metodo read (entregando como parametro la ruta de la planilla excel) y el objeto obtendra todos los datos de la planilla en un arreglo sheets. En el siguiente ejemplo, podemos observar lo sencillo que es utilizar Spreadsheet_Excel_Reader.

    <?php
// Example by deerme.org
// pear path, example /usr/share/php5
$pear = "./pear";
ini_set("include_path",ini_get("include_path").":$pear");
require_once 'excel/reader.php';
 
// Instance
$xlsreader = new Spreadsheet_Excel_Reader();
// Output Encoding.
$xlsreader->setOutputEncoding('CP1251');
// File
$xlsreader->read('prom-psu-2010.xls');
// Data
print_r( $xlsreader->sheets[0] );
// http://deerme.org
?>

Descargar Articulo y Ejemplos - Comentarios

PEAR:DB - Una Capa de Abstración de Datos en PHP

PEAR:DB nos ofrece una Capa de Abstración de Datos en PHP, logrando separar las distintas funciones de acceso a bases de datos,consulta,etc. en una sola clase.

Permitiendonos trabajar con todos los motores de base de datos que soporta PHP (siempre y cuando el modulo este disponible) logrando que una aplicación sea mas portable.

Ejemplo de PEAR:DB (mysql,postgresql y sqlite)

<?php
// Example PEAR:DB by deerme.org
// PEAR in the Include Path
$pear = "/usr/share/php5/php/";
ini_set("include_path",ini_get("include_path").":$pear");
require_once("DB.php");
 
// Sqlite
print "--SQLITEn";
$dsn = array(
	'phptype'  => "sqlite",
	'hostspec' => "localhost",
	'database' => "./db/friends.db",
	'username' => "",
	'password' => ""
);
 
$dbh = DB::connect($dsn);
if (PEAR::isError($dbh))
	die("Error ".$dbh->getMessage() );
 
// List my Friend
$q = $dbh->query("SELECT * FROM friends;");
if (PEAR::isError($q))
	die("Error ".$q->getMessage() );
while( $row = $q->fetchRow(DB_FETCHMODE_ASSOC) )
{
	echo $row["name"]."-".$row["phone"]."n";
}	
// Add Friend
$dbh->query(" INSERT INTO friends ( name , phone ) VALUES ('Cat Kitty','523621422') ; ");	
 
unset($dbh);
 
// MySQL
print "--MySQLn";
$dsn = array(
	'phptype'  => "mysql",
	'hostspec' => "localhost",
	'database' => "peardb",
	'username' => "root",
	'password' => "123"
);
 
$dbh = DB::connect($dsn);
if (PEAR::isError($dbh))
	die("Problemas en la Conexi¦n ".$dbh->getMessage() );
 
// List my Friend
$q = $dbh->query("SELECT * FROM friends;");
if (PEAR::isError($q))
	die("Error ".$q->getMessage() );
while( $row = $q->fetchRow(DB_FETCHMODE_ASSOC) )
{
	echo $row["name"]."-".$row["phone"]."n";
}
 
// MySQL
print "--Postgresqln";
$dsn = array(
	'phptype'  => "pgsql",
	'hostspec' => "localhost",
	'database' => "peardb",
	'username' => "peardb",
	'password' => "peardb"
);
 
$dbh = DB::connect($dsn);
if (PEAR::isError($dbh))
	die("Problemas en la Conexi¦n ".$dbh->getMessage() );
 
// List my Friend
$q = $dbh->query("SELECT * FROM friends;");
if (PEAR::isError($q))
	die("Error ".$q->getMessage() );
while( $row = $q->fetchRow(DB_FETCHMODE_ASSOC) )
{
	echo $row["name"]."-".$row["phone"]."n";
}
 
 
?>
 

Descargar Articulo y Ejemplos - Comentarios

Esteganografía en PHP - Oculta información en imágenes

La Clase StreamSteganography permite guardar y leer informaciòn escrita en los bits de los pixel menos significantes de la imagen, logrando que la información no sea detectable a la vista humana. (Solo si se le aplican algoritmos a los pixels de la imagen). En definitiva la clase contiene dos metodos bastantes descriptivos.

<?php
 
/**
 * Steganography in PHP
 *
 * This class lets you write and read string in the least significant bit of an image, making "hide" information in an image.
 *
 * @package StreamSteganography
 * @author Pedro Vargas (deer@deerme.org) http://deerme.org
 * @version 0.1
 * @licence GNU General Public License (GPL)
 */
 
class StreamSteganography
{
 
	var $img_path;
	var $img_object = null;
 
	function StreamSteganography( $img_path , $w = 640 , $h = 480 )
	{
		if ( !is_file( $img_path ) )
		{
			if ( is_writable($img_path) )
				die("nThe image path is not writable");
			$this->img_object = imagecreatetruecolor($w,$h);
			imagepng($this->img_object, $img_path  ); 			
		}
		else
		{
			$inf = @getimagesize($img_path);
			if ( $inf == null )
				die("nThe image is not valid");
 
			if ( !	( $inf["mime"] == "image/jpeg"  OR $inf["mime"] == "image/png" OR $inf["mime"] == "image/gif" ) )
				die("nThe image must be jpeg/png/gif");
 
			if ( $inf["mime"] == "image/gif"  )
				$this->img_object = imagecreatefromgif( $img_path );
			if ( $inf["mime"] == "image/jpeg"   )
				$this->img_object = imagecreatefromjpeg( $img_path );
			if ( $inf["mime"] == "image/png"  )
				$this->img_object = imagecreatefrompng( $img_path );		
 
		}
		$this->img_path = $img_path;
	}
 
	function Write( $data )
	{
		$bits=$this->_asc2bin($data);
		$lenbit=strlen($bits);
		$nx=imagesx($this->img_object);
		$ny=imagesy($this->img_object);
		for($x=0,$bit=0; $x<$nx; $x++)
		{
			for($y=0; $y<$ny; $y++)
			{
				$pix=$this->_getcolor($this->img_object,$x,$y);
				foreach(array('R','G','B') as $C)
					$col[$C]=$bit<$lenbit?($pix[$C]|$bits[$bit])&(254|$bits[$bit++]):$pix[$C];
				imagesetpixel($this->img_object,$x,$y,$this->_setcolor($this->img_object,$col['R'],$col['G'],$col['B']));
			}
		}
		imagepng($this->img_object,$this->img_path); 
	}
 
	function Read()
	{
		$nx=imagesx($this->img_object);
		$ny=imagesy($this->img_object);
		for($x=0; $x<$nx; $x++ )
		{
			for($y=0; $y<$ny; $y++)
			{
				$pix=$this->_getcolor($this->img_object,$x,$y);		
				$data.=($pix['R']&1).($pix['G']&1).($pix['B']&1);
			}
		}
		return $this->_bin2asc($data);
	}
 
 
	function _bin2asc($str)
	{
		$len = strlen($str); 
		for ($i=0;$i<$len;$i+=8){ $ch=chr(bindec(substr($str,$i,8))); if(!ord($ch))break; $data.=$ch; }
		return $data; 
	}
 
 
	function _asc2bin($str)
	{
		$len = strlen($str);
		for($i=0;$i<$len;$i++)
			$data.=str_pad(decbin(ord($str[$i])),8,'0',STR_PAD_LEFT);	  
		return $data.'00000000';
	}
 
	function _getcolor($img,$x,$y) 
	{
		$color = imagecolorat($img,$x,$y);
		return array('R'=>($color>>16)&0xFF,'G'=>($color>>8)&0xFF,'B'=>$color&0xFF);
	} 
 
	function _setcolor($img,$r,$g,$b) 
	{
		$c=imagecolorexact($img,$r,$g,$b); if($c!=-1)return $c;
		$c=imagecolorallocate($img,$r,$g,$b); if($c!=-1)return $c;
		return imagecolorclosest($img,$r,$g,$b); 
	} 
 
 
 
}
 
// New Image
$ss = new StreamSteganography("/tmp/newimage.png");
$ss->Write("nThis message was written to ".date("Y-m-d H:i:s")."n");
// Read in Image
print $ss->Read();
// Concat Data in Image
$ss->Write(  $ss->Read(). " -  New Datan");
// Read in Image
print $ss->Read();
 
// Data in Image
$ss = new StreamSteganography("kitty.png");
$ss->Read()."n";
 
?>


/uploads/kitty.png
Como pueden ver en la imagen kitty.png se encuentra el mensaje "I'm the kitty cat and I say meow" oculto en los bits de los pixels menos significantes de la imagen.


Hace un par de dias he compartido la clase en el portal PHP Classes y me llego una notificación de "Notable Package" :)
Class StreamSteganography in PHP Classes

Descargar Articulo y Ejemplos - Comentarios

Ejemplo de Bash Setuid

En S.O like Unix, los permisos [url=http://en.wikipedia.org/wiki/Setuid]SetUid y SetGid[/url] permiten que un ejecutable tome los permisos efectivo del usuario-grupo del dueño del fichero, esto es util para otorgar permisos elevados en una tarea determinada (ping,passwd,etc.) pero peligroso si la aplicación contiene bug's.

Lo recomendable es tener siempre "controlado" el numero de ejecutables que contienen los permisos setuid o setgid, para lo cual solo debemos buscar en la raiz del sistema

find / ( -perm -4000 -o -perm -2000 ) -type f -print


Consola /bin/sh setuid

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
 
int main(void)
{
	printf("Real UIDt= %dn", getuid());
	printf("Effective UIDt= %dn", geteuid());
	printf("Real GIDt= %dn", getgid());
	printf("Effective GIDt= %dn", getegid());
	setuid(0);
	system("/bin/sh");
    return EXIT_SUCCESS;
}
 


Si compilamos el ejemplo y le damos los permisos necesarios ( gcc -Wall setuid.c -o setuid ; chmod ug+s setuid ) el ejecutable setuid ejecutará la consola /bin/sh con los permisos del usuario dueño del fichero. Lo cual no es aconsejable a menos que el objetivo sea tener un ejecutable setuidable.

Descargar Articulo y Ejemplos - Comentarios
 1 2 3 > 
Clean and Simple

Proyectos

Enlaces a mis classes,proyectos,ideas,etc para compartir xD

jQuery Powered

PHP

Contuct Us

Contact Us

info at deerme.org