Busca la funcion que necesitas!

martes, 10 de mayo de 2011

FASM - Strlen, longitud de una cadena

Bueno he mejorado una función que cuenta los caracteres que hay en una cadena en FASM, dejé, creo yo, bien comentado el source, pero ya saben que cualquier duda, pregunta, crítica o problema la pueden comentar en la entrada.



Código:
include 'win32ax.inc'
.data
;variables
cadena          db "linkenOS",0
salida          db ?,0

.code
  inicio:
    ;Limpiamos registros
    XOR ESI,ESI
    XOR EDI,EDI
    XOR ECX,ECX
    ;Movemos la cadena a
    ;el registro ESI
    LEA ESI,[cadena]
    ;Llamamos a la funcion
    CALL strlen
    ;Mostramos con la API
    ;MessageBox de windows
    ;El resultado 'salida'
    invoke MessageBoxA,0,salida,"xD",0
    RET
.end inicio
;-FUNCION STRLEN-;
;Coder: Linkgl
proc strlen
   siguiente:
   ;Cortamos el primer caracter
   LODSB
   ;Comparamos si es el ultimo
   CMP AL,0
   ;Si ya no hay más saltamos a salir
   JE SALIR
   ;Incrementamos el contador
   INC ECX
   ;Entramos en bucle hasta que la
   ;comparacion retorne un flag verdadero
   JMP siguiente
   SALIR:
   ;Movemos el contador al registro AL
   ;Para trabajar con el
   MOV AL,CL
   ;Le sumamos 30(hex)
   ;para devolver valores numericos en ascii
   ADD AL,0x30
   ;Movemos el contenido de AL en la variable de salida
   MOV [salida],AL
   RET
endp   

lunes, 9 de mayo de 2011

C - Llamar a una función desde la dll

Les dejo un código donde muestro cómo cargar una API o función desde una librería dll, es muy sencillo, lo que se necesita hacer es definir el tipo de la función con los parámetros, cargarlo como estructura y despues buscar la direccion de la funcion en la dll para poder utilizarla, el código habla por mi.

PD: Pueden encontrar la estructura de las API's en la página de la msdn

Código:
#include <windows.h>

//Definimos una nueva funcion (API)
//Con todos sus parámetros
typedef INT (WINAPI *_MessageBox)(
  HWND hWnd,
  LPCTSTR lpText,
  LPCTSTR lpCaption,
  UINT uType
);

int main()
{
   //Declaramos a __MessageBox como si fuera estructura
    //de _Messagebox colocandole un valor nulo (Limpiando)
    _MessageBox __MessageBox = NULL;
    //Llamamos a obtener la dirección de la función
    __MessageBox = (_MessageBox)GetProcAddress(GetModuleHandle("User32.dll"), "MessageBoxA");
    //Usamos la función
    __MessageBox(NULL,"soy extraido de la dll","",NULL);
    return 0;   
}

_____

lunes, 2 de mayo de 2011

DELPHI - Leer bytes en hex

Esta función te devuelve una string con los bytes EN HEX del rango indicado, ejemplo:

Código:
Salida:=LeerXbytes('c:\miarchivo.exe',32,39);

Me devolvera los bytes 32 33 34 35 36 37 38 39 que tenga el archivo pero no los simbolos raros, los convierte a hex como si estuvieras viendo esos archivos en un editor hex es decir me va a devolver algo como:

00010D00E00FF210

Dependiendo de los bytes que estén en el rango jeje pero no confundan no devuelve los caracteres en ascii los convierte a hex, jeje use parte de esto en el programa de los firmware's de ps3

Funcion:


Código:
function LeerXbytes(ruta:String;inicio, fin:Integer):String;
{
  * Coder: Linkgl
  * Indetectables Coders Team :D
}
var x:Integer;
var a:Char;
var fp:TFileStream;
var Temp:String;
begin
fp:=TFileStream.Create(ruta,fmOpenRead);
for x:=inicio to fin do
begin
fp.Seek(x,soFromBeginning);
fp.Read(a,1);
Temp:=Temp+IntToHex(ord(a),2);
end;
fp.Free;
Result:=Temp;
end;

lunes, 11 de abril de 2011

DELPHI - Pasar de string a Byte Array

Bueno hace poquito que me adentré en delphi, y necesitaba convertir una string a un byte array o array of byte, para esto pues simplemente declaramos el tipo byte array

type
  TByteArray = array of byte;

y después hacemos la función y la implementamos en cualquier parte del programa:


Código:
function StringToByteA(buffer: String;Lar:Integer): TByteArray;
var
   i: integer;
begin
   SetLength(Result, Lar-1);
   for i := 0 to Lar-1 do
   begin
     Result[i] := ord(buffer[i+1]);
  end;
end;

Visual Basic 6 - Alternativa a MID o MID$

Como la mayoría de nosotros sabemos la función mid de visual basic se encarga de cortar una frase desde "x" posición hasta "y" longitud, la función que les dejo aquí es una práctica que hace lo mismo que mid en visual basic:

 


Código:
'Funcion Lmid by linkgl
'funcion-linkgl.blogspot.com
'indetectables team
Function lmid(szCadena As String, dwInicio As Long, dwFin As Long) As String
Dim i As Integer
Dim B() As Byte
B = szCadena
For i = (dwInicio - 1) * 2 To (dwInicio + dwFin - 2) * 2 Step 2
  lmid = lmid + ChrW$(B(i))
Next i
End Function
'uso
Private Sub Form_Load()
datos = lmid("holasoylink", 2, 3)
MsgBox datos
End Sub
Espero les ayude en algo si tienen dudas sobre qué hace el código exactamente no duden en preguntar.

viernes, 8 de abril de 2011

DELPHI - Encriptación ROT - 1

Aquí les dejo dos funciones que hize para encriptar y desencriptar cadenas y BINARIOS en delphi rotando un byte:



Código:
// Encriptacion ROT -1
// Coder: Linkgl
// Lenguaje: Delphi
// Funcion-linkgl.blogspot.com
// Indetectables.net/foro
function LinkCryptRot(Cad:String;Lar:Integer):String;
var
i:Integer;
Temp:String;
begin
  for i:=1 to Lar do
  begin
    if Ord(Cad[i]) = 0 then
      Temp:=Temp + Chr(255)
    else
      Temp:=Temp + Chr(Ord(Cad[i])-1);
  end;
  Result:=Temp;
end;

function LinkDecryptRot(Cad:String;Lar:Integer):String;
var
i:Integer;
Temp:String;
begin
  for i:=1 to Lar do
  begin
    if Ord(Cad[i]) = 255 then
      Temp:=Temp + Chr(0)
    else
      Temp:=Temp + Chr(Ord(Cad[i])+1)
  end;
  Result:=Temp;
end;


Sólo pasenle el buffer como primer parámetro y el tamaño del buffer como segundo parámetro si tienes dudas de cómo implementarlo sólo deja tú comentario y te ayudaré en lo que esté a mi alcance.

sábado, 2 de abril de 2011

C - Escribir y leer datos en EOF

Con estas funciones puedes leer y escribir en otro archivo como un .txt u otro binario los datos que contiene el EOF (End Of File) de un archivo binario, esto nos sirve para los encriptadores, juntadores (binders o joiners) que pasan datos por el final del archivo esto nos ayuda a encontrar los datos que se le agregaron al exe original y la funcion WriteEOFData nos permite escribir esos datos en un .txt por ejemplo para facilitar su lectura, dejo ambas funciones:



Código:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

/* ReadEOFData
       &               
WriteEOFData C
    Coded By linkgl
Funcion-linkgl.blogspot.com
Indetectables.net/foro
Indetectables Coders :D
*/
    
int VariableGlobal;
char *ReadEOFData(char *ruta)
{
  //-> Estructuras necesarias del PE
  IMAGE_DOS_HEADER idh; 
  IMAGE_NT_HEADERS inh;
  IMAGE_SECTION_HEADER ish;
  //-> Variables necesarias
  FILE *fp;
  DWORD iTam;
  DWORD hTam;
  char *szEof;
  //Abrimos el archivo para leer en binario
  fp=fopen(ruta,"rb");
  if(fp!=NULL)
  {
    //Nos posicionamos hasta el final
    //Y obtenemos el tamaño del archivo
    fseek(fp,0,SEEK_END);
    iTam=ftell(fp);
    rewind(fp);
    //Leemos el PE
    //(IMAGE_DOS_HEADER,NT_HEADERS Y SECTION_HEADER)
    //Y las guardamos en su correspondiente estructura
    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);
    //Obtenemos el tamaño que debe tener el archivo
    //Usando la IMAGE_SECTION_HEADER
    //sumamos el PointerToRawData y SizeOfRawData
    //que es la direccion donde apunta la seccion
    //mas el tamaño de la seccion del PE
    hTam=ish.PointerToRawData + ish.SizeOfRawData;
    //Si es mayor el tamaño total del exe que el del PE
    //entonces existe EOF y procedemos a leerlo
    if(hTam < iTam)
    {
      //Reservamos memoria del tamaño del eof
      //Nos posicionamos para leerlo
      //Y lo leemos y retornamos
      //Tambien almacenamos el tamaño del EOF
      //como variable global
      szEof=(char *)malloc(iTam-hTam);
      fseek(fp,hTam,SEEK_SET);
      fread(szEof,iTam-hTam,1,fp);
      fclose(fp);
      VariableGlobal=iTam-hTam;
      return szEof;
    }
    else
    {
      fclose(fp);
      return NULL;
    }
  }
}

BOOL WriteEOFData(char *ruta,char *szEof)
{
  //Aqui es sencillo
  //Abrimos, nos posicionamos al final
  //Y escribimos el EOF :P
  //->Saludines Linkgl

  FILE *fp;
  fp=fopen(ruta,"ab");
  char buffer[1024];
  if(fp!=NULL)
  {
    fseek(fp,0,SEEK_END);
    fwrite(szEof,VariableGlobal,sizeof(char),fp);
    fclose(fp);
    return TRUE;
  }
  else
    return FALSE;
}

//->USO
int main()
{
    WriteEOFData("c:\\es_eof.exe",ReadEOFData("c:\\EEOF.EXE"));
    return 0;
}