Minotauro10:(MINO_002.010):29/11/1996 << Back To Minotauro10


MINOTAURO MAGAZINE #10 Numeros ordinales de APIs por Trurl En la VLAD 5 salió una nota muy interesante que traía todos los numeros ordinales de las APIs de KERNEL. Aparentemente Quantum iba cambiando a mano los numeros en el file y viendo que API producían, hasta que termino la lista. Yo no tuve mejor idea que hacer un programita que te muestra todas las funciones exportadas de un ejecutable, con sus numeros, y me di cuenta de que se le habian escapado algunas API, porque paro en el número F0h y hay APIs exportadas en KRNL386.EXE hasta 160h. Así que les mando de nuevo una lista mejor; y además de yapa el programa que te muestra los exports de un EXE de Windows, de modo que con solo usar el programa pueden descubrir ustedes mismo los numeros ordinales de todos los exports de GDI, USER, o de hecho de cualquier DLL o EXE (o DRV incluso) que se les cruce por adelante. Los ordinales son (están en orden creciente): File: krnl386.exe Nombre descriptivo: Microsoft Windows Kernel Interface Version 3.10 (0000) Nombre del modulo: KERNEL (0000) FATALEXIT (0001) EXITKERNEL (0002) GETVERSION (0003) LOCALINIT (0004) LOCALALLOC (0005) LOCALREALLOC (0006) LOCALFREE (0007) LOCALLOCK (0008) LOCALUNLOCK (0009) LOCALSIZE (000A) LOCALHANDLE (000B) LOCALFLAGS (000C) LOCALCOMPACT (000D) LOCALNOTIFY (000E) GLOBALALLOC (000F) GLOBALREALLOC (0010) GLOBALFREE (0011) GLOBALLOCK (0012) GLOBALUNLOCK (0013) GLOBALSIZE (0014) GLOBALHANDLE (0015) GLOBALFLAGS (0016) LOCKSEGMENT (0017) UNLOCKSEGMENT (0018) GLOBALCOMPACT (0019) GLOBALFREEALL (001A) 1B : Indefinida GLOBALMASTERHANDLE (001C) YIELD (001D) WAITEVENT (001E) POSTEVENT (001F) SETPRIORITY (0020) LOCKCURRENTTASK (0021) SETTASKQUEUE (0022) GETTASKQUEUE (0023) GETCURRENTTASK (0024) GETCURRENTPDB (0025) SETTASKSIGNALPROC (0026) 27 : Indefinida 28 : Indefinida ENABLEDOS (0029) DISABLEDOS (002A) 2B - Indefinida 2C - Indefinida LOADMODULE (002D) FREEMODULE (002E) GETMODULEHANDLE (002F) GETMODULEUSAGE (0030) GETMODULEFILENAME (0031) GETPROCADDRESS (0032) MAKEPROCINSTANCE (0033) FREEPROCINSTANCE (0034) CALLPROCINSTANCE (0035) GETINSTANCEDATA (0036) CATCH (0037) THROW (0038) GETPROFILEINT (0039) GETPROFILESTRING (003A) WRITEPROFILESTRING (003B) FINDRESOURCE (003C) LOADRESOURCE (003D) LOCKRESOURCE (003E) FREERESOURCE (003F) ACCESSRESOURCE (0040) SIZEOFRESOURCE (0041) ALLOCRESOURCE (0042) SETRESOURCEHANDLER (0043) INITATOMTABLE (0044) FINDATOM (0045) ADDATOM (0046) DELETEATOM (0047) GETATOMNAME (0048) GETATOMHANDLE (0049) OPENFILE (004A) OPENPATHNAME (004B) DELETEPATHNAME (004C) RESERVED1 (004D) RESERVED2 (004E) RESERVED3 (004F) RESERVED4 (0050) _LCLOSE (0051) _LREAD (0052) _LCREAT (0053) _LLSEEK (0054) _LOPEN (0055) _LWRITE (0056) RESERVED5 (0057) LSTRCPY (0058) LSTRCAT (0059) LSTRLEN (005A) INITTASK (005B) GETTEMPDRIVE (005C) GETCODEHANDLE (005D) DEFINEHANDLETABLE (005E) LOADLIBRARY (005F) FREELIBRARY (0060) GETTEMPFILENAME (0061) GETLASTDISKCHANGE (0062) GETLPERRMODE (0063) VALIDATECODESEGMENTS (0064) NOHOOKDOSCALL (0065) DOS3CALL (0066) NETBIOSCALL (0067) GETCODEINFO (0068) GETEXEVERSION (0069) SETSWAPAREASIZE (006A) SETERRORMODE (006B) SWITCHSTACKTO (006C) SWITCHSTACKBACK (006D) PATCHCODEHANDLE (006E) GLOBALWIRE (006F) GLOBALUNWIRE (0070) __AHSHIFT (0071) __AHINCR (0072) OUTPUTDEBUGSTRING (0073) INITLIB (0074) OLDYIELD (0075) GETTASKQUEUEDS (0076) GETTASKQUEUEES (0077) UNDEFDYNLINK (0078) LOCALSHRINK (0079) ISTASKLOCKED (007A) KBDRST (007B) ENABLEKERNEL (007C) DISABLEKERNEL (007D) MEMORYFREED (007E) GETPRIVATEPROFILEINT (007F) GETPRIVATEPROFILESTRING (0080) WRITEPRIVATEPROFILESTRING (0081) FILECDR (0082) GETDOSENVIRONMENT (0083) GETWINFLAGS (0084) GETEXEPTR (0085) GETWINDOWSDIRECTORY (0086) GETSYSTEMDIRECTORY (0087) GETDRIVETYPE (0088) FATALAPPEXIT (0089) GETHEAPSPACES (008A) DOSIGNAL (008B) SETSIGHANDLER (008C) INITTASK1 (008D) 8E - 95 : Indefinidas DIRECTEDYIELD (0096) WINOLDAPCALL (0097) GETNUMTASKS (0098) 99 : Indefinida GLOBALNOTIFY (009A) GETTASKDS (009B) LIMITEMSPAGES (009C) GETCURPID (009D) ISWINOLDAPTASK (009E) GLOBALHANDLENORIP (009F) EMSCOPY (00A0) LOCALCOUNTFREE (00A1) LOCALHEAPSIZE (00A2) GLOBALLRUOLDEST (00A3) GLOBALLRUNEWEST (00A4) A20PROC (00A5) WINEXEC (00A6) GETEXPWINVER (00A7) DIRECTRESALLOC (00A8) GETFREESPACE (00A9) ALLOCCSTODSALIAS (00AA) ALLOCDSTOCSALIAS (00AB) ALLOCALIAS (00AC) __ROMBIOS (00AD) __A000H (00AE) ALLOCSELECTOR (00AF) FREESELECTOR (00B0) PRESTOCHANGOSELECTOR (00B1) __WINFLAGS (00B2) __D000H (00B3) LONGPTRADD (00B4) __B000H (00B5) __B800H (00B6) __0000H (00B7) GLOBALDOSALLOC (00B8) GLOBALDOSFREE (00B9) GETSELECTORBASE (00BA) SETSELECTORBASE (00BB) GETSELECTORLIMIT (00BC) SETSELECTORLIMIT (00BD) __E000H (00BE) GLOBALPAGELOCK (00BF) GLOBALPAGEUNLOCK (00C0) __0040H (00C1) __F000H (00C2) __C000H (00C3) SELECTORACCESSRIGHTS (00C4) GLOBALFIX (00C5) GLOBALUNFIX (00C6) SETHANDLECOUNT (00C7) VALIDATEFREESPACES (00C8) REPLACEINST (00C9) REGISTERPTRACE (00CA) DEBUGBREAK (00CB) SWAPRECORDING (00CC) CVWBREAK (00CD) ALLOCSELECTORARRAY (00CE) ISDBCSLEADBYTE (00CF) D0 - 135 : Indefinidas LOCALHANDLEDELTA (0136) GETSETKERNELDOSPROC (0137) 138 - 139 : Indefinidas DEBUGDEFINESEGMENT (013A) WRITEOUTPROFILES (013B) GETFREEMEMINFO (013C) 13D : Indefinida FATALEXITHOOK (013E) FLUSHCACHEDFILEHANDLE (013F) ISTASK (0140) 141 : Indefinida ISROMMODULE (0143) LOGERROR (0144) LOGPARAMERROR (0145) ISROMFILE (0146) K327 (0147) _DEBUGOUTPUT (0148) K329 (0149) 149 - 14B : Indefinidas THHOOK (014C) 14D : Indefinida ISBADREADPTR (014E) ISBADWRITEPTR (014F) ISBADCODEPTR (0150) ISBADSTRINGPTR (0151) HASGPHANDLER (0152) DIAGQUERY (0153) DIAGOUTPUT (0154) TOOLHELPHOOK (0155) 156 : Indefinida REGISTERWINOLDAPHOOK (0157) GETWINOLDAPHOOKS (0158) ISSHAREDSELECTOR (0159) ISBADHUGEREADPTR (015A) ISBADHUGEWRITEPTR (015B) HMEMCPY (015C) _HREAD (015D) _HWRITE (015E) BUNNY_351 (015F) 160 : Indefinida __GP (0156) [Nota: Esta está en la resident name table] LSTRCPYN (0161) GETAPPCOMPATFLAGS (0162) GETWINDEBUGINFO (0163) SETWINDEBUGINFO (0164) 165 - 192 : Indefinidas K403 (0193) K404 (0194) 195 - FFFF : Indefinidas Como es obvio la mayor parte de estas APIs no están en la documentación (son "indocumentadas"). Algunas son realmente intrigantes.. por ejemplo: BUNNY_351. Que es eso macaya? __GP, será acaso el (G)eneral (P)rotection [Fault] Handler de Win? Hay otra que se llama HasGPHandler.. mhm. Además __GP es la única que esta en la resident names table; las demás son nonresident, lo cual refuerza esta idea ya que un handler de GPF debe estar siempre en memoria etc. Otras interesantes son las que hacen obvia alusión a algún segmento común de memoria: __0040 (Variables de BIOS), __A000 (Video), _0000 (IVT); serán APIs que retornan selectores que dan acceso a esas areas de memoria? Quizá. (De todos modos yo no las usaría porque en la API de Win32 es casi seguro que no están mas). En cuanto a que fin practico sirve esta lista, es muy sencillo; ninguno en principio. Pero quizá en algún momento hagan un virus de Windows y necesi- ten hacer la tabla de realocación "a mano" en el source; en ese caso van a tener que usar esta tabla (y otra similar por cada modulo que necesiten además del kernel; para lo cual les va a ser muy útil el programita). Ya se que las posibilidades de que uds. hagan un virus de Windows en este milenio o en el que viene son remotas, pero por algo hay que empezar. (Je Je Je). ¿Aparte, quien invento eso de que para publicarlo en una revista tiene que ser útil? ¿Acaso el under argentino no esta poblado de revistas que prueban lo contra- rio? (pregunta que también puede articularse como: ¿queda alguien en la galaxia que no haya leído al menos cinco artículos distintos sobre como hacer una bomba ansi?) En fin... lindo e interesante y etc. Enjoy Trurl