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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Ayuda! Problema con MASM Inline
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda! Problema con MASM Inline  (Leído 4,960 veces)
Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Ayuda! Problema con MASM Inline
« en: 27 Agosto 2013, 23:38 pm »

Hola amigos! Alguien con un poco de tiempo se anima a revisar por que no funciona este code! El error salta cuando busco la direccion de "socket",, me da mal el Ordinal de la funcion, y no me devuelve la direccion... Gracias!
Código:
#include <windows.h>
#include <stdio.h>
#include <iostream>
using namespace std;

int Kernel32();
DWORD GetOffset(DWORD Modulo, char *Funcion, DWORD Tamaño);
int LoadLibrari(char *Modulo);

DWORD Krn32 = 0;
DWORD Ws2_32 = 0;
//**************************
DWORD GetProcA = 0;
DWORD LoadLibA = 0;
DWORD Sock = 0;
//**************************
DWORD Contador;
DWORD PEHeader = 0;
DWORD ET = 0;
WORD PosicionEAT = 0;

DWORD Retorno = 0;

int main()
{

Kernel32();
printf("\n\nLa direccion de Memoria de Kernel32.dll es: %8X", Krn32);
printf("\nLa direccion de Memoria de Kernel32.dll con LoadLibraryA es: %8X", LoadLibraryA("Kernel32.dll"));

cout << "\n\n*****************************************************************" << endl;

GetProcA = GetOffset( Krn32, "GetProcAddress", 14 );
printf("La direccion de Memoria de GetProcAddress es: %8X", GetProcA);
printf("\nLa direccion de Memoria de GetProcAddress con GetProcAddress es: %8X", GetProcAddress((HMODULE)Krn32,"GetProcAddress"));

cout << "\n\n*********************************************************************" << endl;

LoadLibA = GetOffset( Krn32, "LoadLibraryA", 12 );
printf("La direccion de Memoria de LoadLibraryA es: %8X", LoadLibA);
printf("\nLa direccion de Memoria de LoadLibraryA con GetProcAddress es: %8X", GetProcAddress((HMODULE)Krn32,"LoadLibraryA"));

cout << "\n\n*********************************************************************" << endl;

Ws2_32 = LoadLibrari("ws2_32.dll");
printf("\nLa direccion de Memoria de Ws2_32.dll es: %8X", Ws2_32);
printf("\nLa direccion de Memoria de Ws2_32.dll con LoadLibraryA es: %8X", LoadLibraryA("Ws2_32.dll"));

cout << "\n\n*********************************************************************" << endl;

Sock = GetOffset( Ws2_32, "socket", 6 );
printf("\nLa direccion de Memoria de socket es: %8X", Sock);
printf("\nLa direccion de Memoria de socket con GetProcAddress es: %8X", GetProcAddress((HMODULE)Ws2_32,"socket"));

cin.get();
}

int Kernel32()
{

__asm{
mov eax, fs:[0x30]
mov eax, [eax + 0x0C]
lea eax, [eax + 0x0C]
NextModule:
mov eax, [eax]
mov ebx, [eax + 0x30]
cmp byte ptr[ebx + 6*2], '3'
jne NextModule
mov ebx, [eax + 0x18]
mov Krn32, ebx
}

return 0;
}
DWORD GetOffset(DWORD Modulo, char *Funcion, DWORD Tamaño)
{

__asm {

mov Contador, -1

mov eax, Modulo
  add eax, [eax+3Ch]
  mov [PEHeader], eax
  add eax, 78h
  mov eax, [eax]
  add eax, Modulo
  mov [ET], eax
  add eax, 20h
mov eax, [eax]
  add eax, Modulo

bucle:

  inc Contador
  mov ebx, [eax]
  add ebx, Modulo
  mov esi, ebx
  add eax, 4
mov edi, Funcion
  mov ecx, Tamaño
  repe cmpsb
  jnz bucle

  mov ecx, [ET]
  mov ecx, [ecx+24h]
  add ecx, [Modulo]
  mov eax, [Contador]
  add eax, eax
  add ecx, eax
  mov ax, word ptr [ecx]
  mov [PosicionEAT], ax

mov eax, [ET]
  mov eax, [eax+1Ch]
  add eax, Modulo
  mov ebx, [Contador]
  rol ebx, 2
  add eax, ebx
  mov eax, [eax]
  add eax, Modulo
mov Retorno, eax

}
cout << "\nEl Ordinal es: " << Contador << endl;
return Retorno;
}
int LoadLibrari(char *Modulo)
{
__asm{
push [Modulo]
call [LoadLibA]
mov Retorno, eax
}

return Retorno;
}


En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.017


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda! Problema con MASM Inline
« Respuesta #1 en: 27 Agosto 2013, 23:43 pm »

Si tenes uno compilado, subilo asi lo puedo ver con un dbg y te doy mas info...

Tengo unos minutos libres.. :)

Saludos!


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Ayuda! Problema con MASM Inline
« Respuesta #2 en: 27 Agosto 2013, 23:56 pm »

Listo... http://www.4shared.com/file/BqAR2or0/Coso.html
« Última modificación: 28 Agosto 2013, 00:04 am por Vaagish » En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.017


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda! Problema con MASM Inline
« Respuesta #3 en: 27 Agosto 2013, 23:57 pm »

@Vaagish: Revisa tus MP's
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Ayuda! Problema con MASM Inline
« Respuesta #4 en: 28 Agosto 2013, 00:06 am »

Sii,, vi! Gracias MCK!
En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.017


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda! Problema con MASM Inline
« Respuesta #5 en: 28 Agosto 2013, 00:13 am »

Bajando a ver...

EDIT: Tengo los redist de VC2008, pero estas DLLs no estan (wtf??)

MSVCP90D.DLL
MSVCR90D.DLL

Osea, esas son las de debug, no? Podes armar uno que linkee a las DLLs del redist?
« Última modificación: 28 Agosto 2013, 00:23 am por MCKSys Argentina » En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Ayuda! Problema con MASM Inline
« Respuesta #6 en: 28 Agosto 2013, 00:40 am »

Si,, el anterior es modo debug,, este es release !

http://www.4shared.com/file/raoh5eiv/Coso_1.html

En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.017


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda! Problema con MASM Inline
« Respuesta #7 en: 28 Agosto 2013, 00:42 am »

A ver...

EDIT:

OK, en Win XP SP3 EN, Si miro la DLL ws2_32 con el Dependency Walker de Visual Studio (tengo esa app del VS 6 :) ), veo que socket tiene un ordinal de 23 (17h) y un hint de 116 (74h).

En GetOffset, en la linea donde haces mov eax, [Contador], a eax se mueve el contador, que vale 74h, osea el valor del hint, el cual no es el ordinal...

Creo que ahi esta el problema...

Saludos!

EDIT 2:

No tengo mas tiempo libre (por una horas, al menos), pero te dejo por las dudas para que revises si has cometido algun error en un offset: http://msdn.microsoft.com/library/windows/hardware/gg463125

Saludos!
« Última modificación: 28 Agosto 2013, 01:05 am por MCKSys Argentina » En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Ayuda! Problema con MASM Inline
« Respuesta #8 en: 28 Agosto 2013, 01:25 am »

Gracias MCK! Pero no se arreglo cambiando [Contador] por Contador.. Igual no entiendo porque Contador tiene el valor de hint, Contador se va incrementando en 1 a medida que recorre las funciones "exportables" dentro del modulo... 116 son todas las funciones que exporta Ws2_32.dll,, o sea que.. llega al final de la export table y no encuentra la funcion "socket",, pero algo esta buscando! y no encuentra!!! Me tiene mal ya.. desde las 14:00 estoy con esto.. y son casi las 21 aca!! jaja

Saludos!!
En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.852


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda! Problema con MASM Inline
« Respuesta #9 en: 28 Agosto 2013, 10:52 am »

No hace falta usar inline assembly para GetOffset, podrias usar las estructuras correctamente en lugar de sumar offsets, de esa manera facilmente podrias aprovechar NumberOfNames para tu bucle, ahora no estas comprobando ningun limite, seguis comparando como si la tabla fuera infinita (osea que una funcion que no este exportada tirara abajo el programa). En fin, que no se entiende nada el codigo sin depurarlo ...

Código
  1. LPVOID myGetOffset(LPVOID Modulo, char *fName)
  2. {
  3.  PIMAGE_DOS_HEADER dosh = (PIMAGE_DOS_HEADER)Modulo;
  4.   PIMAGE_NT_HEADERS nth = (PIMAGE_NT_HEADERS)((ULONG_PTR)Modulo + (ULONG_PTR)dosh->e_lfanew);
  5.  PIMAGE_EXPORT_DIRECTORY exp_dir = (PIMAGE_EXPORT_DIRECTORY)((ULONG_PTR)Modulo + (ULONG_PTR)nth->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
  6.  LPDWORD Names = (LPDWORD)((ULONG_PTR)exp_dir->AddressOfNames + (ULONG_PTR)Modulo);
  7.  for (int x = 0; x < exp_dir->NumberOfNames; ++x)
  8.  {
  9.    if (!strcmp((char*)((ULONG_PTR)*Names + (ULONG_PTR)Modulo), fName))
  10.    {
  11.      LPWORD Ordinals = (LPWORD)((ULONG_PTR)exp_dir->AddressOfNameOrdinals + (ULONG_PTR)Modulo);
  12.      LPDWORD Functions = (LPDWORD)((ULONG_PTR)exp_dir->AddressOfFunctions + (ULONG_PTR)Modulo);
  13.      return (LPVOID)((ULONG_PTR)Functions[Ordinals[x]] + (ULONG_PTR)Modulo);
  14.    }
  15.    ++Names;
  16.  }
  17.  return NULL;
  18. }



Tu problema esta al final de GetOffset, en EBX estas poniendo el valor de Contador y en realidad necesitas usar el ORDINAL que guardaste en PosicionEAT. En definitiva los otros te funcionan de casualidad al coincidir el indice  ::)
« Última modificación: 28 Agosto 2013, 10:55 am por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
problema con la propiedad display:inline-block en navegadores moviles
Desarrollo Web
Pirat3net 1 1,872 Último mensaje 18 Mayo 2013, 21:50 pm
por #!drvy
problema con masm para 64bits
ASM
Belial & Grimoire 4 3,497 Último mensaje 8 Agosto 2013, 20:35 pm
por x64core
Problema winexec y rmdir MASM
ASM
.:UND3R:. 2 1,714 Último mensaje 26 Mayo 2014, 17:36 pm
por Eternal Idol
[masm][pregunta]problema con variables « 1 2 »
ASM
daryo 16 5,189 Último mensaje 5 Agosto 2014, 11:28 am
por Eternal Idol
Centrar pagina, problema al usar display inline
Desarrollo Web
RamaB 0 1,282 Último mensaje 16 Octubre 2016, 16:38 pm
por RamaB
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines