Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Debates (https://www.clubdelphi.com/foros/forumdisplay.php?f=29)
-   -   ¿Como se hacen los programas estilo "keygen"? (https://www.clubdelphi.com/foros/showthread.php?t=42751)

xander 21-04-2007 22:12:07

¿Como se hacen los programas estilo "keygen"?
 
A proposito de un hilo en este mismo apartado acerca del tamaño de los ejecutables, yo siempre he tenido la duda de como es que hacen los hackers los programitas que hay por toda la red que son keygenerators para diferentes aplicaciones.

Generalmente estos keygens son aplicaciones de unos cuantos Kb que muchas veces traen efectos rimbombantes, como animaciones muy elaboradas y audio de fondo y yo me pregunto donde es que metieron todo eso dentro de un exe tan pequeño??? ni siquiera esta comprimido con UPX o algun otro compresor puesto que me permite todavia comprimirlo a mi con el UPX y se hace aún más pequeño.

Definitivamente estos cuates tienen mucho talento y desde ahi se nota que hay gran diferencia entre ellos y un desarrollador común pues optimizan al máximo el ejecutable al parecer, lo que a muchos de nosotros nos viene a valer cacahuate.

Pero no dejo de preguntarme como hacer para poner esos audios de fondo, no parecen ser midi, deben ser algun otro formato o de plano no tengo ni idea.

dec 21-04-2007 22:47:29

Hola,

Sin salirnos de Delphi existe algo como KOL (Key Objects Library). En esta página de "demos" verás ejecutables con GUI desde 4 KB...

roman 22-04-2007 06:03:35

Hombre Xander, no quito mérito a esos programas, pero todos sabemos que un ejecutable de Delphi, por buenos que seamos, ocupará, como mínimo, 300kb tan sólo para mostrar una ventanita vacía. No es una cuestión de capacidad sino de la herramienta que usamos. Desde luego, podemos usar opciones como la que menciona David, o podemos programar en C, o incluso en Delphi si decidimos prescindir de la VCL- pero, en tal caso, mejor programamos en C. En fin, que si programamos usando Delphi y su VCL, no obtendremos ejecutables diminutos.

// Saludos

JXJ 22-04-2007 07:45:15

yo se que los keygen los hacen en ensamblador.

otros en C o c++ y con codigo en ensamblador.,

El audio si no se como lo meten.

me imagino que son instrucciones de secuencias
que el windows interpreta .

dec 22-04-2007 17:03:14

Hola,

Cita:

Empezado por Román
Hombre Xander, no quito mérito a esos programas, pero todos sabemos que un ejecutable de Delphi, por buenos que seamos, ocupará, como mínimo, 300kb tan sólo para mostrar una ventanita vacía. No es una cuestión de capacidad sino de la herramienta que usamos. Desde luego, podemos usar opciones como la que menciona David, o podemos programar en C, o incluso en Delphi si decidimos prescindir de la VCL- pero, en tal caso, mejor programamos en C. En fin, que si programamos usando Delphi y su VCL, no obtendremos ejecutables diminutos.

Estoy de acuerdo, pero, tampoco veo mal poder contar con una herramienta como la Key Objects Library. De hecho puede utilizarse para construir aplicaciones visualmente (como en Delphi, haciendo uso de una "VCL" propia) que al cabo terminan en ejecuables verdaderamente pequeños. Claro que esto no significa que uno tenga que plantearse aplicaciones más o menos complejas con la Key Objects Library, pero, puede ser de utilidad en un momento dado, y, cuando menos, es una prueba más de lo que da de sí Delphi.

d-hugo 23-04-2007 17:40:11

Cita:

Empezado por xander
Generalmente estos keygens son aplicaciones de unos cuantos Kb que muchas veces traen efectos rimbombantes, como animaciones muy elaboradas y audio de fondo y yo me pregunto donde es que metieron todo eso dentro de un exe tan pequeño??? ni siquiera esta comprimido con UPX o algun otro compresor puesto que me permite todavia comprimirlo a mi con el UPX y se hace aún más pequeño.

En una ocasión pregunté esto mismo a un programador que desarrollaba aplicaciones diminutas con Delphi. Me enseñó que es perfectamente posible hacer ejecutables desde Delphi que no lleguen a 50K aún sin compresión, sólo que hay que programar todo a mano en el DPR (incluso la creación de las formas y los controles), usando intensamente los common controls y las APIS de Windows, y metiendo los audios y otros recursos que quieras usar en el archivo RES. Como puedes ver, esto es toda una forma de programar (nada amistosa) para la cual el IDE prácticamente no ayuda, pues las VCL no se usan para nada.

Cita:

Empezado por xander
Pero no dejo de preguntarme como hacer para poner esos audios de fondo, no parecen ser midi, deben ser algun otro formato o de plano no tengo ni idea.

En cuanto a eso, te puedo decir que los keygen frecuentemente usan formatos MOD, XM, IT, S3M o similares. Como has visto, son archivos muy pequeños que permiten composiciones bastante complejas y larguísimas porque hacen loops. Me parece haber visto en internet unidades para usarlos en Delphi.

Saludos, Hugo

seoane 23-04-2007 18:14:52

Creo que ya esta claro que el tema del tamaño es culpa de la VCL, y de que delphi crea aplicaciones "standalone", es decir, no suelen necesitar librerías para ejecutarse, metiendo todo dentro del ejecutable.

Si se quiere hacer una aplicación pequeña, solamente hay que hacer todo "a mano", usando la API de windows podemos hacer de todo. Recuerdo que hace tiempo, cuando tenia la fiebre de los ejecutables pequeños, llegue a implementar los threads llamando a la api, por no usar la unit classes ... luego te das cuenta de que estas exagerando ... o no :cool: :p

Cita:

Empezado por xander
Pero no dejo de preguntarme como hacer para poner esos audios de fondo, no parecen ser midi, deben ser algun otro formato o de plano no tengo ni idea.

Siempre podemos echar mano del "Codigo inutil" y poner de fondo una bonita cancion.
http://www.clubdelphi.com/foros/show...6&postcount=17

Black_Ocean 23-04-2007 21:21:53

Cita:

Empezado por xander
yo siempre he tenido la duda de como es que hacen los hackers los programitas que hay por toda la red que son keygenerators para diferentes aplicaciones.

Yo se como se hacen :D aprendí mucho gracias a unos ingenieros inversos rusos que una vez conoci por ahí :P, Algunas herramientas, pasos y conocimientos que necesitas:

1. El cerebro (lo mas importante :))

2. Leer MUCHO y TODOS LOS DIAS.

3. Saber bastante assembler (lenguaje ensamblador) y saber programar en MASM32 o FASM32. Para estos tienes uno que se llama RadASM (IDE)
Código:

http://www.radasm.com/
. y el compilador para MASM32 aquí:
Código:

http://www.masm32.com/
4. Saber mucho Hexadecimal, ya que el manejo de direcciones en memoria se manejan en ese formato como ya saben.

5. Reconocer en qué lenguaje fue escrito un programa para poder analizarlo de forma correcta. Una ayuda para esto puede ser PEiD
Código:

http://peid.has.it/
6. Saber dumpear archivos (Esto es desempaquetar ejecutables/DLL's que podrían estar protegidos con UPX, AsProtect, Armadillo, PECompact, WinUpack, EXECryptor, etc... ya que el código original del ejecutable es imposible analizarlo correctamente cuando está protegido).

7. Saber manejar por lo menos un depurador de aplicaciones para análisis, como es el mas básico y fácil, OllyDbg (para aplicaciones hechas en Delphi, Visual Basic, etc...)
Código:

http://www.ollydbg.de/
. Para aplicaciones hechas en Delphi tienes uno EXCLUSIVO que se llama DeDe (El mejor ;) )
Código:

http://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/DeDe.shtml
8. Saber manejar por lo menos un programa que revise archivos en forma hexadecimal. Un buen ejemplo es el WinHex:
Código:

http://www.x-ways.net/winhex/index-e.html
9. Tener herramientas para realizar los parches o loaders, etc, Para esto tienes uno de los mejores fabricadores de parches que es el dUP2:
Código:

http://diablo2oo2.di.funpic.de/
. Para incorporar sonidos o música a estos parches sólo sirve estos tipos de archivos que puedes bajar desde acá:
Código:

http://www.keygenmusic.net/
10. Tener por lo menos un empaquetador/protector de ejecutables para proteger tu proyecto: el UPX
Código:

http://sourceforge.net/projects/upxshell/
es uno de mis favoritos y además es GRATUITO (en realidad esto se debería ocupar para cualquier proyecto realizado en cualquier lenguaje, ya que no faltan los lamers que van a espiar tu código).

Y bueno... MUUUUUUCHAS otras cosas que estaría horas hablando :D es un ejemplo de los pasos y algunas herramientas que necesitas previo al keygen o parche... si quieres saber mas pregúntale al tío google, porque me aburrí de escribir jejejeje :P

COrdiales saludos.

xander 23-04-2007 21:30:08

Chas Gracias Black Ocean... muy ilustrativo tu comentario :) Eso es lo que quería saber..

Black_Ocean 23-04-2007 22:56:38

Ya saben que mas... acá les dejo un tutorial + el código fuente incluido (todo en ESPAÑOL!) de un ejemplo de cómo hacer un keygen en DELPHI!!!!!!!!! EXCLUSIVO!!

Código:

http://www.gigasize.com/get.php/1212171/KeyGDelphi.rar
La password para descomprimir:
Código:

KeygenDelphi
Este tutorial y ejemplo ha sido bajado del sitio CracksLatinos
Código:

http://www.crackslatinos.hispadominio.net
Saludos y espero que les sirva y comenten :D

cHackAll 26-04-2007 00:35:14

xander, dac, roman...
 
En realidad si se debe tener algo de experiencia en crear esos programillas tan pequeños... alguien citaba: "no menos de 300 Kb", eso es totalmente mentira, pues el modo de abstraccion que utilizo Borland para representar un objeto ventana fue algo grueso. La solucion esta en solo utilizar APIs, que al final es de lo que hacen uso los lenguajes de programacion visual, y en el hermoso Delphi en particular podemos meterle algo de codigo en Assembler, comienza creando aplicaciones SIN ventanas; consolas, luego quitale la opcion de consola y estaras haciendo un programa de 8 Kb +/- en la cual con algunas APIspodrs ponerle un entorno mas Güindos... Espero estar aqui para darles algunos consejillos, pues esa fue mi "especialidad".

roman 26-04-2007 00:42:02

Yo soy el que citas :D

Pero a lo que me refería, es justamente a que, usando la VCL, es imposible bajar de 300kb. No usándola, desde luego que se puede bajar- y drásticamente -el tamaño. Quizá debí aclarar más.

// Saludos

cHackAll 26-04-2007 01:17:54

Ok
 
Okey makey, pero es que la VCL no es algo impresindible siempre. Y respeto ambas posiciones.

PD: no uses el upx, los dos mejores (ahora para mi, pues antes lo usaba), son el mew (para aplicaciones de pocos Kb) y el PECompact (para aplicaciones medianas y grandes). Lo malo del primero es que no respeta el recurso para compatibilidad xp, (xpman.res?)

SDS xander & roman

roman 26-04-2007 01:26:28

De acuerdo en que no es imprescindible, y para el tipo de programas del que hablan aquí, seguro que hay que prescindir de ella. Pero en términos generales, si voy a programar en Delphi, usaré la VCL, que pese a su tamaño es una excelente biblioteca que nos facilitará enormemente el trabajo.

El UPX lo uso cuando necesito distribuir actualizaciones por correo, pero no había pensado en lo del XP- de hecho, hasta hace muy poco no usaba el XP Manifest - Que bueno que mencionas esos otros compresores, voy a revisarlos.

Por cierto, bienvenido a los foros.

// Saludos

dec 26-04-2007 01:27:00

Hola,

Cita:

Lo malo del primero es que no respeta el recurso para compatibilidad xp, (xpman.res?)
Me sonaba raro, y, he comprobado ahora mismo que al menos con la versión 1.25w del programa UPX este "respeta" el "XpMan.res". Acabo de comprobarlo también con la última versión de UPX, la 2.03w.

roman 26-04-2007 01:32:27

Pues me extraña esto que comentas dec, pues hace poco se mencionó esto, y de ahí que no me sonara desconocido eso. Será cuestión de la versión.

// Saludos

dec 26-04-2007 01:36:34

Hola,

No sé. A mí me suena raro porque llevo usando UPX hace bastante tiempo y no recuerdo haberme topado con ese problema. He visto el Hilo que enlazas, pero, no me queda claro. UPX comprime el ejecutable, es cierto, pero cuando este último se ejecuta, propiamente, UPX lo descomprime: dejándolo, obviamente, como estaba.

Pero, aparte de esta idea mía, que puede estar equivocada, insisto: acabo de probar con UPX 1.25, que era el que venía utilizando; he ido a la Web de UPX y he descargado la versión 2.05 (la última versión) y he probado de nuevo y todo ha ido como esperaba, o sea. :)

Si fuera cuestión de la versión (que puede ser) lo cierto es que sería (según mi idea) un Bug de dicha versión, por lo que he mencionado: UPX comprime y añade un descompresor al ejecutable que se encarga de descomprimirlo: creo que se trata en todo caso de una compresión "sin pérdida", así que cuando se descomprime todo debe estar como al principio.

cHackAll 26-04-2007 01:44:03

Upppss
 
Lamento si no me explique bien, no me refiero al upx pues este si respeta dicho recurso, el que no lo hace y el cual sugeri utilizar para aplicaciones realmente pequeñas. El mew es el que no respeta al xpman.res :o

roman 26-04-2007 01:46:54

Pues tienes razón David. Ya lo he probado yo mismo y funciona como dices.

// Saludos

xander 26-04-2007 03:33:22

A todo esto, ¿que c#ing@o$ es el XP Manifiesto ese??? pa que sirve o que onda??... me sirve de algo si estoy trabajando con Delphi2007 que según ya es para Vista y no para XP ???? o que onda?

dec 26-04-2007 03:55:14

Hola,

Existe una unidad en Delphi 7 de nombre "XpMan.pas". Esta unidad se limita exclusivamente a añadir al ejecutable (como un recurso más) el archivo "WindowsXP.res", que puede encontrarse en: "C:\Archivos de programa\Borland\Delphi7\Lib".

Pues bien, dicho archivo ".res" contiene el siguiente XML:

Código:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
          type="win32"
    name="DelphiApplication"
    version="1.0.0.0"
          processorArchitecture="*"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
</assembly>

El cual es "leído" por Windows cuando se ejecuta el ejecutable que lo contiene. Entonces Windows aplica a los controles "comunes" ("TEdit", "TButton", "TMemo", "TMainMenu", etc.) que contenga dicho ejecutable, le aplica, digo, el tema que esté establecido en Windows XP.

¿Si te sirve de algo en Delphi 2007? Ignoro siquiera si se incluye la unidad "XpMan.pas", empero, a no ser que se incluya el recurso "WindowsXP.res" por defecto en los ejecutables (cosa que dudo, pero por pura intuición), si quieres que tu programa adopte el tema de Windows XP... deberá usarse igual que en Delphi 7, por ejemplo.

En general podría decirse que cualquier ejecutable (de Delphi o de otro lenguaje/entorno) que contenga el XML referido (como un recurso más dentro del ejecutable), tomará en sus controles comunes (de Windows) la apariencia del tema de Windows XP que esté usando el usuario.

PD. Pero no mezclemos distintos temas en un mismo Hilo que puedo acabar echándome la bronca a mí mismo y no veas tú qué compromiso. :)

xander 26-04-2007 04:14:40

Gracias Dec, las cosas de las que se entera uno... no tenía ni idea de eso

:D

dec 26-04-2007 04:19:41

Hola,

Vamos a ampliar ambos la información, ya puestos, y a leer el artículo de Michael A. Allen y Zarko Gajic: Windows XP Manifest in Delphi. :)

DarKraZY 26-04-2007 10:44:48

Volviendo al tema de los KeyGen... yo pensaba que los sacaban las propias compañías de software.
Aunque suene a broma, lo digo en serio. El interés de dicha acción sería para permitir que usuarios no profesionales puedan acceder a sus productos.

Black_Ocean 26-04-2007 11:19:55

Cita:

Empezado por xander
A todo esto, ¿que c#ing@o$ es el XP Manifiesto ese??? pa que sirve o que onda??... me sirve de algo si estoy trabajando con Delphi2007 que según ya es para Vista y no para XP ???? o que onda?

Para todos aquellos que tienen esta duda tan extraña, el XPManifest es para que los formularios, botones, paneles, etc de tu programa soporten los temas (apariencia) de Windows XP y superior que tenga el usuario, de otra manera si no está el XPManifest presente los formularios no podrán soportar esta cualidad, y se verán con la misma apariencia antigua y no grata de Windows 2000 hacia abajo(ploma y poco vistosa) a pesar que el usuario tenga un tema de apariencia configurado en XP. Desde Delphi 7 este componente viene incorporado en la paleta Win32. Para usuarios con versiones inferiores a la 7 deben hacerlo manualmente, primero haciendo un archivo como se mencionó anteriormente con esas características y guardándolo con extensión .Manifest, luego creando un archivo especificando el tipo de recurso guardándolo en extensión con el mismo nombre del anterior pero con extensión .RC, luego compilándolo con el archivo Bcc32.exe que se encuentra en la carpeta bin, el cual les generará un archivo .RES que luego lo tienen que especificar en su código de la unidad del formulario.

Ejemplo de cómo especificarlo:

Código Delphi [-]

implementation

{$R *.dfm}
{$R Ejemplo.RES}

También el otro método que existe es simplemente poniendo el archivo .manifest en la misma carpeta en donde radicará el ejecutable de tu proyecto pero con el mismo nombre del ejecutable, es decir, si nuestro ejecutable se llama MiProyecto.exe, el archivo manifest se tendrá que llamar MiProyecto.manifest

Espero que les haya servido la información.

Ñuño Martínez 26-04-2007 14:10:52

Sé que llego tarde, y que esto está degenerando un poco, pero voy a recuperar el hilo inicial de esta conversación.

Lo de los programas "keygen" que muestran esas impresionantes presentaciones en poco más de 30Ko de ejecutable es herencia de las "tech-demos" que se empezaron a hacer en los '80. En estas se intentaba hacer el programa más impresionante (e inútil, todo sea dicho de paso) en el menor espacio posible.

Yo fui demo-maker en mis tiempos, pero yo lo hacía en MSX y no en PC. Para ahorrar el máximo de memoria las demos se programaban exclusivamente en ensamblador, realizando llamadas directas al BIOS y accediendo a los puertos y a la memoria del sistema de forma directa, sin pasar por el sistema operativo.

Por otro lado, lo que hincha un programa Windows suelen ser los recursos. Si en lugar de crear las ventanas y diálogos con el IDE, arrastrando y soltando componentes con el ratón, lo hacemos a golpe de código podemos reducir considerablemente el tamaño de los ejecutables. Hace ya algunos años hice una demostración con Delphi 6 en el que ahorré una media de 1'5Ko por control (no sólo los visibles como los botones sino también los invisibles como los TQuery, TDialog, etc.) al reproducir un programa RAD a golpe de código. Si un programa tiene 200 componentes, lo cual es bastante común, podemos ahorrar casi 300Ko.

Eso sí, es mucho más difícil diseñar un formulario escribiendo el código directamente en Pascal que utilizando los componentes visuales.

roman 26-04-2007 18:21:38

O sea, que de RAD pasó a SAD :p :D

// Saludos

xander 26-04-2007 20:19:34

Cita:

Empezado por Ñuño Martínez
al reproducir un programa RAD a golpe de código. Si un programa tiene 200 componentes, lo cual es bastante común, podemos ahorrar casi 300Ko.

Eso sí, es mucho más difícil diseñar un formulario escribiendo el código directamente en Pascal que utilizando los componentes visuales.

Aver, a ver, ¿quieres decir que si creo mis componentes desde código? al estilo de:

Código Delphi [-]
var
  Form1: TForm1;
  Button1: TButton;
  JvDBGrid1: TJvDBGrid;
  Table1: TTable;
  Jv: TJvCsvDataSet;
  M: TJvMemoryData;
  JvDataSource1: TJvDataSource;

  Form1 := TForm1.Create(Self);
  Button1 := TButton.Create(Form1);
  JvDBGrid1 := TJvDBGrid.Create(Form1);
  Table1 := TTable.Create(Self);
  Jv := TJvCsvDataSet.Create(Self);
  M := TJvMemoryData.Create(Self);
  JvDataSource1 := TJvDataSource.Create(Self);
  with Form1 do
  begin
    Name := 'Form1';
    Left := 0;
    Top := 0;
    Caption := 'Form1';
    ClientHeight := 530;
    ClientWidth := 399;
    Color := clBtnFace;
    Font.Charset := DEFAULT_CHARSET;
    Font.Color := clWindowText;
    Font.Height := -11;
    Font.Name := 'Tahoma';
    Font.Style := [];
    OldCreateOrder := False;
    PixelsPerInch := 96;
  end;
  with Button1 do
  begin
    Name := 'Button1';
    Parent := Form1;
    Left := 32;
    Top := 64;
    Width := 75;
    Height := 25;
    Caption := 'Button1';
    TabOrder := 0;
    OnClick := Button1Click;
  end;
  with JvDBGrid1 do
  begin
    Name := 'JvDBGrid1';
    Parent := Form1;
    Left := 24;
    Top := 112;
    Width := 345;
    Height := 385;
    DataSource := JvDataSource1;
    TabOrder := 1;
    TitleFont.Charset := DEFAULT_CHARSET;
    TitleFont.Color := clWindowText;
    TitleFont.Height := -11;
    TitleFont.Name := 'Tahoma';
    TitleFont.Style := [];
    SelectColumnsDialogStrings.Caption := 'Select columns';
    SelectColumnsDialogStrings.OK := '&OK';
    SelectColumnsDialogStrings.NoSelectionWarning := 'At least one column must be visible!';
    EditControls := <>;
    RowsHeight := 17;
    TitleRowHeight := 17;
  end;
  with Table1 do
  begin
    Name := 'Table1';
    DatabaseName := 'DBDEMOS';
    TableName := 'customers.dbf';
    Left := 24;
    Top := 16;
  end;
  with Jv do
  begin
    Name := 'Jv';
    Changed := False;
    CsvUniqueKeys := False;
    ExtendedHeaderInfo := False;
    CaseInsensitive := False;
    LoadsFromFile := False;
    AutoBackupCount := 0;
    StoreDefs := True;
    Left := 88;
    Top := 16;
  end;
  with M do
  begin
    Name := 'M';
    FieldDefs := <>;
    Left := 160;
    Top := 16;
  end;
  with JvDataSource1 do
  begin
    Name := 'JvDataSource1';
    DataSet := Jv;
    Left := 248;
    Top := 24;
  end;

Mi programa va a medir menos que usando el editor de formularios de Delphi??? Me puedes firmar con tu sangre eso??

Y de ser así, porque es que sucede eso??? al final de cuentas eso es lo que hace el compilador de Delphi al crear el formulario, que no?

roman 26-04-2007 20:27:37

No estaría yo tan seguro que sea tanto el ahorro, pero sí debe disminuir el tamaño. Todas las propiedades de las componentes y formularios que se establecen en tiempo de diseño (es decir, el DFM), se guardan como recursos dentro del ejecutable. Al hacerlo por código, eliminas ese recurso del ejecutable.

// Saludos

seoane 26-04-2007 20:52:45

Cita:

Empezado por xander
Mi programa va a medir menos que usando el editor de formularios de Delphi??? Me puedes firmar con tu sangre eso??

Yo creo que mas bien se refería a eliminar la unidad Forms, que es un peso pesado, de tu proyecto y crear las ventanas llamando solo a funciones de la API. Así si que la reducción es espectacular. Y si además eliminas la unit Classes, ya estamos hablando de algo realmente pequeño.

Lo malo es que quitando esas clases pasamos, como bien dice roman, de RAD (Rapid application development) a SAD (Slow ??? application development) :D , es decir, un montón de lineas para crear una ventana, un montón de lineas para crear un boton, etc ...

xander 26-04-2007 21:02:58

Cita:

Empezado por seoane
Yo creo que mas bien se refería a eliminar la unidad Forms, que es un peso pesado, de tu proyecto y crear las ventanas llamando solo a funciones de la API. Así si que la reducción es espectacular. Y si además eliminas la unit Classes, ya estamos hablando de algo realmente pequeño.

Pero Nuño habla de crear hasta Querys y controles dataaware ahorrando 1.5 kb por control, ahi si me imagino que sería una jodienda crear un IBQuery o ADOQuery por llamadas al API, mas bien le habia entendido que las creaba por código, pero aún asi ahorrarse 1.5 Kb por cada componente no se se me hace muy dificil de creer.

roman 26-04-2007 21:03:03

SAD de slow y de :(

Yo también había pensado que Ñuño se refería a lo que hemos dicho antes: crear formularios a mano, con la API de Windows. Pero aún haciéndolo así, si te pones a usar las unidades DB, DBCtrls, StdCtrls, ExtCtrls, necesarias para lo que menciona (botones, querys, etc) pues viene a ser casi lo mismo: ejecutables de más de 300kb. Por ello, cuando leí el mensaje de xander, pensé que realmente se refería a quitar el dfm del ejecutable. Pero, al igual que xander, estoy escéptico en este punto.

// Saludos

cHackAll 27-04-2007 02:49:51

Regresando al tema.
 
En definitiva si quieren crear una aplicacion buena de ese tipo (virus?) lo mejor es solo usar las APIs de Guindos... y lenguaje de maquina, ñuño me comprenderá en la idea, el pasarse a 32 bits no creo que le sea mucho lio.

Lo que yo cuido en mis aplicaciones son dos cosas... la primera es no utilizar ningun tipo de concatenacion de cadenas, pues suele ocupar varios Kb. lo mejor es siempre usar vectores concatenados con metodos de movimientos de memoria... lo segundo es no utilizar por ningun motivo la unidad SysUtils pues esa engorda en gran medida al ejecutable...

En algun momento les pasaré algunas de mis aplicaciones de esta clase... tengo como una docena y si realmente estan interesados les pasare parte del codigo, no si este foro lo permite pero si no, les paso por mail (los programas) y el codigo lo hago publico aca mismo.

PD: "uses windows;" y nada mas!!!

cHackAll 27-04-2007 02:57:20

Ahh me olvidaba!
 
El asunto de lo que comentaba roman de las BDs... este tema de los "keygens" en definitiva es "bajar de nivel" lastimosamente estamos muy acostumbrados a utilizar lo que el IDE nos dá a primera vista... pero alguna vez hicieron Ctrl+Click... vieron todo lo que hay por debajo? y que pasa si se nos ocurre realizar nuestra propia interfaz con una base de datos creada por nosotros mismos? entonces si logramos menos de 100 Kb. con una BD.

Si hablamos de KeyGens y parecidos, necesariamente hablamos de bajo nivel y no es necesario hacer uso de las interfaces de BDs DBxxxx.pas

Ñuño Martínez 27-04-2007 11:57:51

Cita:

Empezado por seoane
Yo creo que mas bien se refería a eliminar la unidad Forms, que es un peso pesado, de tu proyecto y crear las ventanas llamando solo a funciones de la API. Así si que la reducción es espectacular. Y si además eliminas la unit Classes, ya estamos hablando de algo realmente pequeño.

Lo malo es que quitando esas clases pasamos, como bien dice roman, de RAD (Rapid application development) a SAD (Slow ??? application development) :D , es decir, un montón de lineas para crear una ventana, un montón de lineas para crear un boton, etc ...

No, no, utilizaba las mismas clases VCL/CLX. Sólo asignaba las propiedades que utilizaba, dejando la mayor parte de los valores con su valor "por defecto" (por ejemplo: name, color, font, etc.), y eliminando todo lo posible de las cláusulas USES.

Es cierto que el ahorro no era mucho, pero siempre hay que valorar si el esfuerzo de hacerlo así merece la pena por el ahorro conseguido.

Eso sí, estuve una temporada aprendiendo a programar GTK+ y ahí sí que se notó un ahorro bárbaro...

Neftali [Germán.Estévez] 27-04-2007 15:32:12

Cita:

Empezado por JXJ
yo se que los keygen los hacen en ensamblador.
otros en C o c++ y con codigo en ensamblador.

Tengo serias dudas acerca de esa afirmación.
Simplemente por pura lógica.
Un Keygen no es más que un programa que a partir de un dato (Nombre de usuario) genera otro dato (Serial) utilizando una serie de cálculos. Para eso no hace falta en absoluto programar en ensamblador. Es más, en ensamblador sería bastante más tedioso que en cualquier otro lenguaje de medio-alto nivel.

Para hacer un "Patcher" pasa algo similar; Se trata de cambiar una serie de Bits de un fichero por otros distintos; BIS de lo explicado antes.

Doy por supuesto que una persona que genera Keygens no es tonta, por lo tanto no hay razón para usar ensamblador en una cosa que no se necesita.
En cuanto a los "patchers", como ya han dicho, ni siquiera programan, ya que existen múltiples herramientas que a partir de una plantilla y los datos que se le dan, genera ese ejecutable (que parchea otro) con un par de clicks.

La única razón para usar ensamblador sería el tamaño, pero existen otras alternativas; por ejemplo las KOL son un gran ejemplo, aunque hay más...

Volviendo al tema del lenguaje, he realizado una simple prueba, con varios programas; 7 en concreto. Después de desempaquetarlos y desemcriptarlos he obtenido:

* 2 Programados con Borland Delphi (delphi 4.0 y Delphi 7.0)
* 2 programado con Microsoft Visual C++
* 1 programado con LCC Win32
* 1 Microsoft Visual Basic 5.0 o 6.0
* 1 Desconocido

NOTA: Cierto que hay que saber ensamblador, pero no para generar los Keygen.
NOTA2: Llego un poco tarde, ya habéis avanzado bastante en el tema...

cHackAll 27-04-2007 18:07:34

Ok
 
Comparto la idea naftali... el uso de lenguaje de maquina esta directamente relacionado con el tamaño y velocidad del producto final (ver tema).

Lo de los resultados analizados, en definitiva si eres bueno en lo que haces hasta en lenguajes etiquetados (HTML?) podemos dominar el mundo con pocos Kb. Pero no nos alejemos de Delphi que es nuestra herramienta principal.

zelt@ 15-04-2009 00:03:29

mira te explico breve mente yo soy cracker y tu preguntas como programamos los keygen. a lo mejor ya se te contesto tu duda pero por si no te explico en el caso de la musica utilizamos bueno la mayoria utiliza musica en formato XM la cual no pesa mucho y es de buen formato para eso utilizamos la libreria Ufmod la cual nos permite reproducir la musica en XM aparte de eso utilizamos la herramienta eff la cual nos convierte la musica XM en un archivo .PAS que utiliza delphi el cual contiene el codigo de esa musica y se agrega de esta manera:
primero en uses declaramos Ufmod

despues abrimos el archivo .Pas y copiamos el codigo de la musica
en el evento oncreate metemos
Ufmod_Playsong(@xm,length(xm),xm_memory);
para tener la musica mientras este abierto el keygen

jaja creo que no me pero mira hace algunos dias hice un tutorial de como hacerlo te lo dejo aqui para que lo descargues espero que te sirva

http://rapidshare.com/files/22140361...i_by_ZELT_.rar

en cuanto los demas efectos por lo regular es puro codigo como para lograr el movimiento de algun texto o el desvanecimiento de la ventana a y porcierto a mi me gusta hacer mis keygen en delphi pero a otros en ensamblador y otros en visual todo depende del cracker y en que lenguaje le guste programar

Julián 18-04-2009 13:29:17

Cita:

Empezado por zelt@ (Mensaje 344959)
mira te explico breve mente yo soy cracker


Hola, tengo un programa que lleva una protección consistente en un "usb dongle" con el sistema Guardant Stealth III.

¿eso puede piratearse?

Lo pregunto sólo por curiosidad :D

FGarcia 18-04-2009 18:48:33

Cita:

Empezado por Julián (Mensaje 345401)
Hola, tengo un programa que lleva una protección consistente en un "usb dongle" con el sistema Guardant Stealth III.

¿eso puede piratearse?

Lo pregunto sólo por curiosidad :D

Hola!

Si, si se puede. Te lo digo no porque yo conosca como hacerlo, sino porque tengo un software que viene con una llave usb en la version "flotante" es decir que primero debes de copiar la clave que viene en la llave a tu sistema y de ahi ya puedes usar el software en la pc que lo hayas instalado, el software lo puedes instalara en todas las maquinas que quieras pero solo con los datos de la usb funcionara. Cuando quieres ir a otra maquina debes de devolver la clave a la llave e instalarlo en la otra maquina. Es un gorro eso!

Pero como siempre los programadores rusos (¿que les enseñaban alla en el bloque oriental?) ya te dan la forma de brincarte eso y colocar tu clave en todas las maquinas que quieras.

No hay nada seguro e inviolable.


La franja horaria es GMT +2. Ahora son las 14:56:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi