comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Subclasificando una ventana FASM

  • 0 Respuestas
  • 2362 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado linkgl

  • *
  • Underc0der
  • Mensajes: 45
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« en: Diciembre 24, 2012, 08:08:49 pm »
Hace mucho hice este código, experimentando y hookeando apis en ring3, lo que hace es cambiar el procedimiento de ventana por uno programado por nosotros y así poder capturar/modificar los mensajes de la ventana de un programa (acá salta un msgbox cada que cambia de posición la ventana, se captura el mensaje WM_WINDOWPOSCHANGED y salta un msgbox y luego manda el mensaje al procedimiento de ventana original para que se mueva la ventana XD) :PP me llevo varios días y nunca le seguí ni lo pulí pero va bien.  :o

Código: ASM
  1. ;******
  2. ; CODED BY LINKGL
  3. ; SUBCLASIFICANDO CALCULADORA EN FASM
  4. ; FELIZ NAVIDAD ¡!                          -
  5. ;                ---      --  --    -  -  / /   ------   ---
  6. ;               |   |    |  ||  \  | || |/ /   |  ____| |   |
  7. ;               |   |  _ |  ||   \ | ||    \   |  |___  |   |  -
  8. ;               |   |_| ||  ||    \  ||  |\ \  |  |   | |   |_| |
  9. ;               |_______||__|| _|\___||__| \_\ |______| |_______|
  10. ;*****
  11. format PE GUI 4.0
  12. entry start
  13. include 'win32ax.inc'
  14.  
  15.   linkpi PROCESS_INFORMATION <>
  16.   linksi STARTUPINFO <>
  17.   temp dd ?,0
  18.   tempu dd ?,0
  19.   tam dd ?,0
  20.   handle dd ?,0
  21.  
  22.  
  23.  
  24.   start:
  25.  
  26.         ;Creamos el proceso y si no existe saltamos a nohayarchivo
  27.         invoke CreateProcessA,0,"c:\windows\system32\calc.exe",0,0,0,0,0,0,linksi,linkpi
  28.         cmp eax,0
  29.         je      .nohayarchivo
  30.         ;Cargamos kernel32.dll
  31.         invoke LoadLibrary,"kernel32.dll"
  32.         mov [temp],eax
  33.         ;Obtenemos la direccion virtual de todas estas API's
  34.         ;Y las almacenamos en distintas variables
  35.         invoke GetProcAddress,[temp],"GetProcAddress"
  36.  
  37.         mov [gpa],eax
  38.  
  39.         invoke GetProcAddress,[temp],"LoadLibraryA"
  40.         mov [gmh],eax
  41.         invoke LoadLibrary,"user32.dll"
  42.         mov [tempu],eax
  43.         invoke GetProcAddress,[tempu],"MessageBoxA"
  44.         mov [msgbox],eax
  45.         mov [msggbox],eax
  46.         invoke GetProcAddress,[tempu],"FindWindowA"
  47.         mov [fwa],eax
  48.         invoke GetProcAddress,[tempu],"SetWindowLongA"
  49.         mov [swl],eax
  50.         invoke GetProcAddress,[tempu],"CallWindowProcA"
  51.         mov [cwp],eax
  52.  
  53.         mov [dir_wproc],WndProc
  54.         ;mov ruta,message
  55.  
  56.         ;sacamos el tamaño de las dos funciones (inyectame y el procedimiento de ventana)
  57.         ;haciendo una resta de la direccion de donde comienza inyectame hasta la direccion de
  58.         ;la etiqueta final
  59.         mov ebx,final
  60.         sub ebx,inyectame
  61.         mov [tam],ebx
  62.         ;Reservamos ese tamaño en la memoria del proceso a inyectarnos
  63.         ;Escribimos nuestras funciones
  64.         ;Y creamos el hilo donde correran las funciones
  65.         invoke VirtualAllocEx,[linkpi.hProcess],0,[tam],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE
  66.         mov [handle],eax
  67.         invoke WriteProcessMemory,[linkpi.hProcess],[handle],addr inyectame,[tam],0
  68.         invoke CreateRemoteThread,[linkpi.hProcess],0,0,[handle],0,0,0
  69.         ; invoke Sleep,3000
  70.       ;  invoke  MessageBox,0,'Extrayendo todo lo posible','Me he inyectado!',0
  71.        ; invoke ResumeThread,[linkpi.hThread]
  72.         ret
  73.   .nohayarchivo:
  74.         invoke MessageBox,HWND_DESKTOP,'No se pudo abrir el proceso especificado','&Error',0
  75.         ret
  76.  
  77.  proc inyectame
  78.  ;Tecnica del offset delta
  79.    call offset
  80.    offset:
  81.    pop edx
  82.    sub edx,offset
  83.    mov edi,edx
  84.    mov esi,edx
  85.    mov esi,edx
  86.    mov edi,edx
  87.    push edx
  88.  
  89.    pop edx
  90. ;un msgbox para ver si todo ha ido bien con el titulo de la ventana
  91.    add edx,ventana
  92.       push 0
  93.    push edx
  94.    push edx
  95.    push 0
  96.    call [edi+msgbox]
  97.    ;restauramos el offset delta
  98.    mov edx,edi
  99.    ;calculamos y cargamos en edx la direccion
  100.    ;de la variable ventana
  101.    add edx,ventana
  102.    ;llamamos a findwindowa
  103.    push edx
  104.    push 0
  105.    call [esi+fwa]
  106.    mov ebx,eax
  107.    ;movemos el handle a ebx
  108.    mov esi,edi
  109.    mov edx,edi
  110.    ;igual calculamos la direccion de la winproc
  111.    add edx,WndProc
  112.    ;llamamos a setwindowlong reemplazando la winproc por la nuestra
  113.    ;con esto ya la subclasificamos e instalamos nuestra wproc
  114.    push edx
  115.    push -4
  116.    push ebx
  117.    call [esi+swl]
  118.    mov [esi+prev_proc],eax
  119.    cmp eax,0
  120.    ;si todo ha ido bien ya instalamos nuestra winproc
  121.    ;si no saldra un msgbox
  122.    je salto
  123.    ;c:\windows\system32\calc.exe
  124.    ret
  125.       salto:
  126.   ; mov edx,edi
  127.   ; add edi,ventana
  128.    mov edx,edi
  129.    add edx,ventana
  130.    push 0
  131.    push edx
  132.    push edx
  133.    push 0
  134.    call [edi+msgbox]
  135.    ret
  136.  
  137.  
  138.   ;VARIABLES
  139.   ;NOTA: Unas son inecesarias solo las use para debuggear errores
  140.   msgbox dd ?  ;Dirección MessageBox
  141.   tit db "Inyectado",0
  142.   msg db "Ya me inyecte",0
  143.   ventana db "Calculadora",0
  144.  
  145.   gpa dd ? ;Dir getprocaddress
  146.   gmh dd ? ;Dir loadlibrary/getmodulehandle en su defecto
  147.   fwa dd ? ;FindWindowA
  148.   swl dd ? ;SetWindowLongA
  149. ;  cwp dd ? ;callwindowproca
  150.   dir_wproc dd ? ;v_address de la winproc
  151.   hndle dd ?
  152.   chl dd ?
  153.  
  154.  
  155.   endp
  156.   ;procedimiento de ventana
  157. proc WndProc, Hwnd, Umsg, wParam, lParam
  158. ;tecnica offset delta
  159.    call delta
  160.    delta:
  161.    pop edx
  162.    sub edx,delta
  163.    mov edi,edx
  164.    mov esi,edx
  165.    mov esi,edx
  166.    mov edi,edx
  167.    push edx
  168.  
  169.    pop edx
  170.  
  171.    mov esi,edx
  172.    mov edi,edx
  173.    ;comparamos el mnsj de entrada aver si es WM_WINDOWPOSCHANGED (0X0047) VER MSDN
  174.    cmp [Umsg],0x0047
  175.    ;Si es el mensaje saltamos a box
  176.    je box
  177.    mov esi,edx
  178.    ;Llamamos a Callwinproc para mandar los mensajes al procedimiento original y no se cuelge el programa
  179.    push [lParam]
  180.    push [wParam]
  181.    push [Umsg]
  182.    push [Hwnd]
  183.    push [esi+prev_proc]
  184.   call [esi+cwp]
  185.   ;fin
  186.    ret
  187.    box:
  188.    ;llamamos al msgbox
  189.    add esi,msgg
  190.    push 0
  191.    push esi
  192.    push esi
  193.    push 0
  194.    call [edi+msggbox]
  195.    ret
  196.    cwp dd ?
  197.    msgg db "Cambio de posicion la ventana",0
  198.    msggbox dd ?
  199. endp
  200. ;DIRECCION de la proc anterior a la que instalamos
  201.   prev_proc dd ?
  202.   final:
  203.  
  204.  
  205.  
  206. data import
  207.  
  208.   library kernel,'KERNEL32.DLL',\
  209.           user,'USER32.DLL'
  210.  
  211.   import kernel,\
  212.          GetModuleHandle,'GetModuleHandleA',\
  213.          ExitProcess,'ExitProcess',\
  214.          CreateProcessA,'CreateProcessA',\
  215.          GetProcAddress,'GetProcAddress',\
  216.   VirtualAllocEx,'VirtualAllocEx',\
  217.   WriteProcessMemory,'WriteProcessMemory',\
  218.   CreateRemoteThread,'CreateRemoteThread',\
  219.   LoadLibrary,'LoadLibraryA',\
  220.   ResumeThread,'ResumeThread',\
  221.   Sleep,'Sleep'
  222.  
  223.   import user,\
  224.          DialogBoxParam,'DialogBoxParamA',\
  225.          CheckRadioButton,'CheckRadioButton',\
  226.          GetDlgItemText,'GetDlgItemTextA',\
  227.          IsDlgButtonChecked,'IsDlgButtonChecked',\
  228.          MessageBox,'MessageBoxA',\
  229.          EndDialog,'EndDialog'
  230.          end data
  231.  
  232.  
« Última modificación: Mayo 01, 2014, 08:50:11 am por Expermicid »

 

¿Te gustó el post? COMPARTILO!



[FASM] Simple Memory Code Injection

Iniciado por ANTRAX

Respuestas: 0
Vistas: 2460
Último mensaje Junio 05, 2012, 04:43:46 pm
por ANTRAX
[FASM] Download & Execute

Iniciado por ANTRAX

Respuestas: 0
Vistas: 4120
Último mensaje Abril 12, 2012, 10:47:20 am
por ANTRAX
[FASM] Ascii85 decode

Iniciado por Karcrack

Respuestas: 0
Vistas: 1869
Último mensaje Junio 16, 2013, 06:13:38 pm
por Karcrack
RunPE FASM

Iniciado por Juan

Respuestas: 4
Vistas: 4037
Último mensaje Julio 16, 2013, 07:26:11 pm
por Karcrack
[FASM] UDP Flooder

Iniciado por ANTRAX

Respuestas: 0
Vistas: 2204
Último mensaje Abril 12, 2012, 11:07:34 am
por ANTRAX