Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: Mad Antrax en 12 Octubre 2013, 17:24 pm



Título: VB6 - Custom Funtion Descriptions para OllyDbg 1.10
Publicado por: Mad Antrax en 12 Octubre 2013, 17:24 pm
Buenas a todos

Basándome en una de las lecciones de Ricardo Narvaja, descubri un buen truco para reforzar nuestro OllyDbg. Concretamente es la lección 116 del curso nuevo de Ricardo Narvaja. En dicha lección se menciona un fichero llamado "common.arg" en el que podremos personalizar el análisis de las funciones de un módulo. He cogido la idea y la he ampliado añadiendo las principales funciones de Visual Basic 6.0, así como una extensa información adicional que encontré en un foro. El resultado es divertido.

Nuestro OllyDbg 1.10 por defecto no analiza correctamente las funciones propias de MSVBVM60.DLL, éste es el aspecto del análisis de un ejecutable típico en VB6:

(http://i.imgur.com/eK6ghbo.png)

Se pueden ver las llamadas a las funciones en la mayoría de casos, y también nos muestra algunas cadenas en UNICODE y argumentos de la llamada de la API/función, pero si utilizamos el fichero "common.arg" el resultado es MUY distinto:

(http://i.imgur.com/LcOPy0c.png)

Además, y haciendo referencia a la lección original de Ricardo Narvaja, podremos poner Conditional BP en la API que queramos para poder logear y dumpear con un solo click todos los string's y argumentos.

Para crear éste fichero he tenido que generar un ejecutable que he llamado dumper.exe con el siguiente código:

Código
  1. Private Sub Command1_Click()
  2.    Dim A() As String
  3.    Dim B As String
  4.    Dim C As Long
  5.    Dim D1, D2 As Integer
  6.    Dim E As Double
  7.    Dim X As Variant
  8.  
  9.    Exit Sub
  10.    Command1.Enabled = False
  11.  
  12.    B = "####### START DEBUGGING HERE PLEASE #######"
  13.    On Error Resume Next
  14.    A() = Split("THIS IS MY SPLIT STR", " ")
  15.    B = Join(A(), ",")
  16.  
  17.    B = "strCAT1" & "strCAT2"
  18.  
  19.    Open "C:\test.txt" For Output As #1
  20.        Print #1, "PRINT EXAMPLE"
  21.        Write #1, "WRITE EXAMPLE"
  22.    Close #1
  23.  
  24.    MsgBox "MSG_BOX_TEXT", vbOKOnly, "MSG_BOX_CAPTION"
  25.    If "strCMP1" = "strCMP2" Then
  26.        End
  27.    End If
  28.    FileCopy "C:\test.txt", "C:\FILECOPY.TXT"
  29.    C = FileLen("C:\test.txt")
  30.    Kill "C:\test.exe"
  31.    Kill "C:\FILECOPY.TXT"
  32.    MkDir "TEST_DIR"
  33.    RmDir "TEST_DIR"
  34.    If InStr("INSTR EXAMPLE1", "INSTR EXAMPLE2") <> 0 Then DoEvents
  35.    C = Len("LEN STR")
  36.    C = LenB("LENB STR")
  37.    B = Mid("THIS IS A MID STR", 5, 2)
  38.  
  39.    If "LIKE STR" Like "LIKE STR2" Then DoEvents
  40.    D1 = 10
  41.    D2 = 5 + 10
  42.    D2 = D1 + D1
  43.    D2 = 5 / 2
  44.    D2 = 5 * 2
  45.    D2 = 5 - 2
  46.    D2 = -D2
  47.    D2 = 5 Mod 2
  48.    D2 = 5 Xor 2
  49.    D2 = Not 5
  50.    D2 = 5 And 2
  51.    D2 = 5 Or 2
  52.    D2 = Sin(50)
  53.    D2 = Cos(50)
  54.    D2 = Tan(50)
  55.    D2 = Atn(50)
  56.    D2 = Exp(50)
  57.    D2 = Log(50)
  58.    X = Hex(500)
  59.    X = Oct(600)
  60.    X = Asc("Q")
  61.    X = Chr(255)
  62.    Form1.ForeColor = QBColor(3)
  63.    Form1.ForeColor = RGB(255, 200, 150)
  64.    Randomize 50
  65.    D2 = Rnd
  66.    B = InputBox("INPUTBOX_PROMPT", "INPUTBOX_TITLE", "INPUTBOX_DEFAULT")
  67.    SendKeys "SENKEYS STR"
  68.    Shell "cmd.exe", vbMaximizedFocus
  69.    For i = 1 To 10 Step 2
  70.        If i Mod 2 = 0 Then DoEvents
  71.    Next i
  72.    B = Environ("USERNAME")
  73.    B = Command$
  74.    B = Replace("MY REPLACE STR", "FIND STR", "REPLACE STR")
  75.    B = StrReverse("REVERSE STR")
  76.    Command1.Enabled = True
  77.    B = "####### STOP DEBUGGING HERE PLEASE #######"
  78. End Sub
  79.  

Os dejo a continuación más pantallazos sobre el análisis que conseguiremos con el fichero "common.arg":

(http://i.imgur.com/npxIMGT.png)

(http://i.imgur.com/RTWfnsL.png)

(http://i.imgur.com/M9hWVWJ.png)

Mención especial al análisis de la función RGB() que desglosa al detalle los 3 colores, así como la función StrReplace(). El fichero no está completo, no he podido analizar el 100% de las funciones, así que si alguien puede aportar algo, mejorar o cambiar alguna función... estaría agradecido, ya que el trabajo es algo durillo jeje.

(http://i.imgur.com/KlPU9Df.png)

Os dejo un ZIP con el fichero "common.arg", hay que copiarlo en la carpeta de nuestro OllyDbg 1.10, al lado del ollydbg.exe. En la ventana de LOG [L] aparece si se ha cargado correctamente. También os adjunto el dumper.exe que he utilizado para dumpear el análisis correcto de la librería MSVBVM60.DLL, hay que analizar muchas funciones que me he dejado y hay otras que no he sabido como analizarlas. Agradeceré cualquier tipo de colaboración:

http://www.mediafire.com/?dk13l8lh2o9j7k8


Título: Re: VB6 - Custom Funtion Descriptions para OllyDbg 1.10
Publicado por: MCKSys Argentina en 13 Octubre 2013, 00:12 am
Excelente! Gracias por la colaboracion! (la verdad, no habia usado nunca esa caracteristica  :-[)

PD: Karcrack tiene todo un set de funciones del runtime de vb, que usa para "otras cosas", pero que te dan una idea de como funcionan y los params que reciben.

Revisando en el foro de vb sus aportes seguro sale algo interesante...

Saludos!


Título: Re: VB6 - Custom Funtion Descriptions para OllyDbg 1.10
Publicado por: .:UND3R:. en 13 Octubre 2013, 07:52 am
Tampoco conocía esta característica de OllyDbg. La idea es increíble, se ve mucho más legible los llamados a las funciones de VB, sin duda magnifico. Sería genial si lograras crear uno 100% completo, debe ser un trabajo tedioso pero aun así sería de gran ayuda. Saludos.

PD: Creo que con IDA Script (IDC) se podría generar un archivo siguiendo el estandar del archivo argument, aunque desconozco si IDA detecta las funciones de VB.


Título: Re: VB6 - Custom Funtion Descriptions para OllyDbg 1.10
Publicado por: .:UND3R:. en 28 Noviembre 2013, 03:02 am
¿Seguirás trabajando con este archivo?, pregunto por que estoy super interesado en agregar la "versión final" a OllyDbg :D


Título: Re: VB6 - Custom Funtion Descriptions para OllyDbg 1.10
Publicado por: MCKSys Argentina en 28 Noviembre 2013, 03:48 am
Recien me acaabo de dar cuenta que pueden colocarse las estructuras internas de VB tambien....

Mmmm, si hago tiempo le agrego algunas cosillas...  ;)

Saludos!


Título: Re: VB6 - Custom Funtion Descriptions para OllyDbg 1.10
Publicado por: .:UND3R:. en 28 Noviembre 2013, 06:18 am
Recien me acaabo de dar cuenta que pueden colocarse las estructuras internas de VB tambien....

Mmmm, si hago tiempo le agrego algunas cosillas...  ;)

Saludos!

Ya que eres el master de VB a ver si complementas el archivo, nos sería a todo de gran ayuda. Me encantaría ayudar pero no manejo estructuras ni funciones de VB :/

Saludos :D


Título: Re: VB6 - Custom Funtion Descriptions para OllyDbg 1.10
Publicado por: MCKSys Argentina en 28 Noviembre 2013, 07:54 am
En realidad quiero terminar un script para Olly que tengo pendiente hace rato.

Complementandolo con este archivo, es como tener VBDecompiler en Olly... :)

Pero bueh, veremos si hago tiempo.  :P

Saludos!


Título: Re: VB6 - Custom Funtion Descriptions para OllyDbg 1.10
Publicado por: Mad Antrax en 28 Noviembre 2013, 08:16 am
Buenas!

por mi parte añadiré más funciones al fichero para tenerlo más completo, a la espera de MCKS para que nos enseñe su script completito...

 :silbar:


Título: Re: VB6 - Custom Funtion Descriptions para OllyDbg 1.10
Publicado por: .:UND3R:. en 28 Noviembre 2013, 15:12 pm
a ver si coordinan y sacan las funciones y estructuras 100% creo que sería el archivo perfecto, saludos y gracias por el interés :)