elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Inyeccion dll sin dll, by E0N. Problema: Edicion de Memoria. [Convertir a C#]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Inyeccion dll sin dll, by E0N. Problema: Edicion de Memoria. [Convertir a C#]  (Leído 3,041 veces)
XSaMuXPH *-* Traigo uno encima! =D!

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Inyeccion dll sin dll, by E0N. Problema: Edicion de Memoria. [Convertir a C#]
« en: 13 Septiembre 2009, 18:43 pm »

Bien, ya muchos han de haber visto el código de E0N, el de inyección DLL sin DLL que bueno es no?  ;D.

Aquí un ejemplo del mismo :P.

Código:
#pragma hdrstop
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>

//Creamos un puntero a la api que queremos inyectar
typedef int (WINAPI *datMessageBoxA) (HWND, LPCTSTR, LPCTSTR, UINT);

//La estructura que inyectaremos
struct datos
{
datMessageBoxA apiMessageBoxA;
char titulo [100];
char mensaje [100];
};


//Declaración de funciones
DWORD GetAdres(char *module, char *function);

//La función que inyectaremos
DWORD inyectada (datos *data)
{
data -> apiMessageBoxA (0, data->mensaje, data->titulo, 0);
return 0;
}

//La función iyectora
void inyectora()
{
int pid; // Este es el pid del proceso en el que nos queremos inyectar
HANDLE proc; // El handle del proceso en el que inyectaremos
datos dat; // El tipo de dato de la estructura
DWORD TamFun; // El tamaño de la función a inyectar
void* esp; // Lugar de memoria donde copiaremos nuestra función

HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //Obtenemos el pid
PROCESSENTRY32 procinfo = { sizeof(PROCESSENTRY32) };
while(Process32Next(handle, &procinfo))
{
if(!strcmp(procinfo.szExeFile, "AVKTray.exe"))
{
CloseHandle(handle);
pid = procinfo.th32ProcessID;
}
}
CloseHandle(handle);

//Abrimos el proceso en el que nos inyectaremos

proc = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, false, pid);

//Metemos la dirección de la api en la estructura llamndo a la función GetAdres
dat.apiMessageBoxA = (datMessageBoxA) GetAdres ("USER32.DLL", "MessageBoxA");

//Inicializamos las variables que contendrán el mensaje
sprintf(dat.mensaje,"holaaaaaa!!!");
sprintf(dat.titulo,"titulo!!!");


//Reservamos espacio para nuestra estructura en el proceso a inyectar y la escribimos
datos *dat_ = (datos*) VirtualAllocEx(proc, 0, sizeof(datos), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(proc, dat_, &dat, sizeof(datos), NULL);

//Calculamos el tamaño de la función a inyectar
TamFun = (long unsigned int) inyectora - (long unsigned int)inyectada;

//Reservamos espacio para la función, escribimos en él y creamos un hilo
esp = VirtualAllocEx(proc, 0, TamFun, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(proc, esp, (void*)inyectada, TamFun, NULL);
CreateRemoteThread(proc, NULL, 0, (LPTHREAD_START_ROUTINE) esp, dat_, 0, NULL);
}

//La función main
void main()
{
inyectora();
}


//Función que nos devuelve un DWORD con la dirección de una api
DWORD GetAdres(char *module, char *function)
{
HMODULE dh = LoadLibrary(module);
DWORD pf = (DWORD)GetProcAddress(dh,function);
FreeLibrary(dh);
return pf;
}

Bien, ese código inyecta un msgbox hasta donde logre ver y probar, lo inyecta en procesos protegidos! como el hl.exe que tiene su protección "sXe Injected", bueno la pregunta mía es:

¿Ya que se puede inyectar un MsgBox, se podría inyectar un código que no solo muestre un mensaje sino que cambie un valor X en una dirección X en su memoria?

Sera esto posible?

Pues las palabras de E0N Fueron:

Citar
De todas formas si te permite mostrar el MessageBox, quiere decir que has podido usar un montón de apis "peligrosas" como WriteProcessMemory, CreateRemoteThread o VirtualAllocEx, con lo que facilmente podrías inyectarle una dll (por facilitar la tarea) y retocar ciertos valores en memoria para hacer trampas.

Según el debí haber ido a cheatengine.org los cuales son Cheaters profesionales, he ido pero como que les ha quedado grande el codigote de E0N, alguien aquí presente sabría cómo hacer ello?.

He aquí una demostración de una DLL en Delphi, que cambiaba valores en la memoria del proceso donde se inyectó:

Código:
library DllProyect;

uses
  SysUtils,  Windows,  Classes,  DllForm in 'Dll.pas' {DllForm};

{$R *.res}
var
  hProcess:THandle;
  hId:Cardinal;

procedure funcStartCheating;
  begin;
    MainForm:=TMainForm.Create(nil);
    MainForm.ShowModal;
  end;
begin
  hProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,GetCurrentProcessID);
  CreateRemoteThread(hProcess,nil,0,@funcStartCheating,@funcStartCheating,0,hID);
end.

Bien ese es el código de la DLL, la cual me permite mostrar un Formulario para hacerme más fácil el trabajo de edición de memoria, he aquí el código de edición de memoria:

Código:
var
  MainForm: TMainForm;
  Memory: DWORD;
  j: integer;
  ZeroBytes: Array of Byte;

procedure TMainForm.Timer1Timer(Sender: TObject);
var
number: byte;
character: char;
j: integer;
Addresspointer: Dword;
begin

if Checkbox1.Checked=True then
begin
    Addresspointer:= PDWORD($0087A35C)^+$93;
    PBYTE(Addresspointer)^:=0;
end;

if Checkbox5.Checked=True then
begin
    CopyMemory(ptr(PDWORD($004023c1)^+$1),@ZeroBytes,8);
end;

if checkbox12.Checked = true then
  begin;
  PBYTE($00928D1E)^:=0;
end;

if checkbox10.Checked = true then
begin;
    CopyMemory(ptr($00010701),@ZeroBytes,10);
end;
end;

end.

Bien eso cambia el valor de la direccion X con el Valor X para lograr hacer trampas :P, ahora mi duda  es:

¿Cómo se hace ello con el codigo de Inyección DLL sin DLL?
¿Cómo integro tal codigo dentro de ese inyector?
¿Es posible?.

Según E0N si.
Espero alguien sepa de que estoy hablando y me pueda ayudar, sin mas que decir me despido con un tipico "Gracias de antemano" aunque no logren ayudarme un gracias nunca esta demas :P.

pd: me falto una pregunta Y la más importante:

¿SE PUEDE CAMBIAR ESTE CODIGO A C# 2008?

Hasta Luego!.


« Última modificación: 18 Septiembre 2009, 01:21 am por Morph.C » En línea

XSaMuXPH *-* Traigo uno encima! =D!

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Inyeccion dll sin dll, by E0N. Problema: Edicion de Memoria. [Convertir a C#]
« Respuesta #1 en: 16 Septiembre 2009, 01:45 am »

Dicen que la paciencia es una virtud, pues no la tengo  :-\.

Alguien enserio podría ayudarme???, hasta luego  :-(


En línea

XSaMuXPH *-* Traigo uno encima! =D!

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Re: Inyeccion dll sin dll, by E0N. Problema: Edicion de Memoria. [Convertir a C#]
« Respuesta #2 en: 16 Septiembre 2009, 19:19 pm »

sorry por el doble post xD...

haha :P como a cheat engine, a ustedes tambien les quedo grande xD (a que ahora si responden xDD!)

;)

« Última modificación: 16 Septiembre 2009, 19:20 pm por Morph.C » En línea

Atrum

Desconectado Desconectado

Mensajes: 65



Ver Perfil WWW
Re: Inyeccion dll sin dll, by E0N. Problema: Edicion de Memoria. [Convertir a C#]
« Respuesta #3 en: 17 Septiembre 2009, 16:35 pm »

Pues la verdad no creo que se pueda exportar a C# ya que no maneja la memoria como C++, las operaciones de los punteros no veo de que forma se puedan exportar a C#, es como si programaras un exploit en C# o Visual Basic, no lo se, lo veo muy dificil.

Y pues en lo personal este code si me quedo grande   :P
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema Fallout 3 Edicion GOTY
Juegos y Consolas
vincent13m 0 2,515 Último mensaje 4 Diciembre 2010, 22:08 pm
por vincent13m
problema al convertir de VB.net a C#
.NET (C#, VB.NET, ASP)
evicar 0 1,354 Último mensaje 23 Diciembre 2011, 02:35 am
por evicar
[C++] Inyección de código en memoria- Aplicación crashea « 1 2 »
Análisis y Diseño de Malware
Kaxperday 10 4,729 Último mensaje 8 Abril 2016, 20:39 pm
por Kaxperday
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines