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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [Class] cStack (VB6)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Class] cStack (VB6)  (Leído 3,940 veces)
Slek Hacker

Desconectado Desconectado

Mensajes: 35


El Conocimiento nos hace Libres...


Ver Perfil
[Class] cStack (VB6)
« en: 25 Junio 2012, 17:46 pm »

Buenas,
esta vez traigo algo más sencillo, la simulación de una pila (Stack) como conjunto. Sólo admite dos operaciones, Push, que añade un elemento (Integer en este caso) al final de un Array interno, y Pop, devuelve el último elemento de la pila.

Código
  1. Option Explicit
  2.  
  3. 'cStack by Slek, for Indetectables.net
  4. '25/6/2012
  5.  
  6. 'Nota:  Es una pila de Integer (puede ser modificado)
  7. '       It's an Integer's Stack (can be modified)
  8.  
  9. Dim Arr()   As Integer          'Array of elements
  10. Dim i       As Integer          'Current Index
  11.  
  12. Private Sub Class_Initialize()
  13. 'Initialize with Index 0
  14.  
  15.    i = 0
  16.  
  17.    Call Init(i)
  18.  
  19. End Sub
  20.  
  21. Public Sub Init(ByVal n As Integer)
  22. 'Initialize Arr() with n elements
  23.  
  24.    ReDim Arr(n)
  25.  
  26. End Sub
  27.  
  28.  
  29. Public Sub Push(ByVal n As Integer)
  30. 'Add n at the end
  31.  
  32.    Arr(i) = n
  33.  
  34.    i = i + 1
  35.  
  36.    If i > UBound(Arr) Then ReDim Preserve Arr(i * 2)
  37.  
  38. End Sub
  39.  
  40. Public Function Pop() As Integer
  41. 'Return last n
  42.  
  43.        i = i - 1
  44.  
  45.        Pop = Arr(i)
  46.  
  47. End Function

Saludos!


En línea

Swellow

Desconectado Desconectado

Mensajes: 77


Ver Perfil
Re: [Class] cStack (VB6)
« Respuesta #1 en: 26 Junio 2012, 01:56 am »

Would you mod this to fix the stack of an asm shellcode? my shellcode is modiying the stack and this makes error when i try replacing cwp therefor I would need something to fix it...


En línea

Slek Hacker

Desconectado Desconectado

Mensajes: 35


El Conocimiento nos hace Libres...


Ver Perfil
Re: [Class] cStack (VB6)
« Respuesta #2 en: 26 Junio 2012, 10:12 am »

I don't think so... The stack you are talking about is internal for the own executable. I made this class to simulate push and pop for an array. Maybe you can add you shellcode by using these two functions, it's an easier way only.
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [Class] cStack (VB6)
« Respuesta #3 en: 27 Junio 2012, 01:20 am »

Aquí te dejo mi clase Stack la acabe de hacer con el block de notas... espero funcione ya que no tengo el IDE de VB6.


(Prueben el código seguro hay varios errores ya que no la probe)

Stack.cls
Código
  1.  
  2. option explicit
  3.  
  4. private _stack   as long
  5. private _size   as long
  6. private _element as variant
  7.  
  8. Private Sub Class_Initialize()
  9.    _stack = &H0
  10.    _size = &H0
  11. End Sub
  12.  
  13. Private Sub Class_Terminate()
  14.    while (empty() = false)
  15.        pop()
  16.    loop
  17. End Sub
  18.  
  19. Public property get size() as long
  20.    size = _size
  21. End Sub
  22.  
  23. Public function top() as variant
  24.    if isobject(_element) then
  25.        set top = _element
  26.    else
  27.        top = _element
  28.    end if
  29. End property
  30.  
  31. pyblic function empty() as boolean
  32.    empty = (_size = 0)
  33. end function
  34.  
  35. Public Sub push(Byref variable As variant)
  36. dim ptr   as long
  37. dim ptrw  as long
  38.    ptr = mMemoryEx.malloc(8)
  39.    ptrw = mMemoryex.getMemData(ptr)
  40.    mMemoryEx.putdword(ptrw, _stack)
  41.  
  42.    if isobject(variable) then
  43.        set _element(0) = variable
  44.    else
  45.        _element(0) = variable
  46.    end if
  47.  
  48.    mMemoryEx.putdword((ptrw + 4), mMemoryEx.getdword(varptr(_element(0))))
  49.    _stack = ptrw
  50.    _size = (_size + 1)
  51. End Sub
  52.  
  53. Public sub pop()
  54. dim newset as variant
  55. dim ptrl   as long
  56. dim ptrw   as long
  57.  
  58.    if _size = 0 then exit sub
  59.  
  60.    ptrl = _stack
  61.    ptrw = mMemoryex.getMemData(ptrl)
  62.    mMemoryEx.putdword(varptr(_stack), mMemoryEx.getdword(ptrw))
  63.    mMemoryEx.putdword(varptr(newset), mMemoryEx.getdword(ptrw + 4))
  64.    mMemoryex.releaseMem(ptrl)
  65.  
  66.   _size = (_size - 1)
  67. End sub
  68.  
  69.  

Como esta caída mi pagina (Blog) dejo el modulo:

mMemoryEx.bas

Código:

Option Explicit

Public Const PAGE_EXECUTE_READWRITE As Long = &H40
Public Const PAGE_EXECUTE_WRITECOPY As Long = &H80
Public Const PAGE_EXECUTE_READ As Long = &H20
Public Const PAGE_EXECUTE As Long = &H10
Public Const PAGE_READONLY As Long = 2
Public Const PAGE_WRITECOPY As Long = &H8
Public Const PAGE_NOACCESS As Long = 1
Public Const PAGE_READWRITE As Long = &H4
 
Declare Function VarPtrArr Lib "msvbvm60.dll" Alias "VarPtr" (ByRef Ptr() As Any) As Long
Declare Function IsBadWritePtr Lib "kernel32" (ByVal lp As Long, ByVal ucb As Long) As Long
Declare Function IsBadReadPtr Lib "kernel32" (ByVal lp As Long, ByVal ucb As Long) As Long
Declare Function VirtualProtect Lib "kernel32" (ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flNewProtect As Long, ByVal lpflOldProtect As Long) As Long

Private bvHack(0)               As Byte
Private lHackDelta              As Long
Private bInitialized            As Boolean
 
Public Function initialize() As Boolean ' By KarCrack
    On Error GoTo Error_Handle
 
    bvHack(-1) = bvHack(-1) 'Error check
    lHackDelta = VarPtr(bvHack(0))
 
    initialize = True
    bInitialized = initialize
    Exit Function
Error_Handle:
    If Err.Number = 9 Then Debug.Print "Remember to tick 'Remove array boundary check' and compile before using"
'    End
End Function
 
Public Function getByte(ByVal lptr As Long) As Byte ' By KarCrack
    If bInitialized Then getByte = bvHack(lptr - lHackDelta)
End Function
 
Public Function getWord(ByVal lptr As Long) As Integer ' By KarCrack
    If bInitialized Then getWord = makeWord(getByte(lptr + &H0), getByte(lptr + &H1))
End Function
 
Public Function getDWord(ByVal lptr As Long) As Long ' By KarCrack
    If bInitialized Then getDWord = makeDWord(getWord(lptr + &H0), getWord(lptr + &H2))
End Function
 
Public Sub putByte(ByVal lptr As Long, ByVal bByte As Byte) ' By KarCrack
    If bInitialized Then bvHack(lptr - lHackDelta) = bByte
End Sub
 
Public Sub putWord(ByVal lptr As Long, ByVal iWord As Integer) ' By KarCrack
    If bInitialized Then Call putByte(lptr + &H0, iWord And &HFF): Call putByte(lptr + &H1, (iWord And &HFF00&) / &H100)
End Sub
 
Public Sub putDWord(ByVal lptr As Long, ByVal lDWord As Long) ' By KarCrack
    If bInitialized Then Call putWord(lptr + &H0, IIf(lDWord And &H8000&, lDWord Or &HFFFF0000, lDWord And &HFFFF&)): Call putWord(lptr + &H2, (lDWord And &HFFFF0000) / &H10000)
End Sub
 
Public Function makeDWord(ByVal LoWord As Integer, ByVal HiWord As Integer) As Long '[http://www.xbeat.net/vbspeed/c_MakeDWord.htm#MakeDWord05]
    makeDWord = (HiWord * &H10000) Or (LoWord And &HFFFF&)
End Function

'   //  Funciones agregadas...

Function makeWord(ByVal lByte As Byte, ByVal hByte As Byte) As Integer ' By BlackZeroX
    makeWord = (((hByte And &H7F) * &H100&) Or lByte)
    If hByte And &H80 Then makeWord = makeWord Or &H8000
End Function

'/////////////////////
Public Function allocMem(ByVal lSize As Long) As Long
'   //  By BlackZeroX (Thanks to Karcrack).
'   //  Retorna la Dirrecion de un SafeArray.
Dim pBuff()     As Byte
    If (lSize <= &H0) Then Exit Function
    ReDim pBuff(0 To (lSize - 1))
    allocMem = getDWord(VarPtrArr(pBuff))
    putDWord VarPtrArr(pBuff), 0
End Function
 
Public Function reallocMem(ByVal lptr As Long, ByVal lSize As Long) As Long
'   //  By BlackZeroX (Thanks to Karcrack).
'   //  Retorna la Dirrecion de un SafeArray que se retorno en allocMem()/reallocMem().
Dim pBuff()     As Byte
    putDWord VarPtrArr(pBuff), lptr
    If Not (lSize = &H0) Then
        ReDim Preserve pBuff(0 To (lSize - 1))
    Else
        Erase pBuff
    End If
    reallocMem = getDWord(VarPtrArr(pBuff))
    putDWord VarPtrArr(pBuff), 0
End Function
 
Public Function getMemData(ByVal lptr As Long) As Long
'   //  By BlackZeroX (Thanks to Karcrack).
'   //  lPtr debe ser el valor (Address) que retorno en allocMem()/reallocMem().
'   //  Esta funcion retorna la Dirrecion de memoria EDITABLE de lPtr (Dirrecion de un SafeArray).
'   //  Referencias.
'   //  http://msdn.microsoft.com/en-us/library/aa908603.aspx
    If (lptr = &H0) Then Exit Function
    getMemData = getDWord(lptr + &HC)    '   //  obtenemos pvData
End Function
 
Public Sub releaseMem(ByVal lptr As Long)
'   //  By BlackZeroX (Thanks to Karcrack).
'   //  lPtr debe ser la Dirrecion que retorno en allocMem()/reallocMem().
Dim pBuff()     As Byte
    putDWord VarPtrArr(pBuff), lptr
End Sub
 
Public Sub releaseMemStr(ByVal lptr As Long)
'   //  By BlackZeroX (Thanks to Karcrack).
'   //  lPtr debe ser la Dirrecion que retorno en cloneString().
Dim sStr        As String
    putDWord VarPtr(sStr), lptr
End Sub
 
Public Sub swapVarPtr(ByVal lpVar1 As Long, ByVal lpVar2 As Long)
'   //  By BlackZeroX (Thanks to Karcrack).
Dim lAux    As Long
    lAux = getDWord(lpVar1)
    Call putDWord(lpVar1, getDWord(lpVar2))
    Call putDWord(lpVar2, lAux)
End Sub
 
Public Function cloneString(ByVal lpStrDst As Long, ByVal sStrSrc As String) As Long
'   //  By BlackZeroX (Thanks to Karcrack).
'   //  lPtr -> Puntero a una variable destino (Preferiblemente String).
'   //  sStr -> Cadena Clonada ( gracias a Byval ).
Dim lpStrSrc        As Long
    If Not (lpStrDst = &H0) And (mMemoryEx.initialize = True) Then
        Call mMemoryEx.swapVarPtr(lpStrDst, VarPtr(sStrSrc))
        Call mMemoryEx.swapVarPtr(VarPtr(cloneString), VarPtr(sStrSrc))
    End If
End Function
 
Public Function copyMemory(ByVal lpDst As Long, ByVal lpSrc As Long, ByVal lLn As Long) As Long
'   //  By BlackZeroX (Thanks to Karcrack).
Dim i       As Long
    If (lpSrc = &H0) Or (lpDst = &H0) Or (lLn = &H0) Then Exit Function
  
    i = (lLn Mod 4)
    If ((i And &H2) = &H2) Then
        Call putWord(lpDst, getWord(lpSrc))
        lpDst = (lpDst + 2)
        lpSrc = (lpSrc + 2)
        copyMemory = (copyMemory + 2)
        lLn = (lLn - 2)
    End If
    If ((i And &H1) = &H1) Then
        Call putByte(lpDst, getByte(lpSrc))
        lpDst = (lpDst + 1)
        lpSrc = (lpSrc + 1)
        copyMemory = (copyMemory + 1)
        lLn = (lLn - 1)
    End If
    For i = 0 To (lLn - 1) Step 4
        Call putDWord(lpDst + i, getDWord(lpSrc + i))
    Next
    copyMemory = (copyMemory + lLn)
  
End Function


Dulces Lunas!¡.
« Última modificación: 27 Junio 2012, 01:29 am por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
Slek Hacker

Desconectado Desconectado

Mensajes: 35


El Conocimiento nos hace Libres...


Ver Perfil
Re: [Class] cStack (VB6)
« Respuesta #4 en: 27 Junio 2012, 14:37 pm »

Muy interesante esa versión usando memoria, Gracias!!

Saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AS 2.0 Class?
Diseño Gráfico
coolfrog 1 2,430 Último mensaje 3 Julio 2007, 05:27 am
por coolfrog
.class a .exe(java a exe)
Java
Kerber0 0 2,359 Último mensaje 9 Enero 2009, 01:21 am
por Kerber0
Api/Class RichTextBox
Programación Visual Basic
e500 2 1,989 Último mensaje 12 Junio 2010, 18:37 pm
por e500
getelementby CLASS?
Programación Visual Basic
bykas2 3 3,432 Último mensaje 18 Octubre 2010, 02:25 am
por Psyke1
[PHP Class] Noticion 0.9
PHP
BigBear 0 1,333 Último mensaje 7 Octubre 2011, 01:22 am
por BigBear
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines