el resultado no es =, el de FeRcHu podria estar toda la vida y no darte un serial valido, xk si la fuerza bruta es fea, si no la haces de manera sistematica es peor... en cambio la otra solucion te daria un serial en nanosegundos.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#define DWORD unsigned int
#define BYTE unsigned char
//0404078h
char const1[8*10];
char const2[16];
char const3[16];
void ShowDump(char* buff, DWORD s)
{
//muestra el contenido de una zona de memoria en hexdecimal
int j,i;
i=0;
for (i=0;i<s;i+=8) {
for (j=i;(j-i)<8;j++){
if (!(j<s)) {
printf (" ");
continue;
}
if ((unsigned char)buff[j] <= 0xF) printf("0");
printf("%X ",(unsigned char)buff[j]);
if ((j-i)==3) printf("| ");
}
for (j=i;j<s && (j-i)<8;j++){
if (j==i) printf("| ");
if (buff[j]) printf("%c ",buff[j]);
else printf(". ");
}
printf("\n");
}
}
void name1(char * nombre,DWORD len,char * buff)
{
//primer procesamiento del name
int j,i;
char c;
for (j=0;j<=7;j++)
{
buff[j]=const1[j];
for (i=0;i<len;i++)
{
c=nombre[i];
c+=c;
c=c^buff[j];
buff[j]=c;
}
}
}
void pass1(char *pass,char *buff) {
//primer procesamiento del pass
DWORD j;
BYTE b;
char l,h;
for (j=0;pass[j];j++) {
if (pass[j] > '?') pass[j]-='A'; //se queda con el valor numerico
else pass[j]-=0x16; //???
}
BYTE i;
for (i=0;i<=7;i++){
l = pass[2*i];
_asm SAR l,1
l &= 0xF; //bit bajo
h = pass[2*i+1];
_asm SAR h,1
_asm SHL h,4
buff[i]=h|l;
}
}
void reversePass1(char *pass,char *buff) {
//revierte el primer proceso del pass
BYTE i,j,b,h,l;
for (j=0;j<8;j++)
{
//bit de menor peso
b=buff[j];
b&=0xF;
b<<=1;
pass[j*2]=b+'A';
//bit de mayor peso
b=buff[j];
b>>=4;
b<<=1;
pass[j*2+1]=b+'A';
}
}
void getDWORD(char * buff,char *cadena,char * garb)
{
DWORD j,i,k;
DWORD *ptrG,*ptrG2,*ptrB;
for (j=0;j<8;j++) buff[j]=cadena[j];
for (j=0;j<=1;j++)
{
for (i=0;i<=1;i++){
if (j==i) continue;
k=2*j+i;
k <<= 2;
ptrG = (DWORD*)((2*i+j)*4+garb);
ptrG2 = (DWORD*)(garb+k);
ptrB = (DWORD*)(buff+(j*4));
k = ptrG[0] & ptrG2[0];
ptrB[0] ^= k;
}
}
}
int main(int argc, char *argv[])
{
char username[16],pass[32],nbuff[16],pbuff[16],n2buff[16],p2buff[16];
memset(const1,0,sizeof(const1));
memset(username,0,sizeof(username));
memset(pass,0,sizeof(pass));
memset(nbuff,0,sizeof(nbuff));
memset(n2buff,0,sizeof(n2buff));
memset(pbuff,0,sizeof(pbuff));
memset(p2buff,0,sizeof(p2buff));
memcpy(const1,"\x4C\x0D\x18\x6A\x3F\xB9\x25\xE7\xBD\x96\x9A\x91\xDF\x8F\x9E\x8F\x1E\xDE\xDE\xDE\xDF\xA6\x9E\xDF\x8B\x9A\x91\x9A\x8C\xDF\x9E\x93\x98\x90\xDF\x8F\x9E\x8D\x9E\xDF\x8D\x9A\x9C\x90\x8D\x9B\x9E\x8D\xDF\x9C\x8A\x9E\x91\x9B\x90\xDF\x8C\x9A\x9E\x8C\xDF\x89\x96\x9A\x95\x90\xD7\xC0\xC0\xC0\xC0\xD6\x00\x00\x00\x00\x00\x00\x00\x00",sizeof(const1));
memcpy(const2,"\x0D\xEB\xD0\x68\xE4\x6A\x9D\x48\x81\x56\xA3\xE3\x9E\x85\xF1\x7D",sizeof(const2));
memcpy(const3,"\xCA\x78\x8E\x2C\xD5\x61\xA9\x17\xB4\xA5\x96\x87\xF0\xE1\xD2\xC3",sizeof(const3));
system("CLS");
printf("Usuario:");
scanf("%s",username);
strcpy(pass,"");
system("CLS");
ShowDump(username,sizeof(username));
ShowDump(pass,sizeof(pass));
name1(username,strlen(username),nbuff);
ShowDump(nbuff,sizeof(nbuff));
pass1(pass,pbuff);
ShowDump(pbuff,sizeof(pbuff));
getDWORD(n2buff,nbuff,const2);
ShowDump(n2buff,sizeof(n2buff));
getDWORD(p2buff,pbuff,const3);
ShowDump(p2buff,sizeof(p2buff));
//final
DWORD *pdw1,*pdw2;
pdw1=(DWORD*)n2buff;
pdw2=(DWORD*)p2buff;
DWORD res[2];
char * ver= (char*)&res;
memset(pbuff,0,sizeof(pbuff));
memset(pass,0,sizeof(pass));
res[0]=pdw1[0]^pdw2[0];
res[1]=pdw1[1]^pdw2[1];
for (int j=0;j<8;j++) pbuff[j]=ver[j];
reversePass1(pass,pbuff);
ShowDump(ver,8);
ShowDump(pass,sizeof(pass));
for (int j=0;j<80;j++) printf("-");
printf("Usuario:%s\nClave:%s\n",username,pass);
system("PAUSE");
return EXIT_SUCCESS;
}
Cita de: jamonyqueso en 5 Noviembre 2007, 04:32 AMcomo dice ferdu lo recomendado para ver el programa que hcisite es olly y no un editor de hex, aun asi no esperes encontrar
Hola
Llevo unos dias que no llego a ninguna conclusion y una es esta:
Duda 1:
Hice un programa en Linux y es este
#include <iostream>
int main ()
{
printf " hola nena";
}
Asi de simple
Y la duda que se me plantea es esta:
Ya compilado con "cc codigo.c"lo abro con Khexedit (de linux) y bien me salen cosas incomprensibles en hex y en ASCII... bien y como explicarlo ummmm...aver ¿Hay alguna manera de entender eso?No digo la parte de Hex si no la ascii,la mayoria son simples puntos y caracteres tipo [] y tengo entendido que el ensamblador y el codigo hexadecimal es equivalente como jne=75 asi que se deberia entender...y creo que no esta cifrado,vamos,no creo que el compilador tenga para encriptarse solo.
y además hay muchos números hexadecimales para tan poca cosa
Y si se puede leer en hex ¿donde encuentro la equivalencias?
Cita de: jamonyqueso en 5 Noviembre 2007, 04:32 AMnormalmente los empacadores no meten los bytes a pelo, sino que remplazan unos bytes por otros para ahorrar espacio (esto sin hablar de los q encriptan), eso lo hacen mediante algoritmos mas o menos complejos.
Duda 2:
Tengo entendido que la ps1 usa mapas de bits de 256*256 a 16 bits,creo que era asi
Y hay un programa que se llama psmplay que sirve para extraer vídeos,imágenes,mapas de bits y mas... y tenia la idea que desde una imagen recorriera desde el primer bit hasta el ultimo y extrajera los BMP pero la duda es la mayoría de los juegos están metidos en otros archivos mas grandes (como FF8 o el FF9) y suponía que los archivos BMP empiezan desde unas marcas(o unos códigos de iniciación,para saber si es realmente BMP,o JPG tamaño y tal y que acaba en otros)le hago ingieneria inversa a una foto y mi sorpresa es que impieza por varios "00" en hexadecimal ¬¬ con lo cual mi teoria se fue al traste,aparte de que aparecia la marca de la cámara de photos ¬¬ ...¿como identifico codigo de BMP?
Cita de: jamonyqueso en 5 Noviembre 2007, 04:32 AMpor poder se puede, de hecho los primeros programas se hicieron en binario... q lo entiendas y/o y q tengas el tiempo de hacerlo, eso ya es cosa tuya....
Duda 3
¿se puede programar (y que se entienda) en hexadecimal puro?
Yo por lo menos no encuentro ningún tutorial.
Cita de: jamonyqueso en 5 Noviembre 2007, 04:32 AMpor poder puedes , pero como ese texto o algo q este a continuacion sea usado por otro programa o por el mismo si estas editando un exe ya te lo cargaste
Duda 4
Al editar textos ascii en hexadecimal y si te quedas sin espacio para escribir ¿se puede agregar espacios? A mi se me come trozos de código(sobreescribe)....y no hay manera
Cita de: jamonyqueso en 5 Noviembre 2007, 04:32 AMdepende del binario q sea, pero es logico q el 0 sea usando de relleno en estructuras de datos
Duda 5
¿por que en los binarios hay tantos 00? y seguidos...
Cita de: jamonyqueso en 5 Noviembre 2007, 04:32 AMsi tiene pass no hay manera de ver nada, si no tiene pass puedes abrirlo y ver su estructura , suelen estar organizados en bloques, cada bloque tiene el nombre del archivo y otros bloques q son partes del archivo comprimidos, pero amos que sin un algoritmo q descomprima no te sirve de nada
Duda 6
Hay alguna manera de abrir un archivo en plan .RAR y ver sus archivos internos? como los bmp que están dentro de otros archivos grandes como decia antes.
Cita de: jamonyqueso en 5 Noviembre 2007, 04:32 AMla instruccion JNE y todas las de ensamblador se ejecutan directamente en el CPU, el cpu esta formado por puertas logicas (AND, OR, NOT) que estan formadas basicamente por transistores (silicio dopado). yo no diria que esta programado, mas bien esta diseñado para que su circuito relalize las operaciones nesesarias en cada cadena de niveles bajo y alto (ceros y unos) que le llegan
Duda 7
¿por que 75 o jne,por ejemplo ,al ejecutarse eso,funciona asi? ¿donde esta programado?Es una duda que siempre quise saber.
WriteProcessMemory(hProcess,(LPVOID)0x549539, 1, 1, NULL);
Cita de: msrone en 23 Octubre 2007, 14:48 PMeso tiene un cierto nivel de complejidad arreglarlo, el tema es que el programa tenga controlada una variable dinamica tiene q tenerla referenciada por un puntero obligatoriamente, este puntero puedes encontrarlo debugando el codigo que modifica dicha direccion y con un poco de suerte ese puntero tendra una direccion fija, la otra opcion es modificar el codigo del programa , por ejemplo el caso del tiempo del buscaminas q se va incrementando cada segundo, para evitar q se incremente bastaria buscar el lugar donde se incrementa , suponiendo que llegue a esta linea
El problema es que el tsearch me da una direccion, pero esta varia. Como se podria arreglar esto?
Cita de: msrone en 23 Octubre 2007, 14:48 PMcon Visual C++ 2005 compila perfectament, = si me dices el error te puedo ayudar
No e podido compilar tu codigo me da error, explicame por favor como puedo compilarlo.
Cita de: msrone en 23 Octubre 2007, 14:26 PMla direccion q te da el tsearch es el offset
Vale perfecto, te e entendido bastante bien.
Mis dudas ahroa es si para determinar un offset por ejemplo del oro, debo de realizar una buskeda en la memoria, con el tsearch por ejemplo viendo donde esta la direccion del oro, y despues como lo paso al offset?
Cita de: msrone en 23 Octubre 2007, 14:26 PMclaro...
Y la segunda, todo esto puede ponerse dentro de un boton que al pulsar de el resultado de añadir esos 10000 de oro?
Cita de: msrone en 23 Octubre 2007, 14:26 PMno deberia pues el NULL es una constante basica pero bueno pon esto al principio del todo (despues de los includes)
estoy utilizando el wxdev-C++ pero no puedo compilar tu codigo xq me da error en el NULL...
gracias
#define NULL 0
#define OFFSET_TIEMPO 0x100579C <--- ahi pones el del oro
CitarReadProcessMemory(hProcess,(LPVOID)OFFSET_TIEMPO, &tiempo, 4, NULL);
tiempo+=10000;
WriteProcessMemory(hProcess,(LPVOID)OFFSET_TIEMPO, &tiempo, 4, NULL);