Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ~~

#141
Programación Visual Basic / Re: Denme Ideas!
5 Octubre 2008, 12:34 PM
Te esta quedando muy bien, eso si, vigila la indetectabilidad, que mi file manager y mi joiner lo detectan los AV's ;)
#142
Java / Re: [Source] Space Invaders
5 Octubre 2008, 12:09 PM
Gracias a todos ;)

CitarEsta excelente, estoy haciendo un juego pa la U, que se llama KillerEmo

Jajajajajajajajaja pues nada, esperando a que lo subas  :xD :xD
#143
Programación Visual Basic / Re: cJPG
3 Octubre 2008, 00:13 AM
Puedes usar el api bitblt con un bitmap y luego pasarlo a jpg :P
#144
Ahora si xD es decir, la vida (esos dos bytes) no están siempre en la misma posición de memoria. La ventaja del asunto es que en algún lugar se tiene que guardar un puntero que te indique donde está guardado ese valor :P Así que ya sabes, busca el puntero y lee lo que señala

CitarAdvertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.

Hay programas con los cuales puedes ver en un intervalo de tiempo (véase el Cheat Engine), entonces imagínate que tienes 5 vidas y pierdes una aposta, miras que valor a pasado de ser 5 a 4 y arreglado :P Hay buenos tutoriales por la web ;)
#145
Ya, ya se todo lo que me estás diciendo y por eso te he puesto los ejemplos que te he puesto, mira mi ejemplo en fasm y pruebalo en distintos windows y verás como no falla y no es hardcode :P haya la dirección de las apis a partir de su posición en la tabla de importaciones (realmente haya la posición de GetProcAddress y de ahñi saca el resto más rápidamente, aunque se podrían sacar todas así ;))

VB lo único raro que puede tener es que aparte de las dll que contienen las apis propias del SO tiene su propia dll de donde saca todas las funciones, ya que un MsgBox no es lo mismo que MessageBoxA :P

Salu2
#146
En serio, te prometo que no somos adivinos xDD a ver, leer una posición de memoria no supone ningún problema, da igual que sean 2 bytes que 22, la cosa es que hay en esa posición de memoria para que la quieras leer? como va cambiando a lo largo del juego? (has debuggeado algo por lo menos?) por lo que dices en tu primer post quieres leer la vida, si conoces su posición de memoria no te será nada complicado, pero explica bien la situación por que no se te entinde jajaj
#147
Muy buen aporte Leandro, últimamente la tengo muy descuidada, pero te lo añado a la biblioteca de sources, si alguien tene por ahí algún código que se me haya pasado... :P
#148
Si das mas datos de que hace esa memoria pues mejor, así se nos ocurre algo xD

A ver, pasado un tiempo se establece el valor deseado? conoces cuantos valores distintos toma antes del deseado? Sabes cual es ese valor?...
#149
Toma siempre los mismos valores? Si es así espera a que tome el valor deseado, si no espera un tiempo prudencial, un problema parecido le pasó a Tughack por lo que me comentó, a ver si se pasa por aquí que el pilota de esto :P
#150
CitarNo funciona leyendo el archivo en modo binario, porque si, por ejemplo, queres  explorar la estructura del formato PE para acceder a las Tablas de importacion para conocer las direcciones de memoria de las apis que llama el programa no vas a poder.

Si, si que se puede, a ver si te crees que se cargan en posiciones de memoria aleatorias xDD Luego hablamos de eso :P

Primero una demostración de lo que pide el amigo demoniox12:

En un form:
Código (vb) [Seleccionar]
Private Sub Form_Load()
    RellenarPE ("C:\pru.exe")
    MsgBox Hex(inh.OptionalHeader.ImageBase)
    End
End Sub


En un módulo:
Código (vb) [Seleccionar]
Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Dest As Any, Src As Any, ByVal L As Long)

Private Enum ImageSignatureTypes
    IMAGE_DOS_SIGNATURE = &H5A4D     ''\\ MZ
    IMAGE_OS2_SIGNATURE = &H454E     ''\\ NE
    IMAGE_OS2_SIGNATURE_LE = &H454C  ''\\ LE
    IMAGE_VXD_SIGNATURE = &H454C     ''\\ LE
    IMAGE_NT_SIGNATURE = &H4550      ''\\ PE\0\0
End Enum

Private Type IMAGE_DOS_HEADER
    e_magic As Integer        ' Magic number
    e_cblp As Integer         ' Bytes on last page of file
    e_cp As Integer           ' Pages in file
    e_crlc As Integer         ' Relocations
    e_cparhdr As Integer      ' Size of header in paragraphs
    e_minalloc As Integer     ' Minimum extra paragraphs needed
    e_maxalloc As Integer     ' Maximum extra paragraphs needed
    e_ss As Integer           ' Initial (relative) SS value
    e_sp As Integer           ' Initial SP value
    e_csum As Integer         ' Checksum
    e_ip As Integer           ' Initial IP value
    e_cs As Integer           ' Initial (relative) CS value
    e_lfarlc As Integer       ' File address of relocation table
    e_ovno As Integer         ' Overlay number
    e_res(0 To 3) As Integer  ' Reserved words
    e_oemid As Integer        ' OEM identifier (for e_oeminfo)
    e_oeminfo As Integer      ' OEM information; e_oemid specific
    e_res2(0 To 9) As Integer ' Reserved words
    e_lfanew As Long          ' File address of new exe header
End Type

' MSDOS File header
Private Type IMAGE_FILE_HEADER
    Machine As Integer
    NumberOfSections As Integer
    TimeDateStamp As Long
    PointerToSymbolTable As Long
    NumberOfSymbols As Long
    SizeOfOptionalHeader As Integer
    characteristics As Integer
End Type

' Directory format.
Private Type IMAGE_DATA_DIRECTORY
    VirtualAddress As Long
    Size As Long
End Type

' Optional header format.
Const IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16

Private Type IMAGE_OPTIONAL_HEADER
    ' Standard fields.
    Magic As Integer
    MajorLinkerVersion As Byte
    MinorLinkerVersion As Byte
    SizeOfCode As Long
    SizeOfInitializedData As Long
    SizeOfUnitializedData As Long
    AddressOfEntryPoint As Long
    BaseOfCode As Long
    BaseOfData As Long
    ' NT additional fields.
    ImageBase As Long
    SectionAlignment As Long
    FileAlignment As Long
    MajorOperatingSystemVersion As Integer
    MinorOperatingSystemVersion As Integer
    MajorImageVersion As Integer
    MinorImageVersion As Integer
    MajorSubsystemVersion As Integer
    MinorSubsystemVersion As Integer
    W32VersionValue As Long
    SizeOfImage As Long
    SizeOfHeaders As Long
    CheckSum As Long
    SubSystem As Integer
    DllCharacteristics As Integer
    SizeOfStackReserve As Long
    SizeOfStackCommit As Long
    SizeOfHeapReserve As Long
    SizeOfHeapCommit As Long
    LoaderFlags As Long
    NumberOfRvaAndSizes As Long
    DataDirectory(0 To IMAGE_NUMBEROF_DIRECTORY_ENTRIES - 1) As IMAGE_DATA_DIRECTORY
End Type

Private Type IMAGE_NT_HEADERS
    Signature As Long
    FileHeader As IMAGE_FILE_HEADER
    OptionalHeader As IMAGE_OPTIONAL_HEADER
End Type

' Section header
Const IMAGE_SIZEOF_SHORT_NAME = 8

Private Type IMAGE_SECTION_HEADER
   SecName As String * IMAGE_SIZEOF_SHORT_NAME
   VirtualSize As Long
   VirtualAddress  As Long
   SizeOfRawData As Long
   PointerToRawData As Long
   PointerToRelocations As Long
   PointerToLinenumbers As Long
   NumberOfRelocations As Integer
   NumberOfLinenumbers As Integer
   characteristics  As Long
End Type

Public ByteArray() As Byte                  ' Byte array del archivo a leer
Public TempArray() As Byte                  ' Array temporal para reducir el ByteArray
Public Config()    As Byte                  ' La posible configuración del archivo leido
Public idh         As IMAGE_DOS_HEADER      ' Cabeceras
Public inh         As IMAGE_NT_HEADERS
Public ish()       As IMAGE_SECTION_HEADER


Sub RellenarPE(Ruta As String)

    Open Ruta For Binary As #1
      ReDim ByteArray(LOF(1) - 1)
      Get #1, , ByteArray
    Close #1
   
    ' Leemos el MS-DOS stub
    CopyMemory idh, ByteArray(0), Len(idh)
    If idh.e_magic <> IMAGE_DOS_SIGNATURE Then
       MsgBox "Formato PE no válido", vbCritical, "Small Crypter"
       Exit Sub
    End If
   
    ' Leemos a partir del PE\0\0 comletando a su vez:
    '   -> IMAGE_FILE_HEADER     (COFF File Header)
    '   -> IMAGE_OPTIONAL_HEADER (Optional  Header)
    CopyMemory inh, ByteArray(idh.e_lfanew), Len(inh)
    If inh.Signature <> IMAGE_NT_SIGNATURE Then
       MsgBox "Formato PE no válido", vbCritical, "Small Crypter"
       Exit Sub
    End If
   
    ' Leemos las distintas secciones
    Dim i As Integer
    ReDim ish(inh.FileHeader.NumberOfSections - 1)
    For i = 0 To inh.FileHeader.NumberOfSections - 1
        Call CopyMemory(ish(i), ByteArray(idh.e_lfanew + Len(inh) + Len(ish(i)) * i), Len(ish(i)))
    Next i
   
End Sub


Verás que te muestra en un msgbox el image base del archivo C:\pru.exe, para hacer el editor simplemente muestra los distintos datos en text boxes y luego guarda los valores modificados en un nuevo archivo.




achernar_

CitarAgregue, en cierta ocacion, una llamada a la api MessageBoxA para ver si podia obtener la direccion de mememoria de la funcion en la tabla de importacion, para poder cambiarla pero ni siquiera la encontré. VB hace cosas que supongo extraña, en la tabla solo encontre librerias de VB y nada mas. ¿Alguien sabe como llegar a obtener esas direcciones? seria una especie de intento por hacer "API Hooking" modificando la tabla de importacion con VB.

IAT hooking, un ejemplo en C:
http://hackhound.org/forum/index.php?topic=2726.0

Puedes ver como obtiene las direcciones en la iat y de más, otro ejemplo en C:
http://foro.elhacker.net/programacion_cc/source_recorrer_la_iat-t208200.0.html;msg989316

Si te interesan las shellcodes universales esto te será útil, en mi ejemplo lo uso para demostrar como un virus puede llamar a las apis, pero para el caso es lo mismo (y también ves como obtener la posición en memoria de las apis a partir del formato PE, fasm):
http://foro.elhacker.net/analisis_y_diseno_de_malware/source_asm_asi_llaman_los_virus_a_las_apis-t219982.0.html;msg1044189

Y ahora mismo o caigo en más ejemplos, pero ahí puedes ver como obtener la dirección en memoria de un api a partir del PE (aunque si puedes usar GetProcAddres desde el principio pues eso que te ahorras jajajajaja)

Salu2