Antes de nada, ningun ordenador fue infectado por malware en el proceso y lo que viene a continuación se hizo con el único fin de pasar el rato, si lees esto con la esperanza de saber como infectar más ordenadores o algo por el estilo, lo siento (... en realidad no) pero no estas en el lugar indicado, ve con root.
Pues presento un programa que genera otros programas ensamblando componentes (una shell inversa, un proxy SOCKS4 , un bot IRC... ), al principio no tenía ningun propósito pero parece que los módulos por separado pueden servir para echarle un vistazo a la euristica de los antivirus.
Mostrando entradas con la etiqueta pascal. Mostrar todas las entradas
Mostrando entradas con la etiqueta pascal. Mostrar todas las entradas
jueves, 30 de septiembre de 2010
De heuristicas, antivirus y malware
Etiquetas:
C,
pasando el rato,
pascal,
seguridad
martes, 3 de agosto de 2010
Una GUI para CFDG
CFDG (Context Free Design Grammar) es un programa que genera arte en 2D a partir de código, de forma muy similar a como lo hace Structure Synth ( I y II ), de hecho, este se podría considerar una versión en 3D de CFDG.
Lo "malo" es que usarlo a través de la línea de comandos se puede hacer pesado, y las GUI... me gustaría decir que las probé, pero ya fuera por un Error 404 o por que no compilaba, fue imposible, así que se improvisó una rápida con Lazarus.
Para usarlo hay que hacer es abrir el archivo de proyecto (.lpi) con lazarus, compilarlo, poner los binarios de la gui y de cfdg en el mismo directorio (a menos que el binario de cfdg esté en un $PATH), y ejecutar la gui... Si, un lío, si alguien conoce una forma mejor que avise
Un par de capturas:
El proyecto está alojado en SourceForge (aquí no se pierde la oportunidad de trastear con algo nuevo ;) [ CFDG Gui ], se puede descargar el código con
git clone git://cfdggui.git.sourceforge.net/gitroot/cfdggui/cfdggui
No tiene gran cosa, para generar la imágen se puede pulsar en "Generar" (un derroche de imaginación :D) o pulsar F5, en el menu de Archivo están las clásicas opciones de:
ps: Hace tiempo WindHack escribió un bloc de notas usando Lazarus, que puede resultar interesante para quién comienza con este lenguaje [ Notepad en GNU/Linux - Lazarus ]
ps2: Hay que reconocer que los de Lazarus tienen buen humor incluso con los errores :)}
Lo "malo" es que usarlo a través de la línea de comandos se puede hacer pesado, y las GUI... me gustaría decir que las probé, pero ya fuera por un Error 404 o por que no compilaba, fue imposible, así que se improvisó una rápida con Lazarus.
Para usarlo hay que hacer es abrir el archivo de proyecto (.lpi) con lazarus, compilarlo, poner los binarios de la gui y de cfdg en el mismo directorio (a menos que el binario de cfdg esté en un $PATH), y ejecutar la gui... Si, un lío, si alguien conoce una forma mejor que avise
Un par de capturas:
El proyecto está alojado en SourceForge (aquí no se pierde la oportunidad de trastear con algo nuevo ;) [ CFDG Gui ], se puede descargar el código con
git clone git://cfdggui.git.sourceforge.net/gitroot/cfdggui/cfdggui
No tiene gran cosa, para generar la imágen se puede pulsar en "Generar" (un derroche de imaginación :D) o pulsar F5, en el menu de Archivo están las clásicas opciones de:
- Abrir (Ctrl+O)
- Guardar (Ctrl+S)
- Guardar Como (Ctrl+Shift+S)
- Guardar Imágen (Ctrl+I)
- Salir (Ctrl+Q)
ps: Hace tiempo WindHack escribió un bloc de notas usando Lazarus, que puede resultar interesante para quién comienza con este lenguaje [ Notepad en GNU/Linux - Lazarus ]
ps2: Hay que reconocer que los de Lazarus tienen buen humor incluso con los errores :)}
Etiquetas:
grafico,
gui,
lazarus,
pascal,
sourceforge
domingo, 4 de julio de 2010
Números pseudo-aleatorios con Pascal
La generación de números pseudo-aleatorios es una característica que la mayoría de lenguajes de programación implementa por defecto, pero Pascal estándar extendido es una excepción (el FreePascal no, ojo).
Esta historia viene porque hace tiempo necesitaba generar estos números para un programa en Pascal, y al no encontrar nada (aunque bueno... tampoco busqué mucho :P ) programé algo. No es gran cosa, si se conocen los dos números anteriores y el momento en el que se inició el generador (con una precisión de microsegundos) se puede intentar descubrir cual será el siguiente, pero sirve para algo básico.
Para usarlo solo hay que importarlo y llamar a la función random usando el número "tope" como parámetro, por ejemplo, para generar un número del 0 al 100 (ambos incluidos):
aleatorio := random(100);
El código es este, se basa en el cifrado ARC4 (a.k.a RC4), y para descargar [random.pas]
module mod_random;
{
Copyright (C) Kenkeiras 2010
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Modulo de numeros aleatorios
Contiene las funciones para generar numeros aleatorios
- random
}
export mod_random=(random);
function random(top:integer):integer;
type
tbyte=0..255;
var
S: array [0..255] of tbyte;
i,j: integer;
end;
{ procedure swap (var c1:tbyte;var c2:tbyte);
Intercambia dos bytes
}
procedure swap (var a,b:tbyte);
var
temp:tbyte;
begin
temp:=b;
b:=a;
a:=temp;
end;
{ procedure random_seed;
Inicia la caja para generar los numeros pseudo-aleatorios
}
procedure random_seed;
var
t:timeStamp;
str:string(255);
n:integer;
begin
getTimeStamp(t);
str:=time(t);
for n:=0 to 255 do
S[n]:=n;
j:=0;
for n:=0 to 255 do begin
j:=(j+S[n]+ord(str[(n mod length(str))+1]))mod 256;
swap(S[n],S[j]);
end;
i:=0;
j:=0;
end;
{ function random_byte:tbyte;
Precondicion: La caja esta iniciada
Devuelve un byte pseudo-aleatorio
}
function random_byte:tbyte;
begin
i:=(i+1)mod 256;
j:=(j+S[i])mod 256;
swap(S[i],S[j]);
random_byte:= S[(S[i]+S[j])mod 256];
end;
{ function random(top:integer):integer;
Precondicion: La caja esta iniciada
Devuelve un numero (integer) pseudo-aleatorio con un valor maximo de 'top'
}
function random;
var
n,k:integer value 0;
begin
for n:=((top div 256)+1) downto 0 do
k:=k+random_byte;
random:=(k mod top)+1;
end;
to begin do
{ Al iniciar el programa inicia la caja para poder generar numeros aleatorios }
random_seed;
end.
Y eso es todo... hasta otra.
Esta historia viene porque hace tiempo necesitaba generar estos números para un programa en Pascal, y al no encontrar nada (aunque bueno... tampoco busqué mucho :P ) programé algo. No es gran cosa, si se conocen los dos números anteriores y el momento en el que se inició el generador (con una precisión de microsegundos) se puede intentar descubrir cual será el siguiente, pero sirve para algo básico.
Para usarlo solo hay que importarlo y llamar a la función random usando el número "tope" como parámetro, por ejemplo, para generar un número del 0 al 100 (ambos incluidos):
aleatorio := random(100);
El código es este, se basa en el cifrado ARC4 (a.k.a RC4), y para descargar [random.pas]
module mod_random;
{
Copyright (C) Kenkeiras 2010
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Modulo de numeros aleatorios
Contiene las funciones para generar numeros aleatorios
- random
}
export mod_random=(random);
function random(top:integer):integer;
type
tbyte=0..255;
var
S: array [0..255] of tbyte;
i,j: integer;
end;
{ procedure swap (var c1:tbyte;var c2:tbyte);
Intercambia dos bytes
}
procedure swap (var a,b:tbyte);
var
temp:tbyte;
begin
temp:=b;
b:=a;
a:=temp;
end;
{ procedure random_seed;
Inicia la caja para generar los numeros pseudo-aleatorios
}
procedure random_seed;
var
t:timeStamp;
str:string(255);
n:integer;
begin
getTimeStamp(t);
str:=time(t);
for n:=0 to 255 do
S[n]:=n;
j:=0;
for n:=0 to 255 do begin
j:=(j+S[n]+ord(str[(n mod length(str))+1]))mod 256;
swap(S[n],S[j]);
end;
i:=0;
j:=0;
end;
{ function random_byte:tbyte;
Precondicion: La caja esta iniciada
Devuelve un byte pseudo-aleatorio
}
function random_byte:tbyte;
begin
i:=(i+1)mod 256;
j:=(j+S[i])mod 256;
swap(S[i],S[j]);
random_byte:= S[(S[i]+S[j])mod 256];
end;
{ function random(top:integer):integer;
Precondicion: La caja esta iniciada
Devuelve un numero (integer) pseudo-aleatorio con un valor maximo de 'top'
}
function random;
var
n,k:integer value 0;
begin
for n:=((top div 256)+1) downto 0 do
k:=k+random_byte;
random:=(k mod top)+1;
end;
to begin do
{ Al iniciar el programa inicia la caja para poder generar numeros aleatorios }
random_seed;
end.
Y eso es todo... hasta otra.
Etiquetas:
arc4,
estandar extendido,
pascal,
pseudo aleatorio,
rc4
Suscribirse a:
Entradas (Atom)


