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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  ya logre obtener PEB de kernel32.. y ahora como continuo?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ya logre obtener PEB de kernel32.. y ahora como continuo?  (Leído 7,064 veces)
Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
ya logre obtener PEB de kernel32.. y ahora como continuo?
« en: 14 Junio 2012, 06:00 am »

hola

bueno, estoy aprendiendo asm, acabo de entender como encontrar PEB de kernel32.dll

Código
  1. DWORD Kerbel;
  2.  
  3. __asm{
  4.  
  5. xor eax, eax
  6. mov eax, fs:[0x30]
  7. mov eax, [eax+0x0C]
  8. mov eax, [eax+0x1C]
  9. mov eax, [eax]
  10. mov eax, [eax+0x08]
  11. mov Kerbel, eax
  12.  
  13. }
  14.  
  15. printf("PEB asm: %8X", Kerbel );

estuve revisndo sobre la estructura PEB, apuntar a InLoadOrderModuleList de LDR, etc...

ya lo intente y si me funciono, pero despues que tengo que hacer para encontrar LoadLibraryA?, y como podria utilizarlo para obtener la direccion con GetProcAddress de MessageBoxA y poder ejecutar un MessageBox con un mensaje?

y porcierto, porque ese mismo codigo en asm no me funciona en fasm?, cual es la diferencia?

espero me puedan orientar, salu2



En línea

.                                 
_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: ya logre obtener PEB de kernel32.. y ahora como continuo?
« Respuesta #1 en: 14 Junio 2012, 22:20 pm »

En cuanto a la parte de fasm:
Código:
[fs:0x30]
cinvoke printf, szStrFrmt, [kerbel]

Saludos.


En línea

Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
Re: ya logre obtener PEB de kernel32.. y ahora como continuo?
« Respuesta #2 en: 15 Junio 2012, 06:06 am »

hola

gracias por responder

asi pongo el codigo con [fs:0x30], pero me aparece un error al ejecutarlo, intente depurarlo pero la verdad no entendi cual seria el error  :(

Código
  1. include 'C:\fasm\include\win32ax.inc'
  2.  
  3. .data
  4. Kerbel dd ?
  5.  
  6. .code
  7. start:
  8. xor eax, eax
  9. mov eax, [fs:0x30]
  10. mov eax, [eax + 0x0C]
  11. mov eax, [eax + 0x1C]
  12. mov eax, [eax]
  13. mov eax, [eax + 0x08]
  14. mov [Kerbel], eax
  15. invoke MessageBoxA, 0, [Kerbel],0
  16. .end start      


y encontre esto

Código
  1. stdcall [pGetProcAddress],[BaseKernel32],"LoadLibraryA"

pero no entiendo donde o como hizo una llamada a la Api GetProcAddress, solo tiene esto

Código
  1. proc FuncionInyectada,pGetProcAddress
  2. locals ; Definimos las variables locales
  3. BaseKernel32 dd ?    ;MZ de la kernel32.dll
  4. endl
  5. ;Leemos el PEB  para obtener la base del kernel
  6.     xor  eax, eax
  7.     add  eax,[fs:eax+30h]
  8.     mov  eax, [eax + 0ch]
  9.     mov  esi, [eax + 1ch]
  10.     lodsd
  11.     mov  eax, [eax + 08h]
  12.     mov [BaseKernel32],eax ;Guardamos en BaseKernel32 el MZ de la kernel32.dll

y no veo como llamo  a la API, talvez es porque estoy acostumbrado a que en C se escribe que api necesitas porque aqui no lo veo

y tambien encontre

Código
  1. include 'win32ax.inc'     ;Incluimos la libreria
  2. .code                 ;Declaramos la sección de codigo .
  3. start:  ;Entry point
  4. invoke GetModuleHandle,"kernel32.dll"   ;Sacamos la posicion de la kernel32.dll
  5. invoke GetProcAddress,eax,"lstrlenA"    ;Sacamos la dirección de lstrlenA de la libreria kernel32.dll
  6. mov ebx,eax                             ;Guardamos la direccion de lstrlenA en ebx
  7. ret ; salimos
  8. .end start ;Establecemos el EntryPoint y el
  9.  

crees que si hago algo asi funcione?
Código
  1. include 'C:\fasm\include\win32ax.inc'
  2.  
  3. .data
  4. Kerbel dd ?
  5.  
  6. .code
  7. start:
  8. xor eax, eax
  9. mov eax, [fs:0x30]
  10. mov eax, [eax + 0x0C]
  11. mov eax, [eax + 0x1C]
  12. mov eax, [eax]
  13. mov eax, [eax + 0x08]
  14. mov [Kerbel], eax
  15. invoke GetProcAddress, [Kerbel], "LoadLibraryA"
  16. invoke GetModuleHandle, "user32.dll"
  17. invoke GetProcAddress, eax, "MessageBoxA"
  18.  
  19. mov ebx, eax
  20.  
  21. push 0
  22. push "hola"
  23. push 0
  24. push ebx
  25. .end start

XD... bueno la verdad no se que hice, espero me puedan ayudar, porke no se como mas podria empezar

salu2
En línea

.                                 
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: ya logre obtener PEB de kernel32.. y ahora como continuo?
« Respuesta #3 en: 15 Junio 2012, 09:25 am »

El problema es que solo estas haciendo copy - paste y quiza ni sabes lo basico de lenguaje ensamblador ( no lo digo de mal forma )
solo viendo tu codigo

y eso de...
Citar
crees que si hago algo asi funcione?
que es eso? crees que no seria mucho más seguro y rapido comprobarlo por vos mismo y tratar de ensamblar y depurar el codigo para ver si funciona?
si se obtiene lo que esperas es porque funciona no? sino hay que depurar.

para saber como usar la W32 esta la MSDN.
En línea

fary


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: ya logre obtener PEB de kernel32.. y ahora como continuo?
« Respuesta #4 en: 15 Junio 2012, 13:34 pm »

http://el-blog-de-thor.blogspot.com.es/2011/05/usando-getprocaddress-y-loadlibrary_07.html
En línea

Un byte a la izquierda.
_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: ya logre obtener PEB de kernel32.. y ahora como continuo?
« Respuesta #5 en: 15 Junio 2012, 15:42 pm »

Tampoco dices que es lo que quieres lograr.

No pudes utilizar win32ax.inc si no quieres tener una sección de imports. Porque ese conjunto de macros te agrega todos los imports automáticamente.

A ningún antivirus le gustan las ejecutables que no tengan una sección con imports.
En línea

Иōҳ


Desconectado Desconectado

Mensajes: 563


Ver Perfil
Re: ya logre obtener PEB de kernel32.. y ahora como continuo?
« Respuesta #6 en: 15 Junio 2012, 17:29 pm »

Tienes que estudiar el Formato PE.

Saludos,
Nox.
En línea

Eres adicto a la Ing. Inversa? -> www.noxsoft.net
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.470


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: ya logre obtener PEB de kernel32.. y ahora como continuo?
« Respuesta #7 en: 15 Junio 2012, 22:34 pm »

Esto esta en los ejemplos del paquete MASM: \masm32\examples\exampl06\mob\noimport

Aca se saca la base del Kernel del stack. Creo que sacarlo de la PEB es mejor.. :)

Espero te sirva

Código:
; =======================================
; NO_IMPORT by mob aka drcmda
; this program demonstrates how to write
; portable code... this code could be
; added to other executables with no prob.
; i'm over that virus shit so don't waste
; your time... i'm working on something
; like a executable patcher right now so
; portable code was very interesting for
; me...................................
; if you want to use other apis or other
; dll's then use this structure:
; 00      db ?? ;lenght of name
; 01 - ?? db ?? ;API name
; ??      dd ?? ;pointer
; then use 'GetApis' to find their
; pointers so you don't have to search
; the pointers with GetModuleHandle
; write to drcmda@gmx.de
; =======================================

; ---------------------------------------------------
; Build with MAKEIT.BAT to merge the .text and .data
; sections. Result is a 1024 byte length EXE file.
; ---------------------------------------------------

.486
.Model      Flat, Stdcall
Option      Casemap:None

.Data

; kernel32.dll api's
___Kernel32         db 14,"GetProcAddress"
_Getprocaddress     dd 0
                    db 11,"LoadLibrary"
_Loadlibrary        dd 0

; ntdll.dll api's
___ntdll           db 12,"ZwCreateFile"
_ZwCreateFile        dd 0

_Kernel             Dd 0
_Default            Dd 0
_ntdll db "ntdll.dll",0
  

.Code      
    
Start:
            Call    Delta
Delta:
            Pop     Ebp                                 ; get deltaofs    
            Sub     Ebp,Offset Delta                    ; for portability        
            
            Call    Get_Kernel                          ; get kernel base/set default
            
            Push    2                                   ; 3 api's in the kernel32 struc
            pop     Ecx
            Lea     Esi,[Ebp+Offset ___Kernel32]                                          
            Call    Get_Apis                            ; get kernel apis
                      
            Lea     Eax,[Ebp+Offset _ntdll]            ; load ntdll.dll
            Push    Eax
            Call    [Ebp+_Loadlibrary]            
            
            test    Eax,Eax
            jz      Error_Exit

            Mov     [Ebp+Offset _Default],Eax           ; store result in 'default'

            push    1                                   ; 4 api's in the user32 struc
            pop     Ecx
            Lea     Esi, [Ebp+Offset ___ntdll]                                          
            Call    Get_Apis                            ; get user32 apis          
                                  
            Push    -1
            Call    [Ebp+_Messagebeep]                  ; beep
            
            Push    0
            Call    _t02
            db      "little test",0
_t02:       Call    _t01
            db      "MessageBox without imports, funny eh?",0
_t01:       Push    0
            Call    [Ebp+_MessageBox]                   ; messagebox

Error_Exit:                                
            Push    0
            Call    [Ebp+_Exitprocess]                  ; get out


; ######################## get kernel ########################
; returns kernelbase and stores it in 'default' and 'kernel'
Get_Kernel:
            Mov     Ecx,[Esp+4] ; get kerneladdr from stack
            
Kernel_Loop:
            Xor     Edx,Edx
            Dec     Ecx
            Mov     Dx,[Ecx+3Ch]
            Test    Dx,0F800H
            Jnz     Kernel_Loop
            Cmp     Ecx,[Ecx+Edx+34H]
            Jnz     Kernel_Loop            
            Mov     [Ebp+Offset _Kernel],Ecx
            Mov     [Ebp+Offset _Default],Ecx                                            
            Ret

; ######################## get apis   ########################
; default   = dll base
; ecx       = number of api's in the structure
; esi       = pointer to structure
Get_Apis:  
            Xor     Ebx,Ebx
Api_Loop:
            Inc     Esi         ; scan through the api
            Push    Ecx         ; table and try to
            Movzx   ecx, byte ptr [Esi-1] ; addresses...                
            Push    Ecx
            Call    Get_Api
            Pop     Ebx
            Pop     Ecx
            Add     Esi,Ebx            
            Mov     [Esi],Eax
            Add     Esi,4
            Loop    Api_Loop
            Ret      

; ######################## get api    ########################
; default = dll base
; ecx     = structure entry
Get_Api:  
            Mov     Edx, [Ebp+Offset _Default]
            Add     Edx, [Edx+3Ch] ; get default module        
            Mov     Edx, [Edx+78H]
            Add     Edx, [Ebp+Offset _Default]

            Mov     Edi, [Edx+32] ;Get Addrofnames
            Add     Edi, [Ebp+Offset _Default]
            Mov     Edi, [Edi] ;Get Addrofnames
            Add     Edi, [Ebp+Offset _Default]
            Mov     Eax, [Edx+24] ;Get Numberofnames                                  
            Xor     Ebx,Ebx
Next_One:            
            Push    Ecx
            Inc     Ebx          
            Push    Esi
            Push    Edi
            Repz    Cmpsb ; compare api with export
            Pop     Edi
            Pop     Esi
            Jnz     Not_Found            
            Pop     Ecx
            Mov     Ecx, [Edx+36] ;Get Addrnameord
            Add     Ecx, [Ebp+Offset _Default]
            Dec     Ebx
            Movzx   eax, word ptr [Ecx+Ebx*2]                        
            Mov     Ebx, [Edx+28] ;Get Addroffunctions
            Add     Ebx, [Ebp+Offset _Default]
            Mov     Eax, [Ebx+Eax*4]                
            Add     Eax, [Ebp+Offset _Default]
            Ret
Not_Found:  
            Dec     Edi            
Loop_1:
            Inc     Edi
            Cmp     Byte Ptr [Edi],0
            Jnz     Loop_1

            Inc     Edi            
            Dec     Eax
            Jz      Exit_Search            
            Pop     Ecx
            Jmp     Next_One
Exit_Search:  
            Jmp     Error_Exit
            Ret                        
        
End         Start
« Última modificación: 15 Junio 2012, 22:36 pm 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."

Belial & Grimoire


Desconectado Desconectado

Mensajes: 559


Tea_Madhatter


Ver Perfil
Re: ya logre obtener PEB de kernel32.. y ahora como continuo?
« Respuesta #8 en: 16 Junio 2012, 05:51 am »

Citar
RHL

El problema es que solo estas haciendo copy - paste y quiza ni sabes lo basico de lenguaje ensamblador ( no lo digo de mal forma )
solo viendo tu codigo

que es eso? crees que no seria mucho más seguro y rapido comprobarlo por vos mismo y tratar de ensamblar y depurar el codigo para ver si funciona?
si se obtiene lo que esperas es porque funciona no? sino hay que depurar.

jeje yo se que parece un copy - paste, pero si e investigado sobre la estructura PEB, incluso en el primer post describo que estudie el como encontrarlo, talvez hay formas mas optimas pero apenas estoy empezando con ASM por eso no puedo hacer todavia algo mas optimo

el problema tambien esta en que no encuentro tutoriales ASM con ejercicios, solo encuentro con 3 ejercicios, un "hola mundo", un MessageBoxA y una GUI

asi que pues decidi, hacer cosas que hago en C, pero en ensamblador para irme acostumbrando

Y si trate de comprobarlo pero no me funciono, y preferi poner un intento fallido, a no poner nada y que piensen que estoy esperando que alguien me haga todo

 
Citar

gracias, de aqui encontre la explicacion de la estructura PEB y esta parte no la habia visto

Citar
_Enko
Tampoco dices que es lo que quieres lograr.

No pudes utilizar win32ax.inc si no quieres tener una sección de imports. Porque ese conjunto de macros te agrega todos los imports automáticamente.

A ningún antivirus le gustan las ejecutables que no tengan una sección con imports.

pues de hecho si lo hice, en el primer post comente que queria saber como encontrar las direcciones para ejecutar un messagebox con un mensaje

algo parecido a C

Este codigo sencillo es mio, no vayan a pensar que lo copie  ;D

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <Windows.h>
  4.  
  5. typedef int (CALLBACK *MSBX)(HWND, LPCTSTR, LPCTSTR, UINT);
  6.  
  7. int main(int *argv, char *argc){
  8.  
  9. HMODULE han;
  10. MSBX msgbox;
  11.  
  12. han = LoadLibrary(L"User32.dll");
  13. msgbox = (MSBX)GetProcAddress(han, "MessageBoxA");
  14.  
  15. msgbox(NULL,"mensaje","exito!!", NULL);
  16.  
  17. }

a lo de win32ax solo lo puse porque me dijeron que si ponia eso, ya no era necesario imports, pero entonces creo mejor lo quitare y me acostumbrare a los imports  ;D

Citar
Иōҳ

Tienes que estudiar el Formato PE.

pues si los estuve estudiando, de hecho fui el que mas pregunto en el taller de "The Swash", la verdad me ayudo mucho su taller, logre aprender bastante

 
Citar
MCKSys Argentina
Esto esta en los ejemplos del paquete MASM: \masm32\examples\exampl06\mob\noimport

Aca se saca la base del Kernel del stack. Creo que sacarlo de la PEB es mejor.. :)

gracias, pero eso es lo que estoy tratando de encontrar es despues de kernel32, que mas sigue, por eso pedia saber que mas necesito estudiar o entender para poder continuar, digo no busco que me pongan el codigo, sino que tengo que aprender o buscar para poder avanzar y si llegara a tener problemas, esperar que alguien aqui me pueda orientar, sobre que podria estar haciendo mal

bueno, espero me pudan ayudar

salu2
En línea

.                                 
_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: ya logre obtener PEB de kernel32.. y ahora como continuo?
« Respuesta #9 en: 16 Junio 2012, 16:07 pm »

Si quieres un MessageBox haces esto:
Citar
; example of simplified Windows programming using complex macro features

include '%fasminc%\win32ax.inc' ; you can simply switch between win32ax, win32wx, win64ax and win64wx here
.data
   msg db '..........',0
.code

  start:
   invoke   MessageBox,HWND_DESKTOP,msg,msg,MB_OK
   invoke   ExitProcess,0

.end start
Y todo el demás embrollo es innecesario.
Ahora, si quieres un Messagebox sin tener que usar el import de MessageBoxA ... no lo has dicho en su momento.

El codigo de C que pasaste en assembly se va a ver muy parecido. Importas LoadLibrary y la usas para conseguir el resto de las direcciones.


Código:
invoke LoadLibrary, szUSER32
invoke GetProcAddress, eax, szMessageBoxA
mov  [MsgBox], eax

stdcall [MsgBox], HWND_DESKTOP, msg, msg, MB_OK
invoke MsgBox, HWND_DESKTOP....
« Última modificación: 16 Junio 2012, 16:13 pm por _Enko » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Papel continuo personalizado XP
Programación Visual Basic
F7 1 4,608 Último mensaje 21 Marzo 2007, 00:54 am
por CeLaYa
Como obtener el handle de kernel32 library???
ASM
harry_the_blogger 1 2,141 Último mensaje 24 Agosto 2014, 23:55 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines