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 - DaasCook

#51
 :laugh: :laugh: :laugh: :laugh: Si fueras un poco más explicito a lo mejor te tendería(mos) (?).
#52
Hola tíos, pues, eso... ¿Alguien sabe de algún equivalente para GetModuleHandleEx?.

Si bien sabemos, su valor de retorno es el identificador de modulo (en un entero/cardinal) de algún modulo especificado y su incremento de la cuenta de referencias de los modulos, a menos que le especifiquemos GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT.

El problema aquí es que: El módulo debe haber sido cargado por el proceso de llamada, por ende no puedo saber el identificador de algún modulo diferente a la API de Windows (módulos globales): Ej: Kernel32.dll, User32.dll, etc... de un proceso externo. Y esa es la razón por la cual vengo a pediros ayuda.

¿Habrá alguna otra manera de conseguir el MID de otro proceso en ejecución (ej: El módulo 'notepad.exe')?.

Después de investigar por varias horas en google, encontré que debía usar EnumProcessModules, tal API jamás la he usado, y no encuentro documentación para delphi acerca de ella, así que... ¿Alguien acá la habrá usado antes?, ¿Será esta API la equivalente a GetModuleHandleEx?.

¡Gracias antes que todo!; SaludOS;
#53
¡Qué desorden de código hermano!.

Te recomendaría que leyeras un manual al menos básico sobre C#, éste te recomendaría encarecidamente, antes de volver a hacer un código así.
#54
Te recomendaría cifrar tales datos y ¡Zasca!. Se le hará dificil a más de uno.
#55
¿Debuguea drivers en kernel mode?, ¿Algo parecido a SoftICE?.
#56
Cita de: BlackZeroX▓▓▒▒░░ en 25 Marzo 2011, 18:34 PM
.
VB6 es un IDE claro esta pero el lenguaje es Basic y ese no se esta muriendo...

Solo voy a decir esto y me largo.
[retorica]Para que lanzar perlas a los cerdos[/retorica]

Dulces Lunas!¡.

¿Para qué discutir con alguien que siempre creerá tener la razón?.

Mejor sigue tu rumbo, pensando que VB es imparable, y que por cada defecto tiene dos mejoras.
#57
Cita de: BlackZeroX▓▓▒▒░░ en 20 Febrero 2011, 00:59 AM
.
Si mencionas a C/C++ y lo relacionas con APIS, entonces tendras que toquetear APIS y/o ASM, de igual manera se puede hacer en VB6. es decir C/C++ son instrucciones y funciones basicas que no hacen practicamente nada funciones y librerias de C/C++, hay librerias no Standart pero aun asi esas no Stantart se pueden hacer. es decir C/C++ No es magia negra.

Lo que quiero decir es que si sabes hacer algo en PseudoCodigo lo puedes migrar a cualquier lenguaje (Exeptuando lenguajes que nesesiten interpretes como PHP con este caso en particular, o quien sabe...)

Dulces Lunas!¡.

Por más que defendáis VB, es perdido...

¿Para qué defender lo indefendible?... Un lenguaje que todos saben acerca de su reputación... Es pérdida de tiempo intentar hacer andar un motor de Ferrari en un Volkswagen jajaja.
#58
Podrán hablar, sacar, publicar, crear marketing, etc... y Opera les sigue dando en el zorrito :laugh:.
#59
El Cheat Engine no tiene ningún editor hexadecimal, lo que si tiene es un visor de memoria, donde, cómodamente visualizas los bytes de X bloque de memoria. Que puedas editarlos a parte, no le da el papel de editor hexadecimal, eso déjaselo a Hex Edit, etc...

A ver, antes de ponerte a buscar offset's y demás, deberías fijarte si tu dirección es estática o dinámica... Intenta guardar la dirección de memoria donde apunta a tal IP, cierra y abre el juego, y revisa si la dirección de memoria aún guarda la dirección donde se mantiene el IP.

Si es así, pues tenéis medio trabajo hecho, tu address es estático (a simple vista) y nada más tendrías que liarte con modificarle, cosa no muy dificil si de C/C++ hablamos.

Un básico ejemplo sería el siguiente (no es muy complejo, pues no soy programador de C/C++, pero es una base y es bastante entendible a mi juicio):

Código (cpp) [Seleccionar]
#include <windows.h>
#include <iostream>

using namespace std;

void EnableDebugPriv(); //Nos aumentamos los privilegios, para evitar problemas con permisos... (Ring 3)

void main() {

BYTE newvalue[] = {0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x2E, 0x00, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; //Este es el valor en hexadecimal, de la cadena: 1 2 7 . 0 . 0 . 1 (rellenamos con 0 los numeros del IP antiguo sobrantes)

HWND hwnd = FindWindow(0, "Solitario"); //Buscamos la ventana de nuestro juego/proceso (Yo hice la prueba con Solitario)

DWORD pid;//Declaramos la variable PID para almacenar el ID de nuestro juego/proceso

if(!hwnd) //Si no encontramos la ventana (el handle es nulo)
{
cout << "Error: No se pudo encontrar la ventana!" << endl;
system("pause");
exit(0);
}
else
{
GetWindowThreadProcessId(hwnd, &pid); //Obtenemos el Id del proceso (PID) en base al handle que nos devuelve FindWindow

HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); //Abrimos el proceso con acceso total (lectura, escritura)

if(!hProcess) //Si no encontramos el juego/proceso (...)
{
cout << "Error: No se pudo abrir el handle" << endl;
system("pause");
exit(0);
}
else //En caso contrario
{
if (WriteProcessMemory(hProcess, //Juego/Proceso a modificar
(LPVOID)0x0100700C, //Direccion de memoria a modificar (Que en tu caso, si no es dinamica deberia ser: 0x0028B244)
&newvalue, //Nuevos bytes a cambiar (en tu caso el nuevo IP)
sizeof(newvalue), //Tamano de los bytes a modificar
NULL)) //Este parametro lo podemos dejar nulo

cout << "Memoria editada con exito!" << endl; //Exito!
else
cout << "Fallo al editar la memoria!" << endl; //Memoria no existente o protegida
}
CloseHandle(hProcess); //Cerramos el handle abierto anteriormente
}
system("pause");
}

void EnableDebugPriv()
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &sedebugnameValue);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, false, &tkp, sizeof tkp, NULL, NULL);
CloseHandle(hToken);
}


Con eso ya tienes tu IP cambiada, espero os funcione.

Y... en caso que sea dinámica la dirección que apunta al IP, avisadme y te doy algunos tips de cómo encontrar su puntero.

Edito:
Tío, no respondo MP's que puedan ser resueltos en el mismo tema, pues mira con un bucle, durarías horas enteras buscando perdiendo tiempo, por tal... Es mejor que puntees tal dirección.

Y ahora dirás ¿Eh que cojones? xD... Pues vale, te toca conseguir la dirección de memoria que apunta al IP, esto puede parecer un tanto dificil, pero, créeme una vez lo aprendes no lo es.

Así que, para no extenderme, te dejaré un video donde explican como puntear direcciones de memoria, el video está en inglés, pero no es muy dificil de entender (y de hecho, enseñan como puntear direcciones usando el mismo Cheat Engine ya que es la manera más fiable de hacerlo).

Si se te hace dificil, decidme y te hago un manual a parte.

Aquí el video: http://www.youtube.com/watch?v=Eo_thbmfFIU

Espero me respondas en el foro, ¿Para eso es el mismo no? xD...
#60
Cita de: Amerikano|Cls en 25 Marzo 2011, 00:47 AM
No hay mejor curso que este http://ricardonarvaja.info/WEB/INTRODUCCION%20AL%20CRACKING%20CON%20OLLYDBG%20DESDE%20CERO/  :silbar:

Muy, muy cierto... Prefiero aprender poco a poco, sin perder dinero, a que me esten apurando, para darme un cartoncito (o quizá no) que no me servirá de nada en una empresa :xD...