a ver... es algo a lo que llevo tiempo dandole vueltas.
la xbox es evidente que puede abrir un enlace smb con un ordenador y acceder a "carpetas de red" en la que estan almacenados ficheros de video, audio y fotos (XBMC lo hace)
bien, hace unos dias puse un post acerca de la posibilidad de que se pudiesen USAR JUEGOS que estuviesen "montados" (iso+daemon o similar) o bien en "carpetas compartidas" en el disco duro de un PC/MAC en RED con la XBOX...
leyendo el analisis del hack/xploit del 007 (
http://www.xbox-linux.org/docs/007analysis.html) me encuentro con llamadas al ¿sistema? (me lo aclara alguien, please) para "desconectar la unidad D (logica) del lector de la XBOX (fisica) mediante la llamada "IoDeleteSymbolicLink" para posteriormente realizar un "mount" de una particion del disco duro como D ("call IoCreateSymbolicLink")
si EVIDENTEMENTE los juegos se basan en la LETRA D para correr (y no en acceso FISICO al lector) ya que todos podemos cargarlos desde el HDD LOCAL...
¿sería muy dificil implementar un IoCreateSymbolicLink sobre un sistema de archivos TCPIP ?
es de suponer que si un juego INTENTA activar "algo" para conectarse al Live podría "inhibir" nuestro "parche" pero para juegos que no vayan al live (de todas formas no hay que arriesgarse a un x-ban) deberia valer no?
¿que opinamos por aqui?
un extracto del xploit del 007 para ilustrar:
8D8533010000 lea eax, dword ptr [ebp+00000133]
50 push eax ; param 1 = "\??\D:" (busca DONDE esta mapeada la LETRA D:!)
3E8B9DFF000000 mov ebx, dword ptr ds:[ebp+000000FF]
FF13 call dword ptr [ebx] ; call IoDeleteSymbolicLink (la "libera" para poder ASIGNARLA a otra unidad fisica)
8D854E010000 lea eax, dword ptr [ebp+0000014E]
50 push eax ; param 2 = "\Device\Harddisk0\Partition1" (le pasa como parametro DONDE debe mapear)
8D8533010000 lea eax, dword ptr [ebp+00000133]
50 push eax ; param 1 = "\??\D:" (le pasa como parametro LA LETRA D: a MAPEAR)
3E8B9DFB000000 mov ebx, dword ptr ds:[ebp+000000FB]
FF13 call dword ptr [ebx] ; call IoCreateSymbolicLink (establece el enlace)
6800000000 push 00000000 ; param 2 = NULL
8D857F010000 lea eax, dword ptr [ebp+0000017F]
50 push eax ; param 1 = "D:\UDATA\4541000d\000000000000\default.xbe"
FF95F7000000 call dword ptr [ebp+000000F7] ; call XLaunchNewImage (lanza el dash evox o similar...)
pues bien...
imaginaos que SE PUEDA programar una pila TCPIP (en un chip no es dificil) con un SISTEMA DE ARCHIVOS estilo NFS con lo que el parametro que le pasamos a la funcion IoCreateSymbolicLink ya no es "\Device\Harddisk0\Partition1" sino "\Device\NetDisk\SMB0" (por poner un ejemplo de nomenclatura...
conseguiriamos NO TENER QUE PONERLE UN DISCO a la XBOX y manejar el contenido DIRECTAMENTE desde un PC/MAC ...
ideas?
alguien que sepa? (yo NO evidentemente... solo hago de "desginer/producer" jejejeje no de "developer" jajajaja)
un saludo!
%%%%%%%%%%%%%UPDATE
bueno.. mirando por ahi he encontrado la web de TEAM ASSEMBLY y es curioso que esas llamadas son del KERNEL!
o sea... son oficiales y NATIVAS de la consola..
"//Kernel Exports for doing all the cool stuff !!
extern "C" {
XBOXAPI LONG WINAPI RtlInitAnsiString(OUT PANSI_STRING DestinationString, IN LPCSTR SourceString);
XBOXAPI LONG WINAPI HalWriteSMBusValue(UCHAR devddress, UCHAR offset, UCHAR writedw, DWORD data);
XBOXAPI LONG WINAPI HalReadSMBusValue(UCHAR devddress, UCHAR offset, UCHAR readdw, LPBYTE pdata);
XBOXAPI LONG WINAPI IoCreateSymbolicLink(IN PUNICODE_STRING SymbolicLinkName,IN PUNICODE_STRING DeviceName);
XBOXAPI LONG WINAPI IoDeleteSymbolicLink(IN PUNICODE_STRING SymbolicLinkName);
XBOXAPI LONG WINAPI NtCreateFile(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions);
XBOXAPI LONG WINAPI NtDeviceIoControlFile(IN HANDLE FileHandle, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, IN PVOID ApcContext OPTIONAL, OUT PIO_STATUS_BLOCK IoStatusBlock, IN ULONG IoControlCode, IN PVOID InputBuffer OPTIONAL, IN ULONG InputBufferLength, OUT PVOID OutputBuffer OPTIONAL, IN ULONG OutputBufferLength);
}"
veis?
tambien he leido en el source de XBMC que la letra D la ponen "harcoded" sin cambiar (pero PODRIAN)... XD que perros!
y esto es otra rutina para REMAPEAR la unidad D a lo que queramos!
// Remap the drive to the XBE directory, even if the drive already mapped
int RemapDrive(char *szDrive)
{
ANSI_STRING LinkName, TargetName;
char *DDrivePath = 0;
char *temp = 0;
// Allocate room for the drive path
DDrivePath = (char *)MmAllocateContiguousMemoryEx(
XeImageFileName->Length + 1,MIN_KERNEL,
MAX_KERNEL, 0, PAGE_READWRITE);
if (!DDrivePath)
return 0;
// Copy the XBE filename for now
memcpy(DDrivePath, XeImageFileName->Buffer, XeImageFileName->Length);
DDrivePath[XeImageFileName->Length] = 0;
// Delete the trailing backslash, chopping off the XBE name, and make it
// into an ANSI_STRING
if (!(temp = HelpStrrchr(DDrivePath, '\\')))
return 0;
*temp = 0;
RtlInitAnsiString(&TargetName, DDrivePath);
// Set up the link
RtlInitAnsiString(&LinkName, szDrive);
IoDeleteSymbolicLink(&LinkName);
if(!NT_SUCCESS(IoCreateSymbolicLink(&LinkName, &TargetName))) {
dprintf("Error IoCreateSymbolicLink\n");
return 0;
}
// Delete the filename memory
MmFreeContiguousMemory(DDrivePath);
return 1;
}
sacada de
http://cvs.sourceforge.net/viewcvs.py/xbox-linux/xbeboot/load.c?rev=1.24
...
ideas?
&&&&&&&&&&&&&UPDATE 2!
pues resulta que SI puedes inicializar la red ANTES de cargar una aplicacion....
http://www.xfactordev.net/codesnippets/codesnippets.php?cat=3&cid=7
8o
mas info al respecto en;
http://www.xfactordev.net/tutorials/subpages/prt10/index.php