Menú

Mostrar Mensajes

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ú

Mensajes - Arkangel_0x7C5

#101
Lo que te pase no debería de comerse ningún numero, si lo dices por la salida por pantalla, es el printf el que no los muestra
Código (cpp) [Seleccionar]

printf("Numero %08X Invertido %08X\n",Numero,Invertido);

Con esta modificacion muestra tambien los 0 de arriba, pero que no los mostrara no significa que no los invierta. Ese trozo lo puse para que vieras el resultado

Este code esta filtrando en grupos de 2bytes (16bits)
Código (cpp) [Seleccionar]

if ( addr & 0x2 )  data = (data>>16)&0xffff ;
  else               data = (data&0x0000ffff) ;
#102
si quieres invertirlos haz algo así:
Código (cpp) [Seleccionar]

long Numero = 0x01020304;//Este es el numero que vamos a invertir
long Invertido = 0;//Lo guardaremos aqui

//Cojo la direccion de la variable con & y ago un cast de tipos con (char*)
//para que lo interprete como un array de bytes;
//[X] es el indice del array que siempre empieza en zero; Un long tiene 4 bytes por lo que el mayor indice seria 3 y el menor 0
((char*)&Invertido)[0] = ((char*)&Numero)[3];
((char*)&Invertido)[1] = ((char*)&Numero)[2];
((char*)&Invertido)[2] = ((char*)&Numero)[1];
((char*)&Invertido)[3] = ((char*)&Numero)[0];

printf("Numero %X Invertido %X\n",Numero,Invertido);


Lo de leerlos de 4 en 4 o de 1 en 1 solo debería de tener importancia al mostrarlos por pantalla, en el archivo se van a guardar igual porque no modificas lo que recibes, solo afecta a la forma de interpretar el numero.(Lectura)
#103
lo que tu le metes al chip lo guardas en un archivo antes de escribirlo?
Puede ser que ese chip tenga otro orden de bytes diferente. y el otro programa haga una traducción al pasarlo por la consola.
#104
en el archivo se esta escribiendo bien, lo que ocurre es que lo imprimes por pantalla en grupos de 4 bytes. Y la CPU lee de derecha a izquierda, siendo los primeros los de mas bajo valor (little-endian)
#105
Cita de: Cromatico en 13 Abril 2011, 00:22 AM
Hola disculpen que postee de nuevo, tengo una duda!!

yo llamo asi a la funcion:

long ReadLongVb (long Address)
{
BYTE Array[30];
ReadLong(Address,&Array,30);
return (Array[0]);
}


Esa es la funcion a la que llamo desde vb, seguramente se podra hacer directamente a la funcion ReadLong, pero bueno es la forma mas facil que encontre y funciona bien :P.

Entonces en vb recibo el array 0, pero la pregunta es, como hago para que me retorne todo el array completo?
E intentado muchas cosas pero no logre hacer que me retorne todo el array: 30...

Gracias!
para eso necesitas usar punteros, el problema es que VB no te deja manejar punteros directamente. tambien necesitarias usar memoria dinamica, porque las variables locales son sobrescritas al salir de la funcion que las creo, por lo que si la funcion debuelve un puntero a una variable local en esta no estara el contenido que uno espera.

EDIT:
mirate esta pagina: http://www.psicofxp.com/forums/programacion.313/292049-punteros-en-vb.html
#106
Cita de: Cromatico en 12 Abril 2011, 21:22 PM
Hola Arcangel_0x7C5, gracias por contestarme... Bueno aver yo la llamo asi mira:

DWORD dwHP;
ReadLong(Address,&dwHP,"4");


Pero si en vez de 4 pongo mas, me tira error :(

Esto me devuelve la funcion: "7471216"
Que no se que tiene que ver con: "70 00 72 00 75 00 65 00 62 00 61"

:S Gracias!
porque un DWORD solo permite almacenar 4 bytes. De todas maneras, el 4 entre comillas es una cadena de caracteres y no un numero entero. por lo que me extraña que no te de error

yo haria esto:
Código (cpp) [Seleccionar]

BYTE Array[20];
ReadLong(Address,&Array,20);

y con DWORD asi:
Código (cpp) [Seleccionar]

DWORD Array[20];
ReadLong(Address,&Array,sizeof(DWORD)*20);
#107
el parámetro len de ReadProcessMemory(hProcess, (void *) lpAddress, buf, len, 0); le dice cuanto puede leer de maximo.
#108
Con DeviceIoControl  puedes comunicarte con el driver desde la GUI.

y recomendaciones....
Solo expreso mi punto de vista. Pero cada uno es libre de hacer las cosas como mejor vea.

Saludos
#109
Cita de: Daas Cook en 17 Marzo 2011, 22:39 PM
:laugh:... No estoy inyectando código para iniciar mi controlador... de hecho, es todo lo contrario; Inicio mi controlador, para poder inyectar código sin problema alguno... :xD.
Entonces no necesitas portar ese código para inyectar, porque el propio driver puede inyectarte en el proceso que quieras. En Ring0 tiene Acceso al Espacio de memoria de todos los procesos. Pero el código de Ring3 no tiene porque funcionar en el 0.
#110
una pregunta, para que necesitas inyectar código para iniciar el servicio del Driver.
La unica razon que se me ocurre es por cuestiones de sigilo. Porque no puedes aprir un proceso con permisos de administrador desde uno que no los tenga (Excepto en caso de algun bug).


Saludos