|
141
|
Seguridad Informática / Bugs y Exploits / Re: Problema buffer overflow
|
en: 31 Agosto 2014, 21:27 pm
|
Te recomiendo antes de meterte en estos temas , aprender algo sobre S.O y Assembly para procesadores x86. O ir a la par , es decir , aprender exploiting a la vez. Te va a resolver muchas dudas.
Cosas vitales que te puedo decir rapido es que: Los sistemas operativos Windows, GNU/Linux, usan un modelo de memoria que no utiliza directamente la memoria fisica , sino que crean un espacio virtual , memoria virtual , que varia segun lo permitido por el procesador , con procesadores x86 podes crear un rango de memoria virtual grande pero no mas grande que con los x64.Esa memoria virtual es traducida a memoria fisica.Si la memoria fisica es mas pequeña de lo que se tiene en memoria virtual , se pasa a disco , se guarda en disco , en vez de en memoria fisica.Como esta memoria es virtual , no es directamente la memoria fisica , para darle seguridad al S.O , se decidio que cada proceso, tenga su propia memoria virtual asi otro proceso cualquiera no puede alterar a otro, una "medida de seguridad". Hay S.O(Windows) que te permiten ejecutar un HILO en un proceso remoto , escribir codigo en un proceso remoto , etc.¿Medio tonto , no?
En fin , te expliq algo sobre como administra la memoria estos S.O , acordate q el S.O es el encargado en administrar varias cosas , no solamente la memoria. Te recomiendo enserio leer S.O y Assembly. Cuando avanzes en exploiting , saldras de USERLAND y pasaras a KERNELLAND , donde necesitaras saber un poco mas de lo basico sobre S.O.
Acordate algo importante que muchos olvidan , esto que te explique no vale para todos los S.O , es simplemente el modelo de memoria que decidieron utilizar los creadores de estos OS.
Saludos , y si necesitas algo avisame.
|
|
|
143
|
Seguridad Informática / Análisis y Diseño de Malware / Re: Proyectos Malware
|
en: 30 Agosto 2014, 06:41 am
|
Jajajajajaja Igual me gusto el aporte.. Por que los programadores "se ofenden" por las ventas de otros?? Acaso son panaderos y el software es un hobby de fin de semana? O no tienen cuentas que pagar? El día que el estado no me cobre impuestos, yo regalos mis programas.. Pero si te fijas, es lo que mas piden los usuarios del foro.. Saludos! ¿Te preguntaste porque motivo nadie ha vendido ni compartido un crypter al publico , si todos lo piden , ni tiene mucha ciencia realizar uno? Con respecto a ¿Por que los programadores "se ofenden" por las ventas de otros?... y quizas envidian tu inteligencia , quizas se molestan por tu falta de etica, quizas les molesta el hecho de que fomentes el mercado negro y los script-kiddies por 5 euros , no lo sabemos.
|
|
|
147
|
Programación / Ingeniería Inversa / Re: Pregunta Deshabilitar ASLR
|
en: 11 Agosto 2014, 03:38 am
|
¿Amigos?Pocos.Claro que no estamos para hacer amigos aca.Nombre la amistad porque la base de esta es el respeto hacia al otro , y vos , no lo tenes.
Noto cierto grado de violencia en tus respuestas y la verdad , como un sabio dice:"a quien le importa la amistad aqui" ; no pienso perder mas el tiempo con vos.
|
|
|
148
|
Programación / Ingeniería Inversa / Re: Pregunta Deshabilitar ASLR
|
en: 11 Agosto 2014, 01:17 am
|
Es como dijo karmany pero nadie hizo caso, o mejor dicho nadie entendío lo que dijo ya que no lo sabian. Alguien ignorante como MCKSys Argentina, UND3R y yo , dijo : "Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas" Podras saber mucho de este tema pero tus comentarios no reflejan mucha inteligencia. Pero cuidado!En el fondo nos parecemos , somos ignorantes.Yo de esto y vos de la amistad , solidaridad, compañerismo,HUMILDAD;No te hagas drama son solo palabras de un chico ignorante de 20 años. Saludos desde argentina , doctor aleman.
|
|
|
149
|
Programación / Programación C/C++ / Re: [Consulta] campo del struct MODULEENTRY32
|
en: 9 Agosto 2014, 20:09 pm
|
Que error mas tonto jeje. Te funciono el CreateRemoteThread()?Me tira error 5 , osea AccesoDenegado. Puede ser que sea por que lo estoy corriendo en WIN7 x64 .Lei que algunos tienen el mismo problema , pero en win8 corre bien. Edito: En win7 x64 me tira acceso denegado. En win xp sp3 x86 funciona bien. En win xp sp 2 x86 funciona bien. En win xp x86 funciona bien. Gracias! PD:Conoces algun buen libro orientado a la API de windows? De teoria de windows toy leyendo Windows Internals 6.Aunque tiene practica , no es sobre la api de windows. PD2:Perdon por las molestias , soy mas de unix , unix like. Poseo poco conocimiento en windows , pero estoy tratando de aprender.
|
|
|
150
|
Programación / Programación C/C++ / Re: [Consulta] campo del struct MODULEENTRY32
|
en: 9 Agosto 2014, 18:12 pm
|
#include <stdio.h> #include <windows.h> #include <tlhelp32.h> struct PARAMETROS{ DWORD MessageBoxInj; char text[4]; char caption[4]; int buttons; }; typedef struct PARAMETROS PARAMETROS; int obtenerPID(char*); int privilegios(); typedef int (WINAPI* MessageBoxParam)(HWND,LPCSTR,LPCSTR,UINT); DWORD FuncionInyectar(PARAMETROS* myparam); DWORD Useless(); /****************************COMIENZO MAIN!*******************************/ int main(int argc,char **argv) { HANDLE procesoHandle,hilo=NULL; PARAMETROS data; char *mytext="Hola"; char *mycaption="Hola"; HMODULE user32=NULL; DWORD size_FuncionInyectar; LPVOID MyFuncAddress,parametrosAddress=NULL; int privilegio; //Obtengo PID int pid=obtenerPID("sublime_textSinASLR.exe"); //Privilegios privilegio=privilegios(); printf("Privilegios%d\n",privilegio ); //Obtengo handle del proceso Remoto if((procesoHandle=OpenProcess(PROCESS_ALL_ACCESS,0,pid))==NULL) { printf("%s\n","Error al abrir proceso remoto"); return 0; } //Inicializo estructura user32=LoadLibrary("User32.dll"); data.MessageBoxInj=(DWORD)GetProcAddress(user32,"MessageBoxA"); data.buttons=MB_OKCANCEL|MB_ICONQUESTION; //Tamano de la funcion en bytes size_FuncionInyectar=(PBYTE)Useless - (PBYTE)FuncionInyectar; //Reservo espacio en proceso remoto para la funcion MyFuncAddress=VirtualAllocEx(procesoHandle,NULL,size_FuncionInyectar,MEM_RESERVE|MEM_COMMIT,PAGE_EXECUTE_READWRITE); if(MyFuncAddress==NULL) { printf("%s\n","Error al reservar memoria para la funcion en el proceso remoto"); return 0; } printf("Direccion Funcion:%p \n %d Bytes reservados \n",MyFuncAddress ,sizeof(PARAMETROS )); //Reservo espacio en proceso remoto para los parametros de la funcion parametrosAddress=VirtualAllocEx(procesoHandle,NULL,sizeof(PARAMETROS),MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE); if(parametrosAddress==NULL) { printf("%s\n","Error al reservar memoria para los parametros de la funcion en el proceso remoto"); return 0; } printf("Direccion Parametros:%p \n %d Bytes reservados \n",parametrosAddress ,sizeof(PARAMETROS )); //Escribo en los espacios reservados //1.Funcion if(WriteProcessMemory(procesoHandle,MyFuncAddress,(void*)FuncionInyectar,size_FuncionInyectar,NULL)!=0) { printf("%s\n","Error al escribir la funcion en el proceso remoto"); printf("%d\n",GetLastError ()); return 0; } //2.Parametros if(WriteProcessMemory(procesoHandle,parametrosAddress,&data,sizeof(PARAMETROS),NULL)!=0) { printf("%s\n","Error al escribir los parametros en el proceso remoto"); return 0; } //OK!Perfecto!Reservamos y Escribimos en el proceso remoto!Ahora a ejecutar un hilo! if((hilo=CreateRemoteThread(procesoHandle,NULL,0,(LPTHREAD_START_ROUTINE)MyFuncAddress,parametrosAddress,0,NULL))==NULL) { printf("%s\n","Error al crear hilo remoto!"); return 0; } printf("%s\n","Se inyecto el codigo"); return 0; } /****************************Funciones*************************/ int obtenerPID(char *nombreArchivo) { HANDLE snapshotProcesos=NULL; PROCESSENTRY32 estructuraProceso; estructuraProceso.dwSize=sizeof(PROCESSENTRY32); if(snapshotProcesos=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)) { do { if(Process32Next(snapshotProcesos,&estructuraProceso)) {} else { CloseHandle(snapshotProcesos); return -1; } } while(strcmp(estructuraProceso. szExeFile,nombreArchivo )!=0); CloseHandle(snapshotProcesos); return (int)estructuraProceso.th32ProcessID; } } DWORD FuncionInyectar(PARAMETROS* myparam) { MessageBoxParam MsgBox = (MessageBoxParam)myparam->MessageBoxInj; int result = MsgBox(0,myparam->text,myparam->caption,myparam->buttons); switch(result) { case IDOK: break; case IDCANCEL: break; } return 0; } DWORD Useless() { return 0; } int privilegios(){ HANDLE Token; TOKEN_PRIVILEGES tp; if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&Token)) { LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid); tp.PrivilegeCount = 1; tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if (AdjustTokenPrivileges(Token, 0, &tp, sizeof(tp), NULL, NULL)==0){ return 1; }else{ return 0; } } return 1; }
|
|
|
|
|
|
|