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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 2 3 [4] 5
31  Programación / Programación Visual Basic / Re: StructToVariant - VariantToStruct en: 13 Noviembre 2010, 04:20 am
Perfecto ahora si entendí como funciona, muchas gracias!   :D
32  Programación / Programación Visual Basic / Re: StructToVariant - VariantToStruct en: 13 Noviembre 2010, 02:37 am
Las estructuras deben tener un tamaño fijo, esto queire decir que si utilizas string vas a tener que darle una dimencion

Private Type st
    ss As String * 50
    ll As Long
End Type


de todas formas "creo" que aveces esto puede no funcionar, no recuerdo si era porque mesclaba integer, pero no me funciono.

creo que lo mas adecuado seria utilizar array de bits,

Private Type st
    tamañocadena as long
    cadena() as byte
    otracosa As Long
End Type


entonces en tamañocadena pones la dimencion del array de cadena().

bue nose igual proba con lo otro primero.

saludos.

Si, es cierto al darle las dimensiones funciona sin problemas, pero en ambos casos Strings o ByteArrays, sucede lo mismo al dejarlos dinamicos :/
Se me ocurre hacer una funcion que busque a partir del puntero que se le pasa, "el prototipo de cierre de un structure" osea "las instrucciones", voy a investigar un poco aver si logro algo :P
Ojala alguno de los expertos que rondan por aca me ayuden :A

Gracias
33  Programación / Programación Visual Basic / Re: StructToVariant - VariantToStruct en: 13 Noviembre 2010, 00:46 am
Gracias por interesarte y ayudarme BlackZeroX  ;-)
Pero no era eso, sino que, el problemín es la funcion Len() de VB6 que devuelve el tamaño de la estructura erroneamente  :-\.

Con este ejemplo lo pueden confirmar:

Código:
Private Type st
    ss As String
    ll As Long
End Type

Private Sub Form_Load()
    Dim stt As st
    stt.ss = "aaaaaa"
    stt.ll = 500
    MsgBox Len(stt)
    End
End Sub

Si cambian el "a.." por algo mas/menos largo, el retorno de Len() vá a ser el mismo siempre... y ese es el problema para pasar la estructura a un array byte.

Si alguien supiera como solucionar esto, estaria COMPLETAMENTE agradecio si me ayudaran a resolver el problemita.

Gracias!
34  Programación / Programación Visual Basic / Re: StructToVariant - VariantToStruct en: 5 Noviembre 2010, 03:50 am
.
Yo personalemente solo cambiaria los punteros hacia las variables... igual no creo que nadie te ayude en la forma que lo pides el susodicho problema...

Dulces Lunas!¡.

A que te referís 'en la forma que lo pides el susodicho problema', somos de distintos regiones :P, no en todos los lugares se habla/escribe de la forma que tu tenes incorporada.
No se a que te referís, pero me da la sensación, de que crees que lo pido de mala manera o faltando el respeto :S. Si es así, para nada es esa mi intención, discúlpenme si se mal entiende.

---

BlackZeroX entiendo lo que decís pero, para lo que estoy haciendo, es necesario guardar la estructura, esa estructura esta de ejemplo para que entiendan lo que intento hacer... Y ademas me da curiosidad, debería funcionar, ya que si lo hago con las funciones Get y Put trabajando con binarios, funciona.
El problema esta al sacar los datos de memoria :/

Gracias!
35  Programación / Programación Visual Basic / StructToVariant - VariantToStruct en: 3 Noviembre 2010, 22:05 pm
Hola gente, quería pedirle a los coders si se animan a reparar estas simples funciones. Ya que funcionan en local, pero al intentar cargar un variant guardado a una estructura en otro proyecto, da error.

Código:
Private Type ControlVB
    sType As String
    sName As Strin
End Type
Private Declare Function CopyBytes Lib "MSVBVM60" Alias "__vbaCopyBytes" (ByVal Size As Long, Dest As Any, Source As Any) As Long

Private Sub main()
    Dim dd As ControlVB
    Dim bb As ControlVB
    Dim aa As Variant
   
    dd.sName = "aaaaa"
    dd.sType = "TextBox"
   
    aa = StructToVariant(VarPtr(dd), LenB(dd))
    Call VariantToStruct(aa, VarPtr(bb))
   
    MsgBox bb.sName
End Sub

Private Function StructToVariant(ByVal StructPtr As Long, ByVal Size As Long) As Variant
    Dim Bin() As Byte
   
    ReDim Bin(Size)

    Call CopyBytes(Size, ByVal VarPtr(Bin(0)), ByVal StructPtr)
    StructToVariant = Bin
End Function

Private Function VariantToStruct(ByRef vVariant As Variant, ByVal StructPtr As Long)
    Call CopyBytes(LenB(vVariant) - 1, ByVal StructPtr, ByVal StrPtr(vVariant))
End Function

Gracias.
36  Programación / Programación Visual Basic / Re: C a VB6, Ayuda :P en: 29 Septiembre 2010, 23:07 pm
Lo mire muy por arriba y donde te complicas mucho es con el tema de el VirtualFree, no es 100% necesario lo que utilices pero bueno. La funcion que tenes que armar (shellcode) es como un callapi basicamente.

Otra cosa que vi en el codigo es que utilizas el Heap para armar la funcion, esto lo podes reemplzar facilmente por un bytearray para no complicar mas las cosas.

Muy a lo bruto te diria que necesitas 5 bytes por cada parametro que le pases mas otros 5 para el call (esto podria ser mas si queres limpiar etc) si pasas strings una manera de hacerlo es reservar memoria para copiar el string y despues pushear el address an el stack... Si no me equivoco hay un modulo por ahi para hacer esto me parece que en HH

Hola cobein, primero que nada te agradezco mucho que te hayas tomado el tiempo de mirar el coude. Voy a probar con la data que me dijiste de los parametros, sé que varias cosas no son necesarias, y yo habia intentado antes de encontrar este crearlo desde 0, pero no pude lograrlo (aunque estuve muy cerca) e intente portar el codigo en C que si funcionaba :P

Código:
Option Explicit

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long

Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, lpBaseAddress As Any, lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32" (ByVal hProcess As Long, lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long

Private Declare Function CreateRemoteThread Lib "kernel32" (ByVal hProcess As Long, lpThreadAttributes As Any, ByVal dwStackSize As Long, lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Declare Sub CopyMemory Lib "MSVBVM60" Alias "__vbaCopyBytes" (ByVal Size As Long, Dest As Any, Source As Any)

Private Const PROCESS_ALL_ACCESS = &H1F0FFF
Private Const MEM_COMMIT = &H1000
Private Const MEM_RELEASE = &H8000
Private Const PAGE_READWRITE = &H4
Private Const INFINITE = &HFFFFFFFF

Public Function ExecuteDll(lPid As Long) As Boolean
    Dim hVictim As Long
    Dim hInject As Long
    Dim lParamAddress As Long
    Dim lStartAddress As Long
    Dim bB() As Byte
    
    hVictim = OpenProcess(PROCESS_ALL_ACCESS, 0, lPid)
    If hVictim = 0 Then Exit Function
    '===
    Call PutThunk("68" & GetLng(500) & "68" & GetLng(500), bB)
    '===
    lStartAddress = GetProcAddress(GetModuleHandle("KERNEL32"), "Beep"): If lStartAddress = 0 Then GoTo Error
    lParamAddress = VirtualAllocEx(hVictim, 0&, UBound(bB), MEM_COMMIT, PAGE_READWRITE): If lParamAddress = 0 Then GoTo Error
    Call WriteProcessMemory(hVictim, ByVal lParamAddress, ByVal VarPtr(bB(0)), UBound(bB), ByVal 0&)
    '===
    hInject = CreateRemoteThread(hVictim, ByVal 0&, 0&, ByVal lStartAddress, ByVal lParamAddress, 0, ByVal 0&)
    If hInject = 0 Then: GoTo Error
    '===
    
    Call WaitForSingleObject(hInject, INFINITE)
    Call CloseHandle(hVictim)
    Call CloseHandle(hInject)
    
    ExecuteDll = True
    Exit Function
    
Error:
    Call CloseHandle(hInject)
    Call CloseHandle(hVictim)
    
    ExecuteDll = False
End Function

Private Function GetLng(ByVal lLng As Long) As String
    Dim lTMP                        As Long
 
    lTMP = (((lLng And &HFF000000) \ &H1000000) And &HFF&) Or ((lLng And &HFF0000) \ &H100&) Or ((lLng And &HFF00&) * &H100&) Or ((lLng And &H7F&) * &H1000000) ' by Mike D Sutton
    If (lLng And &H80&) Then lTMP = lTMP Or &H80000000
 
    GetLng = String$(8 - Len(Hex$(lTMP)), "0") & Hex$(lTMP)
End Function
 
Private Sub PutThunk(ByVal sThunk As String, ByRef bvRet() As Byte)
    Dim i As Long
    
    ReDim bvRet((Len(sThunk) \ 2) - 1)
    
    For i = 0 To Len(sThunk) - 1 Step 2
        bvRet(i / 2) = CByte("&H" & Mid$(sThunk, i + 1, 2))
    Next i
End Sub

Si lo testeas podras ver que si se llama el API y se pasan parametros, pero erroneamente y por eso queda un BEEP muy largo :P
Gracias capo P_P
37  Programación / Programación Visual Basic / C a VB6, Ayuda :P en: 29 Septiembre 2010, 05:46 am
Hola c0ders, hace mucho que quiero intento portar este source, y ahora me volvio la urgencia de este code, le agradeceria mucho que solucionaran los errorsillos que tiene (estoy confundido con los dwDataSize y dwCallSize, me confundo con el tipo de variables al calcular los datos e intento pero no logro :( )...
Codigo C: http://www.rohitab.com/discuss/topic/31453-cc-createremotethreadex%3B/

VB6:
Código:
Private Declare Function GetModuleHandle Lib "KERNEL32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
Private Declare Function GetProcAddress Lib "KERNEL32" (ByVal hModule As Long, ByVal lpProcName As String) As Long

Private Declare Function HeapAlloc Lib "KERNEL32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GetProcessHeap Lib "KERNEL32" () As Long
Private Declare Function HeapFree Lib "KERNEL32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByRef lpMem As Any) As Long
Private Declare Function VirtualAllocEx Lib "KERNEL32" (ByVal hProcess As Long, ByRef lpAddress As Any, ByRef dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function WriteProcessMemory Lib "KERNEL32" (ByVal hProcess As Long, ByRef lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long
Private Declare Sub CopyMemory Lib "MSVBVM60" Alias "__vbaCopyBytes" (ByVal Size As Long, Dest As Any, Source As Any)

Private Declare Function CreateRemoteThread Lib "KERNEL32" (ByVal hProcess As Long, lpThreadAttributes As Any, ByVal dwStackSize As Long, lpStartAddress As Long, lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long

Private Const MEM_COMMIT = &H1000
Private Const PAGE_EXECUTE_READWRITE As Long = &H40
Private Const HEAP_ZERO_MEMORY As Long = &H8

Private Function CreateRemoteThreadEx(hProcess As Long, _
                                      lpThreadAttributes As Variant, _
                                      dwStackSize As Long, _
                                      lpStartAddress As Long, _
                                      dwCreationFlags As Long, _
                                      lpThreadId As Long, _
                                      ParamArray vParameters() As Variant)
    Dim ASM_CALLGATE(39) As Byte
    Dim lpLocal As Long
    Dim lpRemote As Long
    Dim lpData As Long
    Dim lpCode As Long
    Dim dwAmount  As Long
    Dim dwDataSize As Long
    Dim dwCallSize  As Long
    Dim dwWritten  As Long
   
    Dim i As Long
   
   '{
        ' CALL $+0x1D
        ' PUSH EAX
        ' PUSH 90C35858 (code for POP EAX\nPOP EAX\nRETN)"
        ' PUSH MEM_RELEASE
        ' PUSH 1
        ' PUSH 00000000 (-> PUSH lpRemote)
        ' PUSH ESP
        ' ADD DWORD [ESP], 0x0C
        ' PUSH 00000000 (-> PUSH VirtualFree)
        ' RETN
        ' PUSH 00000000 (-> PUSH lpStartAddress)
        ' RETN
    '}
   
    For i = 0 To 39
        ASM_CALLGATE(i) = CByte(Choose(i + 1, &HE8, &H1D, &H0, &H0, &H0, &H50, &H68, &H58, &H58, &HC3, &H90, &H68, &H0, &H40, _
                                              &H0, &H0, &H6A, &H1, &H68, &H0, &H0, &H0, &H0, &H54, &H83, &H4, &H24, &HC, _
                                              &H68, &H0, &H0, &H0, &H0, &HC3, &H68, &H0, &H0, &H0, &H0, &HC3))
    Next i
   
    If UBound(vParameters) <> -1 Then
        dwAmount = UBound(vParameters)
        For i = 0 To dwAmount
            dwDataSize = dwDataSize + LenB(vParameters(i))
        Next i
        dwCallSize = UBound(ASM_CALLGATE) + dwAmount * (4 + 1) + dwDataSize
       
        'Allocate memory for callgate constructing (local process)
        lpLocal = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwCallSize)
        If lpLocal = 0 Then: GoTo Error
       
        'Allocate memory from remote process
        lpRemote = VirtualAllocEx(hProcess, 0&, dwCallSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
        If lpRemote = 0 Then: GoTo Error
       
        Call CopyMemory(4, ByVal VarPtr(ASM_CALLGATE(19)), lpRemote)
        Call CopyMemory(4, ByVal VarPtr(ASM_CALLGATE(35)), lpStartAddress)
        Call CopyMemory(4, ByVal VarPtr(ASM_CALLGATE(29)), GetProcAddress(GetModuleHandle("KERNEL32"), "VirtualFree"))
    End If
   
    Call WriteProcessMemory(hProcess, lpRemote, lpLocal, dwCallSize, dwWritten)
    Call HeapFree(GetProcessHeap(), 0, lpLocal)
    If dwWritten = 0 Then: GoTo Error

    CreateRemoteThreadEx = CreateRemoteThread(hProcess, lpThreadAttributes, dwStackSize, (lpRemote + dwDataSize), 0, dwCreationFlags, lpThreadId)
    Exit Function
Error:
   
End Function

Gracias
38  Programación / Programación Visual Basic / Re: [VB6+ASM] Alternativa CopyMemory/RtlMoveMemory/CopyBytes en: 29 Julio 2010, 17:52 pm
Exelente Karcrack! Vas a tener que sacar un libro con tanto code interesante!  ;-)  :xD

Edit:

Alguien podria comentar cada linea del shellcode, aver si logro entenderlo?
'{
'    PUSH ESI 'variable?
'    PUSH EDI 'variable?
'    MOV EDI,DWORD PTR SS:[ESP+C] 'parametro 1?
'    MOV ESI,DWORD PTR SS:[ESP+10] 'parametro 2?
'    MOV ECX,DWORD PTR SS:[ESP+14] 'parametro 3?
'    REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI] 'esto mueve la data en mem?
'    POP EDI 'fee a var?
'    POP ESI 'fee a var?
'    RETN 10 'retorno
'}

Soy un completo indio en ASM, solo sé un par de instrucciones $:, es parcialmnte correcto lo que puse? :D
39  Programación / Programación Visual Basic / Re: [Source]Menú con Imagenes en: 22 Julio 2010, 06:22 am
No mire en lo mas minimo el src, pero yo hacia lo mismo (creo) con este pequeño src:

Código:
Option Explicit

Private Declare Function GetMenu Lib "USER32" (ByVal hwnd As Long) As Long
Private Declare Function GetSubMenu Lib "USER32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function SetMenuItemBitmaps Lib "USER32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long

Const MF_BYPOSITION = &H400&

Public Sub SetMenuIcon(cForm As Form, cMenu As Long, cSubMenu As Long, cBitmap As ListImage)
    On Error Resume Next
    Dim hMenu As Long
    Dim hSubMenu As Long
    Dim Ret As Long
     
     hMenu = GetMenu(cForm.hwnd)
     hSubMenu = GetSubMenu(hMenu, cMenu)
     Ret = SetMenuItemBitmaps(hSubMenu, cSubMenu, MF_BYPOSITION, Val(cBitmap.Picture), Val(cBitmap.Picture))
     
End Sub

Algo que es muy bueno para mejorar GUIs seria hacer lo mismo en CommandButtons, por que VB lo admite, pero tienen que tener mucha .Height para que se vea y queda MUY molesto para la vista :-X en una de esas alguien sé idea como hacerlo  :silbar:

Salu2  :D

40  Seguridad Informática / Análisis y Diseño de Malware / Re: [SRC] Twitter Stealer en: 15 Julio 2010, 17:35 pm
Con hacer LoadLibrary a la DLL seria suficiente :P
Pero si no quieres dejarlas en el disco duro (las DLLs) tendrias que jugar con la Relocation Table como nos enseño nuestro querido amigo H0 :P

Estamos hablando de DLLs echas en VB6? Segun recuerdo de la ultima vez que intente crear una DLL en VB6 y se pueda cargar normalmente como se haria con cualquier DLL en C, etc... creo que el problema era que habia que cambiar su EntryPoint por el puntero de DllSubMain, pero al hacer eso se evadia el cargado de la MSVBVM60  :P

pd: si lo lograste hacer sin code que la ejecute, me seria muy util un ejemplo de ello  :P
Páginas: 1 2 3 [4] 5
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines