| 
	
		|  Autor | Tema: Conversión de código de MazarD a C#  (Leído 11,568 veces) |  
	| 
			| 
					
						| DaasCook 
								
								 Desconectado 
								Mensajes: 53
								
								 
								Maximum Trolling!
								
								
								
								
								
								   | 
 
Vale... pues tíos quisiera saber: ¿Es posible convertir el código de inyección por trampolín y/o el código de Redirección de Threads de MazarD  a C#?... Tengo pensado crear un driver a nivel kernel para darme los permisos necesarios y encima usar uno de los dos métodos más seguros de inyección de código... Pero, no quisiera perder mucho tiempo convirtiendo lo inconvertible (?); Por eso vengo a preguntar: ¿Es posible?. Me manejo no de manera perfecta, pero si tengo conocimientos acera de los punteros en C#; Y pues las APIS no son problema; Por tal… ¿Qué Decís?. Prost, OS! 
 
 |  
						| 
								|  |  
								| « Última modificación: 15 Marzo 2011, 23:46 pm por Daas Cook » |  En línea | 
 
 for (int i = Trolling.MaxVal; i > Trolling.MinValue; i--) {Forum.Answer = "Don't feed the troll"; }
 |  |  |  | 
			| 
					
						| raul338 
								       
								
								 Desconectado 
								Mensajes: 2.633
								
								 
								La sonrisa es la mejor forma de afrontar las cosas
								
								
								
								
								
								     | 
 
Todo depende de lo que usa Mazard, que no se a cual codigo te refieres   Pero si, teoricamente se puede  
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| DaasCook 
								
								 Desconectado 
								Mensajes: 53
								
								 
								Maximum Trolling!
								
								
								
								
								
								   | 
 
Todo depende de lo que usa Mazard, que no se a cual codigo te refieres   Pero si, teoricamente se puede  Pues... el código es el siguiente (aunque ya había puesto un vínculo al .pdf): #include <windows.h>#include <stdio.h>//Esta funcion hace la llamada a LoadLibrary pasandole el nombre de nuestra dll, después//ejecuta el código sobreescrito por el jmp y salta a la instrucción siguiente al jmpBYTE *CrearCodigo(DWORD Ruta,DWORD dLoadLibrary,DWORD RetDir,BYTE*RepBuff,DWORD RepSize){BYTE *codeBuff;codeBuff=(BYTE*)malloc(20+RepSize);//Guardamos registros y llamamos a LoadLibrary pasandole la ruta a nuestra dll*codeBuff=0x60; //opcode correspondiente a pushadcodeBuff++;//push path*codeBuff=0x68;codeBuff++;*((DWORD*)codeBuff)=Ruta;codeBuff+=4;//mov eax,dLoadLibrary*codeBuff=0xB8;codeBuff++;*((DWORD*)codeBuff)=dLoadLibrary;codeBuff+=4;*((WORD*)codeBuff)=0xD0FF; //call eaxcodeBuff+=2;*codeBuff=0x61; //popadcodeBuff++;//Ahora metemos el codigo que ha sido reemplazadomemcpy(codeBuff,RepBuff,RepSize);codeBuff+=RepSize;//Ahora hacemos el salto a la dirección de la api*codeBuff=0x68; //push RetDircodeBuff++;*((DWORD*)codeBuff)=(DWORD)RetDir;codeBuff+=4;*codeBuff=0xC3; //retcodeBuff-=(19+RepSize);return codeBuff;}int main(){void *hMsgBox;DWORD dLoadLib;DWORD pID;HANDLE hproc;DWORD size=5;BYTE *ReplacedBuff;DWORD oldprot;void *repsite,*dllnsite;BYTE *inject;char laDll[]="c:\\ladll.dll";BYTE *jmpBuff;printf("Inyección por trampolin by MazarD\nhttp://www.mazard.info\n");printf("PID del proceso a inyectarse:");scanf("%d",&pID);//Preparamos direcciones de apis necesariashMsgBox=GetProcAddress(LoadLibrary("user32.dll"),"MessageBoxA");printf("Dirección de MessageBoxA:%.4x\n",hMsgBox);dLoadLib=(DWORD)GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA");printf("Dirección de LoadLibraryA:%.4x\n",dLoadLib);//Abrimos el proceso y damos permisos en la zona de reemplazohproc=OpenProcess(PROCESS_ALL_ACCESS,false,pID);VirtualProtect(hMsgBox,size,PAGE_EXECUTE_READWRITE,&oldprot);//Leemos el codigo que será reemplazadoReplacedBuff=(BYTE*)malloc(size+6);memset(ReplacedBuff,90,size+6);ReadProcessMemory(hproc,hMsgBox,ReplacedBuff,size,NULL);//Reservamos memoria y guardamos el nombre de la dlldllnsite=VirtualAllocEx(hproc,NULL,11,MEM_COMMIT |MEM_RESERVE,PAGE_EXECUTE_READWRITE);WriteProcessMemory(hproc,dllnsite,laDll,strlen(laDll)+1,NULL);printf("Nombre de la dll en:%.4x\n",dllnsite);//Creamos el codigoinject=CrearCodigo((DWORD)dllnsite,dLoadLib,(DWORD)hMsgBox+5,ReplacedBuff,size);//Reservamos memoria y guardamos el codigorepsite=VirtualAllocEx(hproc,NULL,size+20,MEM_COMMIT |MEM_RESERVE,PAGE_EXECUTE_READWRITE);WriteProcessMemory(hproc,repsite,inject,size+20,NULL);printf("Codigo Reemplazado en:%.4x\n",repsite);//Creamos un salto hacia nuestro codigo y lo ponemos en el inicio de la apijmpBuff=(BYTE*)malloc(5);*jmpBuff=0xE9; //opcode correspondiente a jmpjmpBuff++;*((DWORD*)jmpBuff)=(DWORD)repsite-(DWORD)hMsgBox-5;jmpBuff--;WriteProcessMemory(hproc,hMsgBox,jmpBuff,5,NULL);CloseHandle(hproc);return 0;}
 Ojo ése es sólo el método de inyección por trampolín. En el vínculo dejé el .pdf de MazarD donde se pueden observar todos los demás códigos. Yo leyendo un poco el código, pues lo veo posible, ya que los punteros en C# no son muy difíciles de manejar, el problema es que... Si por ser código administrado, ¿no vayan a haber problemas?. Prost, OS! |  
						| 
								|  |  
								| « Última modificación: 16 Marzo 2011, 01:09 am por Daas Cook » |  En línea | 
 
 for (int i = Trolling.MaxVal; i > Trolling.MinValue; i--) {Forum.Answer = "Don't feed the troll"; }
 |  |  |  | 
			| 
					
						| SRVAM 
								
								 Desconectado 
								Mensajes: 130
								
								
								
								
								
								   | 
 
ahi te dice las librerias que usan, implementalas en tu codigo .net y en teoria podrias hacer lo que quieres sin problemas xD
 EDITO: si tu tienes las librerias, da igual que sea codigo manejado o no, puedes hacer las llamadas a los metodos de las librerias de mazarD sin problemas xD
 |  
						| 
								|  |  
								| « Última modificación: 16 Marzo 2011, 01:24 am por SRVAM » |  En línea | 
 
 C# Programmer
 -Estudiante MCTS .NET Framework 3.5-
 |  |  |  | 
			| 
					
						| DaasCook 
								
								 Desconectado 
								Mensajes: 53
								
								 
								Maximum Trolling!
								
								
								
								
								
								   | 
 
ahi te dice las librerias que usan, implementalas en tu codigo .net y en teoria podrias hacer lo que quieres sin problemas xD
 EDITO: si tu tienes las librerias, da igual que sea codigo manejado o no, puedes hacer las llamadas a los metodos de las librerias de mazarD sin problemas xD
 
 Bien, entonces... comenzaré a convertir código, gracias por todo   . |  
						| 
								|  |  
								|  |  En línea | 
 
 for (int i = Trolling.MaxVal; i > Trolling.MinValue; i--) {Forum.Answer = "Don't feed the troll"; }
 |  |  |  | 
			| 
					
						| [D4N93R] 
								Wiki  Desconectado 
								Mensajes: 1.646
								
								 
								My software never has bugs. Its just features!
								
								
								
								
								
								     | 
 
A qué nivel va a correr eso? En cuál ring? |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| DaasCook 
								
								 Desconectado 
								Mensajes: 53
								
								 
								Maximum Trolling!
								
								
								
								
								
								   | 
 
A qué nivel va a correr eso? En cuál ring?
 0, ¿Por qué?. |  
						| 
								|  |  
								|  |  En línea | 
 
 for (int i = Trolling.MaxVal; i > Trolling.MinValue; i--) {Forum.Answer = "Don't feed the troll"; }
 |  |  |  | 
			| 
					
						| [D4N93R] 
								Wiki  Desconectado 
								Mensajes: 1.646
								
								 
								My software never has bugs. Its just features!
								
								
								
								
								
								     | 
 
Pff, pues para no explicarte todo te pego esto de Lasse V. Karlsen: You can not make kernel-mode device drivers in C# as the runtime can't be safely loaded into ring0 and operate as expected.
 Additionally, C# doesn't create binaries suitable for loading as device drivers, particularly regarding entry points that drivers need to expose. The dependency on the runtime to jump in and analyze and JIT the binary during loading prohibits the direct access the driver subsystem needs to load the binary.
 
 There is work underway, however, to lift some device drivers into user mode, you can see an interview here with Peter Wieland of the UDMF (User Mode Driver Framework) team.
 
 User-mode drivers would be much more suited for managed work, but you'll have to google a bit to find out if C# and .NET will be directly supported. All I know is that kernel level drivers are not doable in only C#.
 
 You can, however, probably make a C/C++ driver, and a C# service (or similar) and have the driver talk to the managed code, if you absolutely have to write a lot of code in C#.
 
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| [Zero] 
								Wiki  Desconectado 
								Mensajes: 1.082
								
								 
								CALL DWORD PTR DS:[0]
								
								
								
								
								
								     | 
 
0, ¿Por qué?.
 ¿Como vas a ejecutar ese codigo en ring 0? Leete esto anda: http://foro.elhacker.net/programacion_cc/principios_basicos_de_desarrollo_de_drivers_en_windows_lenguaje_c-t307017.0.htmlSaludos |  
						| 
								|  |  
								|  |  En línea | 
 
 “El Hombre, en su orgullo, creó a Dios a su imagen y semejanza.Nietzsche |  |  |  | 
			| 
					
						| DaasCook 
								
								 Desconectado 
								Mensajes: 53
								
								 
								Maximum Trolling!
								
								
								
								
								
								   | 
 
Eh ostia ¿Qué os pasa?. Calma, calma...   Dije que correría con privilegios de ring0, más no dije cómo se los daría. He estado hojeando algunos artículos (si si más que esto )... Como MS Windows Internals, y... Rootkits - STWK, con lo cual terminé entendiendo que mi driver debería ser hecho en C/C++, de hecho mi driver está completo, tan solo necesitaba un buen GUI para mi inyector (por ende elegí C#)... y saber si aquel código se podía convertir (que por lo visto se puede). Tan imbécil (?), no soy para creer que con código administrado podría crear un driver   , Lo que sí es posible , es iniciar el servicio de mi driver, y ¡Zasca! que funciona. Prost, OS! y espero no hayan más extrañas respuestas. |  
						| 
								|  |  
								|  |  En línea | 
 
 for (int i = Trolling.MaxVal; i > Trolling.MinValue; i--) {Forum.Answer = "Don't feed the troll"; }
 |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | Conversión . mov a .avi Multimedia
 | Sakura85 | 1 | 2,824 |  9 Junio 2004, 03:48 am por Songoku
 |  
						|   |   | conversion de wmv a avi Multimedia
 | Lemmy | 1 | 2,310 |  29 Junio 2005, 14:12 pm por arda-lothi
 |  
						|   |   | ¿Cuál es la diferencia entre código objeto, código máquina y código binario? Programación General
 | Aikanáro Anário | 9 | 32,487 |  23 Diciembre 2010, 15:19 pm por pucheto
 |  
						|   |   | duda con conversion de codigo Programación General
 | General Dmitry Vergadoski | 1 | 2,781 |  8 Julio 2018, 18:30 pm por Ragnarok
 |  
						|   |   | ¿Qué fue de MazarD? Foro Libre
 | MazarD_Fanboy | 2 | 1,871 |  13 Agosto 2019, 13:47 pm por #!drvy
 |    |