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 - Shout

#1
Bugs y Exploits / DEP bypass sin VirtualProtect?
12 Septiembre 2015, 22:18 PM
.
#2
Buenas!

Un amigo me pasó un ejecutable que está empaquetado con Enigma, y estoy intentando desempaquetarlo para practicar.

Estoy usando Olly 1.10 con StrongOD y Phant0m; así no me detecta el anti-debug.

Sin embargo, al buscar información en internet (soy bastante nuevo desempaquetando), lo único que encontré fue cómo desempaquetar Enigma 4.10, pero es que la versión usada en este ejecutable es Enigma moddeado, por lo tanto, aún si me miro el vídeo, no me servirá de mucho.

El ejecutable es, básicamente, un loader con dos inputs (name / serial).
Al clickear en "Register license", sale una ventana (CreateWindowExA), y te dice que es incorrecto, y se cierra.

Obviamente, strings no hay.

Mi progreso:
no mucho, la verdad. he puesto un breakpoint en CreateWindowExA y me fijo en el stack para ver quién lo llama, y he encontrado el WndProc, pero de ahí no estoy seguro de cómo puedo encontrar la función que se encarga de comprobar el serial.
he mirado, pero parece ser que no puedo diferenciar el código que decide si decir si el serial está bien o no (o quién sabe, a lo mejor no sale un dialog cuando está bien...)

Tampoco puedo fijarme en la función que comprueba el serial y hacer un keygen, ya que esa está virtualizada, y hasta ahora no he trabajado con máquinas virtuales...

En otras palabras:
esta es la primera vez que hago unpack de algo, hasta ahora siempre he hecho análisis estático, y alguna idea de hacia donde ir me vendría muy bien. :P

Gracias!
#3
Ingeniería Inversa / .
9 Noviembre 2014, 19:53 PM
.
#4
Buenas,

he intentado acceder al foro desde Tapatalk, pero no hay manera.

El error es: "Received from client compressed HTTP request and cannot decompress"

Si hace falta, monto un MiTM rápido y pillo la respuesta.

Saludos!
#5
Buenas!

Hace tiempo que me pica la... curiosidad, y me pregunto: hay alguna manera de saber qué partes del código se están modificando por un DLL?

Es decir:
-> Tengo something.exe
-> Abro something.exe, e inyecto (LoadLibrary, o p.ej. LdrLoadDll) plugin.dll

Suponiendo que el plugin, en alguna parte, tiene este código:

*(BYTE*) 0xAABBCCDD = 0xC3; // ret a una función

Cómo puedo saber la dirección y los bytes que escribe, sin desempacar ni analizar el DLL? (es decir, en runtime)

Me han dicho que haga hook a "Virtual Instruction Bus", pero se necesita un driver para eso, y no es demasiado recomendable tocarlo a la ligera...
#7
.NET (C#, VB.NET, ASP) / ,
16 Octubre 2013, 13:54 PM
,
#8
Buenas!

Veréis, tengo un combobox, y quiero que cada vez que cambie, un PictureBox cambie también a una imagen que está en los resources de mi proyecto.

Lo que pasa es que tengo esto:
Código (csharp) [Seleccionar]
private void cmbMap_SelectedIndexChanged(object sender, EventArgs e) {}

Y lo que quiero es:
Código (csharp) [Seleccionar]
pictureBoxImage.Image = Properties.Resources[cmbMap.SelectedText];

Pero, al ser C# compilado, no se puede.

Qué alternativa hay a parte de poner un switch enorme?
#9
Buenas!!

Pues justo hice una función como esta:
Código (cpp) [Seleccionar]

void something(char *text){
    cout << *text;
}

Y sólo me imprimía text[0].
Suponí que podría ir aumentando el puntero hasta llegar a \0:
Código (cpp) [Seleccionar]

void something(char *text){
    while(*text != '\0') cout << *text++;
    // nota: si ponemos *text++ en el while()
    // se salta el caracter 0
}

Efectivamente, funciona.

Pero luego pensé en otra manera (sin usar while), y me salió esto:
Código (cpp) [Seleccionar]

void something(char **text){
    cout << *text;
}
char *str = "hello world";
something(&str);


¿Cuál creéis que es la mejor opción?
La primera, sin duda, es más simple, pero usa while.
La segunda, al ser un poco más complicada, quita legibilidad, pero parece funcionar más rápido.
#10
Hola!!

Veréis, tengo un proyecto en C#, que tiene algo así:
byte[] info = getSomeInfo();

Lo que me gustaría saber es si puedo obtener lo que tiene "info" sin modificar el proyecto (es decir, sin ningún tipo de log, sino obtener directamente de la RAM)

Saludos!
#11
Hola!!

Estoy repasando algunas cosas de C++ que aprendí hace tiempo, y al parecer se me ha olvidado un poco, porque no encuentro la manera de tener estas 2 cosas juntas.

Esta es mi función:
Código (cpp) [Seleccionar]
template<class T> void swapVariables(T *x, T *y){
T temp = *y;
*y = *x;
*x = temp;
}


Al usarla (swapVariables(char*, char*) / swapVariables(int*, int*)), me funciona bien, pero lo que quiero es:

  • agregar delete para eliminar la variable temporal (estoy haciendo loops de 1.000.000 iteraciones y cada optimización cuenta). Al no usar new creo que no se puede usar delete, pero si sabéis alguna alternativa, me gustaría verla
  • poder usar la función pasándole char[] en vez de char* sin tener que copiar y pegarla, cambiar el nombre y añadir los corchetes

Saludos!
#13
Ingeniería Inversa / -
18 Julio 2013, 12:10 PM
-
#14
Hola!

Hace poco encontré una manera de simular clicks con el ratón y que sean a bajo nivel (lo que significa que funcionarán en cualquier lugar, ya sea fuera de la aplicación o en juegos).

Lo que quiero saber ahora es cómo puedo añadir un hook para capturar el KeyDown y KeyUp del ratón en C#
#15
Buenas!!

Lo que estoy intentando es capturar el evento del click del botón medio del ratón (ese de la rueda) y, al hacerlo, simular unos eventos del teclado globales.

Por lo tanto, sería algo así:
- Click del botón medio
- Esperar 200ms
- Simular "keydown" de la tecla "G"
- Simular "keypress" de la tecla "1"
- Simular "keyup" de la tecla "G"

Hasta ahora lo he intentado con la API de Windows... pero no me sale.

¿Alguna sugerencia?
#16
Hola!!

Veréis, tengo un proceso que abre sockets y envía información por ellos, y lo que necesito es saber si en C# se puede enviar información por ese mismo socket.

Tengo toda la información necesaria sobre el socket gracias a un sniffer:


Entonces, la pregunta es: ¿se puede enviar información via un socket que ya está abierto usando C#?
#17
Buenas!!

Veréis, hace tiempo vi un hacker en un juego, y él mismo me dijo por el chat que él hizo el hack.

Me gustaría saber:
1) en el juego, se puede cambiar de equipo (es un CoD). Lo que quiero es "monitorear" lo que envía el juego al host al cambiar de equipo. ¿Es posible?
2) en el juego se puede cambiar de clase de la misma manera que de equipo. El problema es que en un modo de juego esa ventana (la de escoger clase) no sale porque el juego te da una clase predeterminada. ¿Cómo puedo hacer que la ventana salga y además activar sus opciones del menú?
#18
-
#19
Buenas, tengo un formulario con varios groupbox en él (grpBox1, grpBox2, grpBox3... hasta 100) y lo que quiero es ocultarlos todos con una función sin tener que ir escribiendo grpBox1.Visible = false;, grpBox2.Visible = false; ... grpBox100.Visible = false;

¿Se puede?

En javascript lo haría así:
Código (javascript) [Seleccionar]

for(var i=1;i<101;i++) document.getElementById('element' + i).style.display = 'none';
#20
Programación General / Duda sobre lenguajes
4 Junio 2013, 20:03 PM
Buenas!

Hace poco que he empezado a estudiar C# y me ha encantado porque es potente pero a la vez fácil, pero como todo lenguaje derivado de C/C++, acepta espacios:
Código (csharp) [Seleccionar]
private static asd(){something();} /* perfectamente válido */

Lo que me gustaría saber es si hay algún lenguaje como Python (no ignora los espacios) y como C# (potente, rápido y no muy jodido, como lo es C++), ya que, para mi, lo primero en la programación es el código bien indentado y organizado.

Saludos
#21
Hola.

Estoy intentando ocultar el menú con el código que viene por defecto en el nuevo proyecto de VC++ 2008, pero no encuentro el modo.

El código es el siguiente:
Código (cpp) [Seleccionar]
// RickRoll.cpp: define el punto de entrada de la aplicación.
//

#include "stdafx.h"
#include "RickRoll.h"

#define MAX_LOADSTRING 100

// Variables globales:
HINSTANCE hInst; // Instancia actual
TCHAR szTitle[MAX_LOADSTRING]; // Texto de la barra de título
TCHAR szWindowClass[MAX_LOADSTRING]; // nombre de clase de la ventana principal

// Declaraciones de funciones adelantadas incluidas en este módulo de código:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
//INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

// TODO: colocar código aquí.
MSG msg;
HACCEL hAccelTable;

// Inicializar cadenas globales
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_RICKROLL, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);

// Realizar la inicialización de la aplicación:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}

hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_RICKROLL));

// Bucle principal de mensajes:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return (int) msg.wParam;
}



//
//  FUNCIÓN: MyRegisterClass()
//
//  PROPÓSITO: registrar la clase de ventana.
//
//  COMENTARIOS:
//
//    Esta función y su uso son sólo necesarios si desea que el código
//    sea compatible con sistemas Win32 anteriores a la función
//    'RegisterClassEx' que se agregó a Windows 95. Es importante llamar a esta función
//    para que la aplicación obtenga iconos pequeños bien formados
//    asociados a ella.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_RICKROLL));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_RICKROLL);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

return RegisterClassEx(&wcex);
}

//
//   FUNCIÓN: InitInstance(HINSTANCE, int)
//
//   PROPÓSITO: guardar el identificador de instancia y crear la ventana principal
//
//   COMENTARIOS:
//
//        En esta función, se guarda el identificador de instancia en una variable común y
//        se crea y muestra la ventana principal del programa.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;

   hInst = hInstance; // Almacenar identificador de instancia en una variable global

   hWnd = CreateWindow(szWindowClass, szTitle, WS_BORDER | WS_CAPTION,
      CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

   if (!hWnd)
   {
      return FALSE;
   }

   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   return TRUE;
}

//
//  FUNCIÓN: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PROPÓSITO: procesar mensajes de la ventana principal.
//
//  WM_COMMAND : procesar el menú de aplicación
//  WM_PAINT : pintar la ventana principal
//  WM_DESTROY : enviar un mensaje de finalización y volver
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
PAINTSTRUCT ps;
HDC hdc;

switch (message){
// Esto son los binders de los botones
/*case WM_COMMAND:
wmId    = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Analizar las selecciones de menú:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;*/
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: agregar código de dibujo aquí...
MessageBox(NULL, L"Test", L"asd", NULL);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

// Controlador de mensajes del cuadro Acerca de.
/*INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;

case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}
*/

/*LRESULT CALLBACK MainWndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam){
return 0;
}*/


Lo que quiero es eliminar el menú "Archivo / Ayuda / Acerca de" de la ventana.
Saludos.
#22
Hola!

Tengo este código:
Código (cpp) [Seleccionar]
#include <iostream>
#include <cmath>

using namespace std;

string _sqrt(string num);
string chunk_split(string source, int length = 2);
string substr(string source, int start, int end);
int chrpos(char s, char *str);

int main(){
string s;

cout << "Insert a number:\n> ";
cin >> s;

_sqrt(s);

cin.get();
cin.get();
return 0;
}

int chrpos(char s, char *str){
for(int i=0,c=(int)strlen(str);i<c;i++){
if(str[i] == s) return i;
}
return -1;
}

string chunk_split(string source, int length){
int j = 0, t = (int)ceil((int)source.length()/2);
string r[t];
for(int i=0;i<source.length();i+=length){
r[j] = substr(source, i, length);
++j;
}
return *r;
}

string substr(string source, int start, int end){
string r = "";
for(int i=start,c=start+end;i<c;i++){
r += source[i];
}
return r;
}

string _sqrt(string num){
// const int l = (int)ceil((int)num.length()/2);
string arr[1024] = chunk_split(substr(num, 1, num.length() - 3), 2);
for(int i=0;i<1024;i++){
cout << "arr[" << i << "] = " << arr[i] << endl;
}
// cout << substr(num, 4, 4);
}


El problema es que, si le pongo de input "1234567", en el for de _sqrt SIEMPRE sale "23", en todos los 1024 elementos. Deberían estar vacíos los que van después del [2], pero no, todos son 23.

Alguien sabe a qué se debe?
Estoy intentando sacar la raíz cuadrada de un número en string, pero la función la haré más tarde, ya que no puedo seguir antes de solucionar esto.

Resumiendo: arr[] ha de contener los números de un string separados de 2 en 2.
#23
Programación C/C++ / Duda sobre crash
7 Octubre 2012, 16:20 PM
Hola,

estaba haciendo un simple programa en C++ porque me aburría y, al probarlo, el programa llegaba a cierto punto y se cerraba.

Lo que intento es llenar un array con números [-2000, 2000], guardar los números usados en un bitset (bs[1024] sería 1 si he metido 1024 en el array y 0 si no lo he hecho) y luego, con un for, empezar en -2000 y llegar a 2000 mostrando todos los números que no he usado en el array anterior, y para evitar recorrer el array cada iteración, usé un bitset que consume menos memoria y es más rápido.

El código es este:
Código (cpp) [Seleccionar]
#include <iostream> // std::
#include <stdlib.h> // rand(), srand()
#include <time.h> // time()
#include <bitset> // bitset<>

using namespace std;

int main(){
int a[4000], t;
bitset<2000> used1;
bitset<2000> used2;
srand((unsigned) time(NULL));
for(int i=0;i<4000;i++){
t = rand() % 2000;
a[i] = (rand() % 2 ? t : -t);
if(a[i] >= 0) used1[a[i]] = 1;
else used2[a[i] * (-1)] = 1;
}
cout << "Not used:\n";
for(int i=-2000;i<2000;i++){
if((i >= 0 && !used1[i]) || used2[i * (-1)]) cout << i << " ";
}
cin.get();
return 0;
}


Gracias y saludos
#24
Nivel Web / .
14 Mayo 2012, 02:39 AM
.
#25
Seguridad / [Duda] Ver escritorio desde netcat
30 Abril 2012, 01:35 AM
Hola!

Pues verán, tengo 2 PCs en LAN y, con uno, logré entrar con metasploit al otro e hice que se iniciara netcat cada vez que inicio el PC.
Bien, hasta ahí todo bien, tengo acceso a la shell (cmd de windows).

Lo que intento es poder ver y controlar el escritorio remoto (está en LAN) sin tener acceso físico al PC (lo tengo, pero la cuestión es obtener el escritorio sin eso).

PC atacante: win 7 professional x32
PC "víctima": win 7 ultimate x32

Si necesitais algo más... avisad.
#26
Hacking / ´
28 Febrero 2012, 13:09 PM
-