Copy Link
Add to Bookmark
Report
Minotauro Magazine Issue 10 02 Numeros ordinales de APIs
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 tambin 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