Avira 1 - Yo 0

Iniciado por lucasluks1004, 31 Agosto 2011, 21:02 PM

0 Miembros y 2 Visitantes están viendo este tema.

lucasluks1004

Utilizo :

Private cCall As New Clas222
Public Function CallAPI(ByVal strLib As String, ByVal strMod As String, ParamArray Params()) As Long
    Dim Params2()
    Params2 = Params
    CallAPI = cCall.Invoke(strLib, strMod, Params2())
End Function



Private Type tAPICall
    ptsLIB              As Long
    ptsProc             As Long
    lReserved           As Long
    lPointer            As Long
    lpBuffer(3)         As Long
End Type
Private c_lVTE          As Long
Private c_lOldVTE       As Long
Private c_bvASM(&HFF)   As Byte
Private Declare Function DllFunction Lib "MSVBVM60" Alias "DllFunctionCall" (ByRef typeAPI As tAPICall) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal dlen As Long)
Public Function zDoNotCall() As Long
End Function
Public Function Invoke(ByVal sLib As String, ByVal sFunc As String, Params()) As Long
    Dim lPtr        As Long
    Dim i           As Long
    Dim sData       As String
    Dim sParams     As String
    Dim lMod        As Long
   
    lMod = GetAPIPtr(sLib, sFunc)
   
    If lMod = 0 Then Exit Function
   
    For i = UBound(Params) To 0 Step -1
        sParams = sParams & "68" & GetLong(CLng(Params(i)))
    Next
   
    lPtr = VarPtr(c_bvASM(0))
    lPtr = lPtr + (UBound(Params) + 2) * 5
    lPtr = lMod - lPtr - 5
   
    sData = "8B4C240851<PATCH1>E8<PATCH2>5989016631C0C3"
    sData = Replace(sData, "<PATCH1>", sParams)
    sData = Replace(sData, "<PATCH2>", GetLong(lPtr))
   
    Call PutThunk(sData)
   
    Invoke = PatchCall
End Function
Private Function GetAPIPtr(ByVal sLib As String, ByVal sProc As String) As Long
    On Error Resume Next
    Dim tAPI            As tAPICall
    Dim bvLib()         As Byte
    Dim bvMod()         As Byte
   
    Call Unicode2ANSI(sLib, bvLib)
    Call Unicode2ANSI(sProc, bvMod)
   
    With tAPI
        .ptsLIB = VarPtr(bvLib(0))
        .ptsProc = VarPtr(bvMod(0))
        .lReserved = &H40000
        .lPointer = VarPtr(.lpBuffer(0))
    End With
   
    GetAPIPtr = DllFunction(tAPI)
End Function
Private Sub Unicode2ANSI(ByVal sUNICODE As String, ByRef bvANSI() As Byte)
    Dim i           As Long
   
    ReDim bvANSI(Len(sUNICODE))
    For i = 1 To Len(sUNICODE)
        bvANSI(i - 1) = Asc(Mid$(sUNICODE, i, 1))
    Next i
End Sub
Private Function GetLong(ByVal lData As Long) As String
    Dim bvTemp(3)   As Byte
    Dim i           As Long
   
    CopyMemory bvTemp(0), lData, &H4
    For i = 0 To 3
        GetLong = GetLong & Right("0" & Hex(bvTemp(i)), 2)
    Next
End Function
Private Sub PutThunk(ByVal sThunk As String)
    Dim i   As Long
    For i = 0 To Len(sThunk) - 1 Step 2
        c_bvASM((i / (1 + 1))) = CByte("&h" & Mid(sThunk, i + 5 - 4, 1 + 1))
    Next i
End Sub
Private Function PatchCall() As Long
    CopyMemory c_lVTE, ByVal ObjPtr(Me), &H4
    c_lVTE = c_lVTE + &H1C
    CopyMemory c_lOldVTE, ByVal c_lVTE, &H4
    CopyMemory ByVal c_lVTE, VarPtr(c_bvASM(0)), &H4
    PatchCall = zDoNotCall
    CopyMemory ByVal c_lVTE, c_lOldVTE, &H4
End Function


Lo q tmb probe es hacer un TLB para sacar esas apis del codigo pero no lo e logrado

Karcrack

Utiliza un código más reciente, ese esta quemadisimo

lucasluks1004

#12
Gracias por molestarte en seguir con mis dudas!!..

Uso el el codigo q has expuesto en http://foro.elhacker.net/programacion_visual_basic/asmvb6invoke_llamas_apis_sin_declararlas_kinvokebas-t290072.0.html  ,o  ya es muy viejo?

Igual Karcrack  mi stub es solo detectado por el Avira asi q aunque este quemado lo modifique lo suficiente como para q no sea detectado por la mayoria ,,pero el avira no me detecta el codigo ya q le puse 00 a todo el codigo con el hex y aun asi es detectado

Karcrack

Utiliza esta pequeña modificación:
http://foro.elhacker.net/programacion_visual_basic/asmvb6invoke_llamas_apis_sin_declararlas_kinvokebas-t290072.0.html;msg1489017#msg1489017
Esta mucho menos quemada :)

Si dices que te lo detecta antes de agregar la información debe ser con total seguridad cuestión de las importaciones de VB6... Ves quitando APIs a ver cuales te detecta... o mételas todas en un TLB...

lucasluks1004

#14
Sin duda alguna cuando lo tenga fud ,,tu nombre estara entre los mas agradecidos al subirlo al foro,,intente sacar las apis con TLB las cuales solo logre sacar una sola me quedan estas q probe de mil  formas y no obtuve buen resultado


Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal dlen As Long)
Private Declare Function DllFunction Lib "MSVBVM60" Alias "DllFunctionCall" (ByRef typeAPI As tAPICall) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal dlen As Long)


CopyMemory esta dos veces por q la uso en distintos modulos


Edito:carge tu modulo y lo probe funciona excelente pero es mas detectado q el q tenia antes

Karcrack

http://cobein.com/wp/?p=567
Aquí tienes otro método para cargas las APIs dinámicamente y abajo del todo esta el TLB que necesitas :) Por cierto, no necesitas declarar dos veces RtlMoveMemory() aunque la utilices en distintos módulos... desde el TLB queda como función Public ;)

lucasluks1004

#16
Gracias Karcrack realmente viendo los codigos q creas me doy cuenta q me esta ayudando uno de los grandes en este tema en español aunque tmb vi tu nombre en varios foros en ingles ,pero buen el link del TLB esta caido  igual el codigo funciona sin el TLB ya q no sustituiste las apis ,,si me puedes pasar el .tlb se agradeceria !

Karcrack

http://www.cobein.com/wp/wp-content/2010/08/Zombie.zip

El dominio advancevb se cayó pero sigue estando toda la copia en el de Cobein :)

lucasluks1004

Gracias Karcrack  ,estoy rehaciendo todo mi stub y cargando nuevas ideas q tenia desde antes como doble encryptacion , cargar los datos en una nueva sección y mezclar el archivo a encryptar con codigo limpio ,ahora quiero darle una alternativa a Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal dlen As Long)

Con un .tlb no se puede cargar no?
La otra opcion es reemplzarla lei tu post (http://foro.elhacker.net/programacion_visual_basic/vb6asm_alternativa_copymemoryrtlmovememorycopybytes-t300862.0.html)

pero no me funciona ,o nose bien como llamarlo ,,si me podes dar una mano se agradece,,saludos

Karcrack

No te recomiendo esa alternativa, ya que CallWindowProc() esta bastante taggeada. Te recomiendo usar __vbaCopyBytes() con TLB ya que es como si la importase el propio VB6 y no tú.