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

#271
En mi caso opino que la mejor forma es declararlas cuando las necesites, solo en el bloque que vayan a ser usadas. Y me baso en un par de principios:

1- De esta forma la variable sera usada solo en el bloque de código actual y la memoria asociada sera disposable una vez salgas de dicho bloque
2- Mejor estructuracion de codigo, proteccion de variables y reutilizacion de nombres
3- Mucho mejor para el que escribe y para el que lee tu código
4- Si se puede...por que no?
#272
Primero que todo te recomiendo elaborar mas tus post, de esa forma las personas se podrían ver un poco mas inclinadas a responderte, por ej, el codigo que pones al principio deberias usarlo dentro de  etiquetas geshi. Por otra parte, podrias dar un poco mas de informacion de que es lo que deseas hacer, en fin.
Aparentemente tu codigo busca un par de funciones en "VerinAllign3.dll" y luego las intenta ejecutar usando inline asm. Lo primero que te recomendaria es que buscaras un poco de informacion acerca de hacer llamadas desde tu app a dll externas de forma dinamica para que sepas lo que estas haciendo. En este caso, debes conocer los prototipos de las funciones que deseas llamar al menos, sino no habra mucho que puedas hacer. Una vez que conozcas dichos prototipos (tipo de convención de llamada usada, valor de retorno, parametros, etc) puedes proceder a crear un par de punteros a dichas funciones, si no sabes de este tema tendras que volverte a pasar por google y hacer la tarea. Una vez tengas los punteros a dichas funciones solo te quedaria usar GetProcAddress para obtener las direcciones correctas y procedes a llamar a dichas funciones como otras funciones regulares.
Ahora, en tu caso usas inline ASM para dicho fin, y no es que este mal, pero no tienes necesidad de esto, igual si aun deseas ese acercamiento, pues tendras que leer otro poco acerca de ASM y el metodo de llamar funciones, etc, resumiendo, mi consejo es que te vayas por la primera opcion que te mostre. Luego para que tengas una idea de como seria te pongo un ejemplo:

Llamando API MessageBox dinamicamente:

Código (cpp) [Seleccionar]
// prototipo de funcion
int WINAPI MessageBox(
  _In_opt_ HWND    hWnd,
  _In_opt_ LPCTSTR lpText,
  _In_opt_ LPCTSTR lpCaption,
  _In_     UINT    uType
);

// puntero a funcion
typedef int(WINAPI *msgbox)(HWND, LPCSTR, LPCSTR, UINT);

// obteniendo la direccion
msgbox mb = null;
mb = (msgbox)GetProcAddress(GetModuleHandleA("user32.dll"), "MessageBoxA");

// llamando a la funcion
if( mb != NULL ) {
    (*mb)( NULL, "Hola Mundo!", "Hello", MB_OK );
}


Con esto puedes hacerte una idea y tomar como base el código y acomodarlo a tu caso especifico
Saludos
#273
Tienes que ver un poco mas el tema de los punteros pues tienes varios problemas de concepto. Primero, al simbolo "*" antepuesto a una variable declarada como puntero es el simbolo derreferenciador de dicho puntero, o en otras palabras si usas esto:

Código (cpp) [Seleccionar]
int *p; // direccion de memoria de una variable entera
int a = 3; // variable entera


Solo puedes asignar un valor de la forma:

Código (cpp) [Seleccionar]
*p = a; // derreferenciando el puntero, o lo que es lo mismo refiriendote directamente a la memoria de dicha variable y no a su direccion
p = &a; // asignando la direccion de memoria de la variable entera


O sea, lo que estas haciendo en esta linea por ejemplo:

Cita de: palacio29 en 15 Septiembre 2016, 01:49 AM
Código (cpp) [Seleccionar]
if ((*pa->valor)<(*pb->valor))

Es un error total, pues estas usando otro simbolo "->" que se usa para referirse al valor al que apunta tu direccion de memoria (en este caso pa/pb), pero a la vez lo estas derreferenciando, o lo que vendria siendo lo mismo, estas tratando una variable "no puntero" como puntero al utilizar luego el "->". Siendo las dos formas correctas:

Código (cpp) [Seleccionar]
if ((pa->valor) < (pb->valor)) // Forma 1
if (((*pa).valor) < ((*pb).valor)) // Forma 2


Luego ese error lo sigues cometiendo a traves de el resto del codigo y hay algo mas en estas lineas:

Cita de: palacio29 en 15 Septiembre 2016, 01:49 AM
Código (cpp) [Seleccionar]
aux=*pb.valor;
*pa.valor=aux;


Tienes otro error de concepto. Primero declaras aux como variable de tipo structura t_carta y despues intentas asignar un valor tipo entero (pb->valor) a la variable aux que es tipo estructura. La forma correcta es:

Código (cpp) [Seleccionar]
aux = *pc; // Asignas la estructura completa derreferenciando el puntero
aux.valor = pc->valor; // Asignas una variable entera a su igual en la estructura


Con esos arreglos deberian solucionarse los errores
Saludos
#275
Cita de: djona38 en  7 Agosto 2016, 17:24 PM
(hola soy bueno en este foto y necesito un ayuda ) es que hice un sistema pero quiero poner una codificación para que caduque en un mes o 30 dias por favor a ayudenme hay es que no se como hacer la codificación  

Te aconsejaria te pases y preguntes por el foro de Ingenieria Inversa y luego ya cuando tengas la idea lista solo te faltaria desarrollarla
#276
Tienes varios errores de sintaxis y de conceptos. Primero esto:

Código (cpp) [Seleccionar]
opc[0].name="JUGAR";

No es valido, no puedes asignar una cadena a un array de chars de esa forma (Solo se puede hacer en la misma linea de declaración del mismo), seria asi

Código (cpp) [Seleccionar]
char name[10] = "JUGAR";

Si lo deseas en forma de asignación pues debes asignar cada caracter por separado en la posición que deseas, o usar una de las funciones de copiado de cadenas de la familia strcpy, etc, por ejemplo:

Código (cpp) [Seleccionar]
strcpy_s(opc[0].name, "JUGAR");

Finalmente tiene un error de concepto cuando creas el array de estructuras "Opcion". Si dices que creas un array de 3 estructuras:

Código (cpp) [Seleccionar]
Opcion opc[3];

Luego no puedes salir haciendo esto  :silbar::

Código (cpp) [Seleccionar]
opc[3].name="SALIR\0";

Los arrays siempre son zero indexed, si necesitas mas info puedes darle una lectura a esto
http://programmers.stackexchange.com/questions/110804/why-are-zero-based-arrays-the-norm

Saludos
#277
Sumando un poco mas a la respuesta de Elektro (si es que se puede...muy buena intervención  ;-)) es bueno aclarar (aunque esta claro que es solo demostrativo el code) que el método que ha expuesto Elektro es un método que trabaja a nivel de usuario (Ring3) y bien sencillo de sobrepasar, sobre todo para los malware writers que se buscan la vida de las formas mas complicadas e innovadoras para ejecutar sus creaciones, ademas que muchos usan también API's mas cerca del kernel directamente ej NtCreateProcess/ZwCreateProcess, etc (la linea descendiente de llamadas es mas profunda) y la mas indicada no seria CreateProcess sino ZwCreateSection, pero bueno... Por otra parte tambien es de aclarar que se debería hacer el hook no solo en "explorer.exe" sino a todos los procesos activos y los nuevos que se creen en adelante para tener controlados todos los posibles escenarios donde se pudiera ejecutar el "malware".
Mencionas a los AV, bueno, pues no creo que exista un solo AV que se respete que no utilice un driver para estas cosas. Los drivers trabajan con un nivel muy superior de privilegios en el sistema (Ring0) y por ende pueden hacer lo que se les venga en gana. Hay un muy buen articulo + code al respecto que te recomiendo echarle un ojo si asi lo deseas:

http://www.codeproject.com/Articles/11985/Hooking-the-native-API-and-controlling-process-cre

Igual si no quieres ir tan profundo puedes seguir por la ruta de soluciones a nivel de usuario. Si sabes algo de Pascal este code esta muy bien también y solo te tocaría pasarlo a NET o lo que desees  :rolleyes:

http://forum.madshi.net/viewtopic.php?t=1736

Saludos
#278
El primer resultado de una búsqueda rápida en Google  :silbar:
http://stackoverflow.com/questions/6869777/loading-byte-data-to-a-picture-box
#279
Si lo que quieres es unir la dll y el exe en un solo binario puedes usar http://www.boxedapp.com/boxedapppacker o cualquier otra app similar
#280
Ingeniería Inversa / Re: Safebox Crackme
7 Mayo 2016, 23:09 PM
Cita de: sadfud en  7 Mayo 2016, 21:55 PM
La verdad que el fallo en el codigo ha sido una mancada, eso me pasa por no comprobar el funcionamiento completo :$

Hombre eso sí, no te vendría mal depurar antes de liberar jeje, pero igual no te tienes q complicar tanto la vida, VS tiene depurador integrado  ;D