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ú

Temas - calk9

#1
Hola. Me acuerdo de haber visto un troyano hecho en C++ con Qt, en este foro, pero ahora por más que lo he buscado en Google, en el buscador del foro, y en los temas importantes que están en sticky no lo encuentro. Alguno recuerda o sabe de lo que hablo?

Saludos!
#2
Hola de nuevo. Estoy a punto de comprarme una nueva PC, me la arma un muchacho y yo le digo qué le tiene que poner. Justo en este último momento estoy entrando en el mundo de ASM... creen que va a ser un obstáculo ponerle un procesador AMD para usar ASM, es decir, la mayoría de los códigos en ASM que ví por ahí empiezan con algo como ".intel-syntax" o algo así, ustedes que dicen? No estoy hablando del rendimiento o de qué procesador es mejor, sino cuál me viene mejor para usar ASM sin problemas.  Como recién empiezo con ASM, si alguien programa algo en su pc de procesador Intel, lo puedo correr sin problemas en mi amd?

Gracias de antemano :-)
#3
Ingeniería Inversa / Pointer a función (C y VB6)
12 Noviembre 2013, 20:11 PM
Hola nuevamente foreros. Estoy intentando llamar una función de un proceso externo. Tengo 2 procesos, uno está en C y el otro en VB6. Las funciones de ambos serían algo así:

VB6:
Código (vb) [Seleccionar]
Public Function Sumar(ByVal a As Integer, ByVal b As Integer) As Integer
   Sumar = a + b
End Function


C:
int sumar(int a, int b)
{
   return a + b;
}


En el primer programa (VB6), Sumar() se encuentra en la dirección 0x0401BD0. En el segundo (C), sumar() está en 0x0401334.

Ahora bien, creo una DLL en C y hago lo siguiente:

typedef int (__stdcall *exe_sumar_ptr)(int, int);
...
char result[50] = "";
exe_sumar_ptr exe_sumar;
exe_sumar = (exe_sumar_ptr)(0x0401334);
sprintf(result, "Resultado: %d\n", exe_sumar(5, 5));
MessageBox(0, result, "Resultado", MB_OK);
...


La inyecto en el programa en C y funciona perfectamente, llama a la función sumar() y devuelve como valor 10 (5+5, correcto!). Ahora el problema es en el programa de VB6. Recompilo la DLL con la nueva dirección (0x0401BD0) y la función siempre retorna 0. Según la MSDN, el equivalente del tipo Integer de VB6 es long, así que intenté lo siguiente:

typedef long (__stdcall *exe_sumar_ptr)(long, long);

Pero el problema persiste. Alguna idea de que puede estar sucediendo?

Les agradezco de antemano su ayuda y saludos!!
#4
Ingeniería Inversa / Pointers & Offests MHS5
9 Noviembre 2013, 16:49 PM
Hola foreros, les cuento que estoy intentando hallar el pointer y su respectivo offset de una dirección de memoria dinamica de un programa. Para hacerlo segui este tutorial http://foro.elhacker.net/empty-t342767.0.html. El problema es este: una vez que consigo la direccion de memoria del valor que quiero (dinamica), por ejemplo 48fba3cc voy a Search > Pointer Search y busco desde 48fb0000 hasta 48fba3cc. Una vez que hago esto siempre me salen aprox 70 resultados, entonces pruebo desde 48fba000 hasta 48fba3cc, pero igual me salen unos 50 resultados. Entonces empiezo a sumarle a la primera direccion, por ejemplo 48fba100 hasta 48fba3cc, 48fba200 hasta 48fba3cc, 48fba300 hasta 48fba3cc, 48fba400 hasta 48fba3cc, y asi sucesivamente, hasta que llega un momento que me salen unos 7 resultados de los cuales hay 1 solo que esta en color verde, asi que supongo que ese es el valor que busco (por ejemplo FF0B23CC). Entonces ahi supuestamente ya tengo el pointer en la columna "value" y el offset en la columna "Distance from". Entonces hago la prueba y sumo value + offset y me da como resultado la primera direccion de todas, entonces hasta ahora va todo bien. Luego cierro el programa y vuelvo a abrirlo para comprobar que sea la direccion que busco, pero resulta que FF0B23CC sigue teniendo el mismo valor que la vez anterior, entonces si sumo la columna value + offset (distance from) me sigue dando la primera direccion de todas (que ya no tiene el mismo valor porque era dinamica). Entonces, si la direccion que contiene el pointer siempre tiene el mismo valor, si le sumo el offset siempre me da el mismo resultado, que es la primera direccion de todas (pero como era dinamica una vez que volvi abrir el programa ya cambio). Como voy a obtener una nueva direccion de memoria haciendo la suma del pointer + offset si estos dos siempre tienen el mismo valor? Estoy haciendo algo mal?  :huh:

Gracias!! :)
#5
Programación Visual Basic / Listar Procesos
18 Diciembre 2011, 19:09 PM
Buenas a todos, he encontrado diversas maneras de listar procesos (como con WMI) pero quisiera saber si hay alguna manera de listarlos con sus respectivas direcciones. Por ejemplo, si estoy ejecutando el proceso msnmsgr.exe, que lo liste de la siguiente manera: C:\Archivos de programa\Windows Live\Messenger\msnmsgr.exe.

Gracias! :)
#6
Ingeniería Inversa / Pointers & Offsets
11 Diciembre 2011, 22:42 PM
Hola a todos !  :D. Bueno, ya estoy dentro del tema memoria de los programas, dinamico o estático, pointers & offsets, etc. Estos conceptos ya los tengo claros, pero tengo algunas dudas. Primero quisiera saber si los offsets son SIEMPRE estáticos, o puede que cambien, y si estos son propios de cada programa o propios de cada porción de memoria (dinamica o estatica). El tema es el siguiente. Tengo un programa el cual cuenta con memoria totalmente dinamica, al volver a ejecutarlo cambian los adresses de memoria, como todos saben. Ahora, se que para no tener que obtener el adress de memoria de cada variable de mi programa cada vez que lo ejecuto, utilizo los pointers y offsets. Tengo claro que los adresses de memoria dinamica se almacenan en otros adresses que son estáticos (esto es lo que no puedo obtener) pero no se almacenan TALCUAL nosotros podemos verlos; si no que hay una especie de "cuenta" en los cuales intervienen los offsets y los pointers. Bueno, voy al grano, en este programa obtengo la direccion de memoria dinamica de una variable (con CE), de esta misma obtengo su offset y pointer (con MHS5). Pero no logro encontrar alguna funcion para obtener la memoria estatica en donde se almacena la memoria dinamica (por asi decirlo).

También cabe aclarar que cada vez que vuelvo a buscar los pointers y offsets que pertenecen a una direccion de memoria dinamica de una variable, estos mismos son diferentes a las busquedas anteriores, aunque la variable siempre sea la misma (pero no la direccion de memoria).

Bueno, si logran ayudarme, estaria muy agradecido :)

P.D: Creo que este es el foro correcto para crear este tema ^^. De no ser así por favor haganmelo saber :P
#7
Programación Visual Basic / [VB6] Memoria
10 Diciembre 2011, 19:54 PM
Bueno, les explico: Estoy leyendo unas porciones de memoria de un programa con las siguientes funciones...

Código (vb) [Seleccionar]
Public Function ReadAnInt(gamewindowtext As String, address As Long, valbuffer As Integer)
Dim hwnd As Long
Dim pid As Long
Dim phandle As Long
hwnd = FindWindow(vbNullString, gamewindowtext)
GetWindowThreadProcessId hwnd, pid
phandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)
ReadProcessMem phandle, address, valbuffer, 2, 0&
CloseHandle hProcess
End Function

Public Function ReadAByte(gamewindowtext As String, address As Long, valbuffer As Byte)
Dim hwnd As Long
Dim pid As Long
Dim phandle As Long
hwnd = FindWindow(vbNullString, gamewindowtext)
GetWindowThreadProcessId hwnd, pid
phandle = OpenProcess(PROCESS_ALL_ACCESS, False, pid)

ReadProcessMem phandle, address, valbuffer, 1, 0&
CloseHandle hProcess
End Function


Estas me funcionan perfectamente, pero no he encontrado alguna para leer porciones de memoria las cuales devuelvan una cadena (string), en vez de un valor numérico. Si me pueden ayduar... estaría muy agradecido  :)

Gracias  :D
#8
Programación C/C++ / GetCursorPos [C]
22 Octubre 2011, 16:50 PM
Hola, alguno me podría dejar un ejemplo claro (con declaración y todo) sobre GetCursorPos en C? Porque, realmente, no lo he podido encontrar. Si alguien es tan amable se lo agradezco muchísimo.

Gracias!
#9
Programación General / ¿Qué lenguaje?
3 Octubre 2011, 04:19 AM
Bueno, miren estoy en una etapa de elección y de prueba, ando probando de todo... he tocado algo de C y C++, pero principalmente programo y los tengo bien claro Python y Basic (no .NET). No se, ustedes que me dicen? En qué lenguaje me centro? Mis intereses están en el entorno de Windows, por ahora. Estaba pensando en empezar un poco con .NET pero es muy parecido a VB6 así que no se si valdrá la pena. También he chequeado un poco C#, ya que me gusta lo Visual. Como verán no he mencionado nada de programación Web, si también pensaba en Java pero solo pensaba, nunca lo he tocado  :xD. Pero bueno... los dejo a ustedes que comenten a ver que me vendría bien, también podría ser un lenguaje que no haya mencionado.
#10
Scripting / [Python] Error con Sockets
2 Octubre 2011, 18:46 PM
Hola, estoy creando un capturador de paquetes. Mi programa usa socket.py, funciona como servidor, recibe los paquetes y los imprime en pantalla (print). Esto funciona perfectamente, pero cuando quiero capturar paquetes de otro programa, coloco la IP a donde envía los paquetes así también los recibe mi programa, y me encuentro con el siguiente error:

Traceback (most recent call last):
   File "Servidor.py", line 8, in <module>
     s.bind(("xxx.xxx.x.xxx", xxxx))
   File "C:\Python27\lib\socket.py", line 224, in meth
     return getattr(self._sock,name)(*args)
socket.error: [Errno 10049] La dirección solicitada no es válida en este contexto

Bien, ese es el error TALCUAL, aclaro que el servidor al cual me conecto no está caido ni nada por el estilo.

Gracias.
#11
Programación General / Basic - C
2 Octubre 2011, 03:16 AM
Buenas a todos, simplemente una duda: Si yo tengo un bucle en Basic, que tarda, en realizar todo lo indicado, 5 segundos. Al ser C un lenguaje rápido, ese mismo bucle tardaría menos o no tiene nada que ver?  :rolleyes:

Gracias¡

P.D: Es bucle For
#12
Programación Visual Basic / Buscar en ListBox
27 Septiembre 2011, 03:34 AM
Buenas a todos, a continuación les dejo mi código el cual agrega a un listbox el color del píxel en donde se encuentra el mouse, al moverse el mismo. Para saber cuando se mueve he instalado un hook mediante SetWindowsHookEx, pero eso no es lo importante. El problema es que utilizo SendMessage, con la Constante LB_FINDSTRINGEXACT la cual busca una Cadena. Pero me estoy volviendo loco ya que hago una condición (sentencia if) la cual dicta que si devuelva False, la función que busca el Color en el listbox, no agregue al color obtenido. Esto para evitar que se me agreguen múltiples veces el mismo color, y después me vuelvo loco identificando cada uno. Pero no me devuelve false, o algún error estoy cometiendo en el código que no puedo identificar, por eso estoy aqui! He aquí el código:

La función que busca el string:

Public Function Encuentra(Frase As String) As Boolean
 
Dim Indice As Long
     
    ' Tipo de búsqueda
    Indice = SendMessage(fMain.List1.hwnd, LB_FINDSTRINGEXACT, -1, Frase)
     
     
    If Indice < 0 Then
        'no se encontró
        Encuentra = False
    Else
        ' se encontró la frase entonces la selecciona
        Encuentra = True
    End If
   
End Function


Aquí donde se utiliza:

Dim hdc As Long

    Call GetCursorPos(Mouse)

'Get Color
hdc = GetDC(0)
pxColor = GetPixel(hdc, Mouse.x, Mouse.y)
ReleaseDC 0, hdc

'Set color
Picture1.BackColor = pxColor


If Encuentra(Hex(pxColor)) = False Then
    List1.AddItem Hex(pxColor)
End If


Por algúna razón me agrega varias veces el mismo color encontrado, lo cual no debería, si es que lo encuentra en la condición planteada.

Gracias desde ya, saludos!
#13
Programación Visual Basic / Píxeles y Bucle For
18 Septiembre 2011, 20:40 PM
Buenas a todos, estoy realizando una aplicacion la cual en un bucle for recorre, moviende el mouse, una determinada área y al encontrar un píxel con determinado color, se frene. EL PROBLEMA es que, al recorrer el área moviendo el cursor con el bucle previamente mencionado anda todo perfecto, con una rapidez considerable, en cambio cuando "coloco" el código para verificar si encuentra el píxel lo hace un 90% más lento. Este es mi código:

Código (vb) [Seleccionar]
Dim iX As Integer
Dim iY As Integer
Dim hdc As Long, pxColor As Double

   Call GetCursorPos(Mouse)
   For iX = Mouse.x To Mouse.x + 100
       For iY = Mouse.y To Mouse.y + 75
           Call SetCursorPos(iX, iY)
           'Hasta acá todo bien, lo que viene ahora es lo que lenta muchísimo mi aplicación...
           
           hdc = GetDC(0)
           pxColor = GetPixel(hdc, Mouse.x, Mouse.y)
           ReleaseDC 0, hdc
           Me.Caption = Hex(pxColor)
           If Me.Caption = "AA431B" Then
               Exit For
           End If
           '//
       Next iY
   Next iX


No se cual es el problema, por qué lo hace muchísimo mas lento. Ya que sin verificar el color lo hace en unas milésimas de segundo, y luego con el código para verificar tarda unos 20 o 30 en recorrer el mouse todo el área. Pues ni me imagino cuando haga áreas mas grandes.

Saludos.
#14
Programación Visual Basic / SendMessage
18 Septiembre 2011, 17:19 PM
Buenas a todos. Tengo un par de dudas. Quisiera saber si es posible enviar un mensaje a un determinado color que puedo obtener con el GetPixel(). Y también si puedo enviar un mensaje a una determinada cadena como puede ser "Hola" en un determinado hwnd. O algún tipo de cosa parecida con lo mencionado anteriormente.

Saludos!!
#15
Programación C/C++ / [C] Hook en DLL
16 Septiembre 2011, 15:53 PM
Buenas a todos nuevamente. Estoy haciendo una DLL normal en C, la cual inyecto a un programa. Tengo que hookear una parte del programa el cual tengo el hwnd e interceptar un mensaje. Qué función debería usar para instalar el hook? SetWindowLong? Podrían dejarme algún ejemplo?

Gracias!
#16
Programación C/C++ / SendMessage
13 Septiembre 2011, 21:22 PM
Buenas a todos me estoy iniciando en C. Alguno me podría dejar un ejemplo claro de SendMessage en C, y su respectiva declaración? Porque aunque no lo crean no lo he podido encontrar.

Gracias de antemano.
#17
Buenas os molesto nuevamente debido a que tengo una inquietud. He creado una dll normal con el tutorial de elGuille en Basic, e intento inyectarla y ejecutar una función con Cheat Engine, a un proceso. El tema es que se inyecta correctamente pero al ejecutar una función, en este caso "Saludo()" tira un error de "Enviar - No Enviar" y el proceso inyectado se cierra.

He aquí el código de mi DLL. Cabe aclarar que el Linker fue modificado para poder generar DLL normales.

'
' ©Guillermo 'guille' Som, 2006
'------------------------------------------------------------------------------
Option Explicit

Public Const DLL_PROCESS_DETACH = 0
Public Const DLL_PROCESS_ATTACH = 1
Public Const DLL_THREAD_ATTACH = 2
Public Const DLL_THREAD_DETACH = 3

Public Function Saludo()
    MsgBox ("DLL en VB")
End Function

Public Function Suma(ByVal n1 As Double, ByVal n2 As Double) As Double
    Suma = n1 + n2
End Function


'
Public Function DllMain(hInst As Long, fdwReason As Long, lpvReserved As Long) As Boolean
   Select Case fdwReason
      Case DLL_PROCESS_DETACH
         ' No per-process cleanup needed
      Case DLL_PROCESS_ATTACH
            DllMain = True
      Case DLL_THREAD_ATTACH
'         ' No per-thread initialization needed
      Case DLL_THREAD_DETACH
'         ' No per-thread cleanup needed
   End Select
End Function


La única función que necesito es la de "Saludo()"

También he aquí el archivo .DEF de la DLL correspondiente:

NAME PruebaINY
LIBRARY PruebaINY
DESCRIPTION "Prueba de DLL creada con VB6"
EXPORTS Saludo @1
        Suma @2
        DllMain @3


Gracias, saludos.
#18
Programación C/C++ / Usar DLL de VB6 en C
4 Septiembre 2011, 19:33 PM
Buenas a todos, he creado una DLL en VB6 pero necesito llamar a la misma desde otra DLL en C. He aquí el código para llamarla en VB6 aver si pueden decirme como llamarla en C y utilizarla en el main de la DLL, lo primero que carga.

Private Declare Function Saludo Lib "Prueba.dll" () As String

Y el código de la función saludo en la DLL de vb6 es el siguiente:

Option Explicit

Public Function Saludo() As String
    Saludo = "Hola desde la DLL Prueba"
End Function


El código es de la página de "elGuille".

Gracias.