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:
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:
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
Private Sub Command1_Click() Dim A() As String Dim B As String Dim C As Long Dim D1, D2 As Integer Dim E As Double Dim X As Variant Exit Sub Command1.Enabled = False B = "####### START DEBUGGING HERE PLEASE #######" On Error Resume Next A() = Split("THIS IS MY SPLIT STR", " ") B = Join(A(), ",") B = "strCAT1" & "strCAT2" Open "C:\test.txt" For Output As #1 Print #1, "PRINT EXAMPLE" Write #1, "WRITE EXAMPLE" Close #1 MsgBox "MSG_BOX_TEXT", vbOKOnly, "MSG_BOX_CAPTION" If "strCMP1" = "strCMP2" Then End End If FileCopy "C:\test.txt", "C:\FILECOPY.TXT" C = FileLen("C:\test.txt") Kill "C:\test.exe" Kill "C:\FILECOPY.TXT" MkDir "TEST_DIR" RmDir "TEST_DIR" If InStr("INSTR EXAMPLE1", "INSTR EXAMPLE2") <> 0 Then DoEvents C = Len("LEN STR") C = LenB("LENB STR") B = Mid("THIS IS A MID STR", 5, 2) If "LIKE STR" Like "LIKE STR2" Then DoEvents D1 = 10 D2 = 5 + 10 D2 = D1 + D1 D2 = 5 / 2 D2 = 5 * 2 D2 = 5 - 2 D2 = -D2 D2 = 5 Mod 2 D2 = 5 Xor 2 D2 = Not 5 D2 = 5 And 2 D2 = 5 Or 2 D2 = Sin(50) D2 = Cos(50) D2 = Tan(50) D2 = Atn(50) D2 = Exp(50) D2 = Log(50) X = Hex(500) X = Oct(600) X = Asc("Q") X = Chr(255) Form1.ForeColor = QBColor(3) Form1.ForeColor = RGB(255, 200, 150) Randomize 50 D2 = Rnd B = InputBox("INPUTBOX_PROMPT", "INPUTBOX_TITLE", "INPUTBOX_DEFAULT") SendKeys "SENKEYS STR" Shell "cmd.exe", vbMaximizedFocus For i = 1 To 10 Step 2 If i Mod 2 = 0 Then DoEvents Next i B = Environ("USERNAME") B = Command$ B = Replace("MY REPLACE STR", "FIND STR", "REPLACE STR") B = StrReverse("REVERSE STR") Command1.Enabled = True B = "####### STOP DEBUGGING HERE PLEASE #######" End Sub
Os dejo a continuación más pantallazos sobre el análisis que conseguiremos con el fichero "common.arg":
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.
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