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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Hacking
| | |-+  Bugs y Exploits
| | | |-+  ROP Gadgets finder for OdbgScript
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ROP Gadgets finder for OdbgScript  (Leído 3,693 veces)
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
ROP Gadgets finder for OdbgScript
« en: 9 Julio 2013, 07:33 am »

Estudiando sobre creación de exploit, no me he percatado de la existencia de un plugins para OllyDbg que se encargue de mostrar Rop gadgets en todos los módulos executables cargados por el PE, por lo que me animé a crear un script:

El script se encarga de analizar todos los módulos executables del PE, verificando si se encuentran rutinas ROP Gadgets (estas deben ser especificadas por el usuario), tras terminar el script, se crea un archivo con una lista de todas las instrucciones de forma ordenada.

se puede buscar una o varias instrucciones:

PUSH EAX Busca esta instrucciones y la agrega al log si al menos en las 6 siguientes instrucciones existe una instrucción RETN N.

PUSH EAX;PUSH ECX Busca estas dos instrucciones y se agrega al log si almenos las siguientes 6 instrucciones existe una instrucción RETN N.

Se pueden usar:

R32, R16, R8, CONST

Ej: PUSH R32  busca todos los PUSH con registre de propósito general de 32 bits que en donde al menos las siguientes 6 instrucciones existe una instrucción RETN N.

EJ: MOV EAX,CONST busca todos MOV EAX con constantes, que en donde al menos las siguientes 6 instrucciones existe una instrucción RETN N.

*N = RETN hasta RETN 0x30

Código
  1. VAR V_ANY
  2. VAR V_COUNT
  3. VAR V_COUNT_REFERENCE
  4. VAR V_COUNT_OPCODE
  5. VAR V_OPCODE
  6. VAR V_ADDRESS
  7. VAR V_ROP_GADGET
  8. VAR V_MODULE_ADDRESS
  9. VAR V_MODULE_NAME
  10. VAR V_MODULE_MBASE
  11. VAR V_MODULE_CBASE
  12. VAR V_MODULE_SIZE
  13. VAR V_UNICODE
  14. VAR V_INSTRUCTION
  15. VAR V_INPUT_NAME
  16. VAR V_OUTPUT_NAME
  17.  
  18. ASK "Enter instruction(s) EX: "PUSH EAX;PUSH ECX" , "PUSH R32;RETN" , "PUSH CONST", etc."
  19. MOV V_INSTRUCTION,$RESULT
  20.  
  21. ASK "Only Unicode address finder?: (Y)/(N)"
  22. MOV V_UNICODE,$RESULT
  23.  
  24. ASK "Output filename without extension EX: ROP1"
  25. MOV V_INPUT_NAME,$RESULT
  26.  
  27. EVAL "ROPGadgets-{V_INPUT_NAME}.log"
  28. MOV V_OUTPUT_NAME,$RESULT
  29.  
  30. MOV V_ANY,6
  31.  
  32. WRT V_OUTPUT_NAME,"  ------------------------------------ ROP Gadgets v1.0 ------------------------------------"
  33.  
  34. L_ENTRY_POINT:
  35. FINDMEM #546869732070726F6772616D#,V_MODULE_ADDRESS
  36. MOV V_MODULE_ADDRESS,$RESULT
  37. CMP V_MODULE_ADDRESS,0
  38. JE L_EXIT
  39.  
  40. GMI V_MODULE_ADDRESS,NAME
  41. MOV V_MODULE_NAME,$RESULT
  42.  
  43. GMI V_MODULE_ADDRESS,MODULEBASE
  44. MOV V_MODULE_MBASE,$RESULT
  45.  
  46. GMI V_MODULE_ADDRESS,CODEBASE
  47. MOV V_MODULE_CBASE,$RESULT
  48.  
  49. GMI V_MODULE_ADDRESS,MODULESIZE
  50. MOV V_MODULE_SIZE,$RESULT
  51.  
  52. WRTA V_OUTPUT_NAME,"/--------------------------------------------------------------------------------------------\"
  53. EVAL "| Module address:[{V_MODULE_MBASE}]  |  Module size:[{V_MODULE_SIZE}]  |  Name:[{V_MODULE_NAME}]"
  54. WRTA V_OUTPUT_NAME,$RESULT
  55. WRTA V_OUTPUT_NAME,"----------------------------------------------------------------------------------------------"
  56.  
  57. FINDCMD V_MODULE_CBASE,V_INSTRUCTION
  58. CALL L_FIND_GADGET
  59.  
  60. INC V_MODULE_ADDRESS
  61. JMP L_ENTRY_POINT
  62.  
  63. L_EXIT:
  64. RET
  65.  
  66. L_FIND_GADGET:
  67. GREF
  68. MOV V_COUNT_REFERENCE,$RESULT
  69. INC V_COUNT_REFERENCE
  70.  
  71. L_NEXT_REFERENCE:
  72. XOR V_COUNT_OPCODE,V_COUNT_OPCODE
  73. CMP V_COUNT,V_COUNT_REFERENCE
  74. JAE L_RETURN
  75.  
  76. GREF V_COUNT
  77. INC V_COUNT
  78. MOV V_ADDRESS,$RESULT
  79. CMP V_ADDRESS,eip
  80. JE L_NEXT_REFERENCE
  81. CMP V_UNICODE,"Y"
  82. JE L_UNICODE_CHECK
  83. L_UNICODE_CONTINUE:
  84. OPCODE V_ADDRESS
  85. ITOA V_ADDRESS
  86. LEN $RESULT
  87. CMP $RESULT,6
  88. JE L_ADD1_2
  89. CMP $RESULT,7
  90. JE L_ADD1_1
  91.  
  92. L_ADD1_0:
  93. EVAL "|{V_ADDRESS} | {$RESULT_1}\r\n|"
  94. JMP L_ADD_CONTINUE1
  95.  
  96. L_ADD1_1:
  97. EVAL "|0{V_ADDRESS} | {$RESULT_1}\r\n|"
  98. JMP L_ADD_CONTINUE1
  99.  
  100. L_ADD1_2:
  101. EVAL "|00{V_ADDRESS} | {$RESULT_1}\r\n|"
  102.  
  103. L_ADD_CONTINUE1:
  104. MOV V_ROP_GADGET,$RESULT
  105.  
  106. L_NEXT_OPCODE:
  107. ADD V_ADDRESS,$RESULT_2
  108. OPCODE V_ADDRESS
  109. MOV V_OPCODE,$RESULT
  110. ITOA V_ADDRESS
  111. LEN $RESULT
  112. CMP $RESULT,6
  113. JE L_ADD2_2
  114. CMP $RESULT,7
  115. JE L_ADD2_1
  116.  
  117. L_ADD2_0:
  118. EVAL "{V_ADDRESS} | {$RESULT_1}\r\n|"
  119. JMP L_ADD_CONTINUE2
  120.  
  121. L_ADD2_1:
  122. EVAL "0{V_ADDRESS} | {$RESULT_1}\r\n|"
  123. JMP L_ADD_CONTINUE2
  124.  
  125. L_ADD2_2:
  126. EVAL "00{V_ADDRESS} | {$RESULT_1}\r\n|"
  127.  
  128. L_ADD_CONTINUE2:
  129. ADD V_ROP_GADGET,$RESULT
  130.  
  131. CMP "C3",V_OPCODE
  132. JE L_LOG_OPCODE
  133. CMP "C2 0400",V_OPCODE
  134. JE L_LOG_OPCODE
  135. CMP "C2 0800",V_OPCODE
  136. JE L_LOG_OPCODE
  137. CMP "C2 0C00",V_OPCODE
  138. JE L_LOG_OPCODE
  139. CMP "C2 1000",V_OPCODE
  140. JE L_LOG_OPCODE
  141. CMP "C2 1400",V_OPCODE
  142. JE L_LOG_OPCODE
  143. CMP "C2 1800",V_OPCODE
  144. JE L_LOG_OPCODE
  145. CMP "C2 1C00",V_OPCODE
  146. JE L_LOG_OPCODE
  147. CMP "C2 2000",V_OPCODE
  148. JE L_LOG_OPCODE
  149. CMP "C2 4000",V_OPCODE
  150. JE L_LOG_OPCODE
  151. CMP "C2 8000",V_OPCODE
  152. JE L_LOG_OPCODE
  153. CMP "C2 C000",V_OPCODE
  154. JE L_LOG_OPCODE
  155. CMP "C3 0000",V_OPCODE
  156. JE L_LOG_OPCODE
  157. INC V_COUNT_OPCODE
  158. CMP V_COUNT_OPCODE,V_ANY
  159. JA L_NEXT_REFERENCE
  160. JMP L_NEXT_OPCODE
  161.  
  162. L_LOG_OPCODE:
  163. WRTA V_OUTPUT_NAME,V_ROP_GADGET
  164. JMP L_NEXT_REFERENCE
  165.  
  166. L_UNICODE_CHECK:
  167. TEST V_ADDRESS,FF00FF00
  168. JNE L_NEXT_REFERENCE
  169. JMP L_UNICODE_CONTINUE
  170.  
  171. L_RETURN:
  172. WRTA V_OUTPUT_NAME,"\--------------------------------------------------------------------------------------------/" + "\r\n\r\n\r\n\r\n"
  173. XOR V_COUNT,V_COUNT
  174. RET

Ejemplo de búsqueda:

Código:
  ------------------------------------ ROP Gadgets v1.0 ------------------------------------
/--------------------------------------------------------------------------------------------\
| Module address:[400000]  |  Module size:[BE000]  |  Name:[RM2MP3Co]
----------------------------------------------------------------------------------------------
|0040A7A7 | PUSH EAX
|0040A7A8 | PUSH ECX
|0040A7A9 | CALL DWORD PTR DS:[0x43C064]
|0040A7AF | RETN 0x4
|
|0040A7C7 | PUSH EAX
|0040A7C8 | PUSH ECX
|0040A7C9 | CALL DWORD PTR DS:[0x43C898]
|0040A7CF | PUSH EAX
|0040A7D0 | CALL 004372E6
|0040A7D5 | RETN 0x4
|
|0040A835 | PUSH EAX
|0040A836 | PUSH ECX
|0040A837 | CALL DWORD PTR DS:[0x43C0D0]
|0040A83D | RETN 0x1C
|
|0040BA2E | PUSH EAX
|0040BA2F | PUSH ECX
|0040BA30 | CALL 004094D0
|0040BA35 | ADD ESP,0xC
|0040BA38 | POP EDI
|0040BA39 | POP ESI
|0040BA3A | RETN 0xC
|
|0041270C | PUSH EAX
|0041270D | PUSH ECX
|0041270E | CALL DWORD PTR DS:[0x43C840]
|00412714 | MOV ECX,ESI
|00412716 | CALL 00437142
|0041271B | POP ESI
|0041271C | RETN
|
|0041668F | PUSH EAX
|00416690 | PUSH ECX
|00416691 | CALL DWORD PTR DS:[0x43C7A4]
|00416697 | POP EDI
|00416698 | POP ESI
|00416699 | ADD ESP,0x30
|0041669C | RETN 0xC
|
|00425F44 | PUSH EAX
|00425F45 | PUSH ECX
|00425F46 | CALL DWORD PTR DS:[0x43C01C]
|00425F4C | RETN 0x8
|
|00436077 | PUSH EAX
|00436078 | PUSH ECX
|00436079 | CALL DWORD PTR DS:[0x43C840]
|0043607F | RETN 0x4
|
|0043799C | PUSH EAX
|0043799D | PUSH ECX
|0043799E | CALL 004379BE
|004379A3 | POP ECX
|004379A4 | POP ECX
|004379A5 | RETN
|
\--------------------------------------------------------------------------------------------/




/--------------------------------------------------------------------------------------------\
| Module address:[58C30000]  |  Module size:[97000]  |  Name:[comctl32]
----------------------------------------------------------------------------------------------
|58C3E87E | PUSH EAX
|58C3E87F | PUSH ECX
|58C3E880 | PUSH DWORD PTR SS:[EBP+0x10]
|58C3E883 | PUSH DWORD PTR SS:[EBP+0xC]
|58C3E886 | CALL DWORD PTR DS:[0x58C314D0]
|58C3E88C | POP EBP
|58C3E88D | RETN 0x10
|
|58C4237D | PUSH EAX
|58C4237E | PUSH ECX
|58C4237F | CALL 58C41198
|58C42384 | XOR EAX,EAX
|58C42386 | INC EAX
|58C42387 | POP ESI
|58C42388 | POP EBP
|58C42389 | RETN 0x8
|
|58C646C5 | PUSH EAX
|58C646C6 | PUSH ECX
|58C646C7 | CALL 58C5070D
|58C646CC | ADD ESP,0xC
|58C646CF | POP EDI
|58C646D0 | POP ESI
|58C646D1 | POP EBP
|58C646D2 | RETN 0x8
|
|58C6982D | PUSH EAX
|58C6982E | PUSH ECX
|58C6982F | CALL 58C3C278
|58C69834 | POP EBP
|58C69835 | RETN 0xC
|
\--------------------------------------------------------------------------------------------/




/--------------------------------------------------------------------------------------------\
| Module address:[5B150000]  |  Module size:[38000]  |  Name:[uxtheme]
----------------------------------------------------------------------------------------------
\--------------------------------------------------------------------------------------------/




/--------------------------------------------------------------------------------------------\
| Module address:[5CF60000]  |  Module size:[26000]  |  Name:[shimeng]
----------------------------------------------------------------------------------------------
\--------------------------------------------------------------------------------------------/




/--------------------------------------------------------------------------------------------\
| Module address:[61DF0000]  |  Module size:[E000]  |  Name:[mfc42loc]
----------------------------------------------------------------------------------------------
\--------------------------------------------------------------------------------------------/




/--------------------------------------------------------------------------------------------\
| Module address:[6FDB0000]  |  Module size:[1CA000]  |  Name:[AcGenral]
----------------------------------------------------------------------------------------------
\--------------------------------------------------------------------------------------------/




/--------------------------------------------------------------------------------------------\
| Module address:[73D50000]  |  Module size:[FE000]  |  Name:[mfc42]
----------------------------------------------------------------------------------------------
|73D60192 | PUSH EAX
|73D60193 | PUSH ECX
|73D60194 | CALL DWORD PTR DS:[EDX+0x28]
|73D60197 | POP ESI
|73D60198 | RETN 0x4
|
|73D88F8C | PUSH EAX
|73D88F8D | PUSH ECX
|73D88F8E | MOV ECX,ESI
|73D88F90 | CALL 73DCB5A6
|73D88F95 | POP ESI
|73D88F96 | RETN 0x4
|
|73DAAAB9 | PUSH EAX
|73DAAABA | PUSH ECX
|73DAAABB | CALL DWORD PTR DS:[0x73DF66E0]
|73DAAAC1 | ADD ESP,0xC
|73DAAAC4 | SUB DWORD PTR DS:[ESI+0x8],EDI
|73DAAAC7 | POP EDI
|73DAAAC8 | POP ESI
|73DAAAC9 | RETN 0x8
|
|73DCCA4B | PUSH EAX
|73DCCA4C | PUSH ECX
|73DCCA4D | PUSH ESI
|73DCCA4E | CALL 73DC914B
|73DCCA53 | POP ESI
|73DCCA54 | RETN 0x8
|
\--------------------------------------------------------------------------------------------/




/--------------------------------------------------------------------------------------------\
| Module address:[76030000]  |  Module size:[65000]  |  Name:[msvcp60]
----------------------------------------------------------------------------------------------
\--------------------------------------------------------------------------------------------/




/--------------------------------------------------------------------------------------------\
| Module address:[76360000]  |  Module size:[4A000]  |  Name:[comdlg32]
----------------------------------------------------------------------------------------------
|7638A193 | PUSH EAX
|7638A194 | PUSH ECX
|7638A195 | CALL DWORD PTR DS:[0x763613D8]
|7638A19B | POP EBP
|7638A19C | RETN 0xC
|
\--------------------------------------------------------------------------------------------/




/--------------------------------------------------------------------------------------------\
| Module address:[76630000]  |  Module size:[B4000]  |  Name:[userenv]
----------------------------------------------------------------------------------------------
\--------------------------------------------------------------------------------------------/




/--------------------------------------------------------------------------------------------\
| Module address:[76B00000]  |  Module size:[2E000]  |  Name:[winmm]
----------------------------------------------------------------------------------------------
\--------------------------------------------------------------------------------------------/




/--------------------------------------------------------------------------------------------\
| Module address:[770F0000]  |  Module size:[8C000]  |  Name:[oleaut32]
----------------------------------------------------------------------------------------------
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Gadgets el Tiempo Windows Vista « 1 2 »
Windows
Kampfen 10 8,690 Último mensaje 12 Julio 2010, 16:57 pm
por Kampfen
Pc´s , gadgets y tecnología en general...
Dudas Generales
Aqua_toffana 3 2,851 Último mensaje 2 Noviembre 2010, 00:42 am
por Aqua_toffana
Gadgets
Foro Libre
Aqua_toffana 0 1,560 Último mensaje 3 Noviembre 2010, 11:50 am
por Aqua_toffana
Problema visual con Gadgets
Windows
SONIC88 5 4,476 Último mensaje 22 Julio 2011, 09:07 am
por SuperDraco
Logear en campo ADDRESS con ODBGScript?
Ingeniería Inversa
.:UND3R:. 2 3,093 Último mensaje 3 Julio 2013, 01:23 am
por apuromafo CLS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines