Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

98

Transcript of Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Page 1: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.
Page 2: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Fix your Broken Applications: The Black Art of Shims

Chris JacksonThe App Compat GuyMicrosoft CorporationWCL304

Page 3: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Application Windows

How Shims Work

Shim DLL

ImportFunction

ExportFunction

ImportFunction

ExportFunction

Page 4: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Shims for User Account Control

Page 5: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Standard User Analyzer

Application

Windows

AppVerifier Logs XMLLuaPriv

Page 6: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

SUA Mitigations

SUA can recommend:ElevateCreateProcessForceAdminAccessLocalMappedObjectVirtualizeDeleteFileVirtualizeHKCRLiteCorrectFilePathsVirtualRegistry

Page 7: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

ElevateCreateProcessSymptomsERROR_ELEVATION_REQUIRED

Fix descriptionTries again, requesting elevation

Page 8: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

ForceAdminAccess

SymptomsFails explicit administrator check

Fix descriptionLies

Page 9: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

ForceAdminAccess Shim for IsUserAnAdmin:

return TRUE;

Page 10: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

LocalMappedObject

SymptomsCan’t create in Global namespace

Fix descriptionCreates in Local namespace

Page 11: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

VirtualizeDeleteFile

SymptomsCan’t delete files

Fix descriptionPretends to delete files

Page 12: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

VirtualizeHKCRLite

SymptomsCan’t register COM components

Fix descriptionRegisters them per-user

Page 13: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

SUA Mitigationsdemo

Page 14: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

UAC Manifests

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity type="win32" processorArchitecture="*" version="1.0.0.0" name="MyApplication.exe"/> <description>My totally sweet Vista application</description> <ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-

com:asm.v2"> <ms_asmv2:security> <ms_asmv2:requestedPrivileges> <ms_asmv2:requestedExecutionLevel level="asInvoker || highestAvailable || requireAdministrator"/> </ms_asmv2:requestedPrivileges> </ms_asmv2:security> </ms_asmv2:trustInfo></assembly>

Page 15: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Installer Detection

Legacy installers / updaters

SpecificInstaller

GenericInstaller

SpecificNonInstaller

Page 16: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

RunAsAdmin

SymptomsRequires admin

Fix descriptionPrompts for elevation

Page 17: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

RunAsHighest

SymptomsHad both admin and standard user views

Fix descriptionProvides most powerful token

Page 18: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

RunAsInvoker

SymptomsPrompting unnecessarily

Fix descriptionNo more prompt

Page 19: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

SpecificInstaller

SymptomsNot fixed as a legacy setup

Fix descriptionFlags it as a legacy setup

Page 20: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

SpecificNonInstaller

SymptomsFlagged as a legacy setup inappropriately

Fix descriptionNo longer flagged as a legacy setup

Page 21: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Run Level Specificationdemo

Page 22: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

VirtualizeRegisterTypeLib

SymptomsRegistering type library fails

Fix descriptionRegisters type library per-user

Page 23: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Shims for File and Registry Paths

Page 24: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

VirtualRegistry

SymptomsProblem reading/writing registry value

Fix descriptionReturns a different registry value

Command line parameters...

Page 25: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

VirtualRegistry Generic Fix

AddRedirect ( HKLM\Key ^ HKCU\Key ^ HKLM\Key2 ^ HKCU\Key2)

Page 26: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

VirtualRegistrydemo

Page 27: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

CorrectFilePaths

SymptomsProblem reading/writing a file

Fix descriptionRedirects to a different file

Page 28: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

CorrectFilePathsdemo

Page 29: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Shims for User Interface Process Isolation

Page 30: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

UIPIEnableStandardMessages

SymptomsWindow messages not delivered

Fix descriptionAdds the message to the filter

ParametersMessageID1 MessageID2 MessageID3

Example:1055 1056 1057 1058 1069

Page 31: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

UIPIEnableCustomMessages

SymptomsCustom window messages not delivered

Fix descriptionAdds the custom window message to the allowed filter

ParametersMessageString1 MessageString2

Page 32: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

User Interface Process Isolationdemo

Page 33: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Shims for Windows Resource Protection

Shims for

Page 34: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

WRPMitigation

SymptomsWriting protected operating system file / registry key

Fix descriptionLies

Page 35: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

WRPDllRegister

SymptomsRegistering protected OS component

Fix descriptionNew DllRegisterServer

Parameterscomponet1.dll;component2.dll

Example:hhctrl.ocx;itircl.dll;itss.dll

Page 36: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

WRPRegDeleteKey

SymptomsCan’t delete protected OS registry key

Fix descriptionLies

Page 37: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Windows Resource Protectiondemo

Page 38: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Shims for Operating System Version

Page 39: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

I Can't Find the > Key…Operating System Version Number Release Date

Windows 1.0 1.04 1985

Windows 2.0 2.11 1987

Windows 3.0 3.00 1990

Windows NT 3.1 3.10.528 1993

Windows for Workgroups 3.11 3.11 1993

Windows NT Workstation 3.5 3.5.807 1994

Windows NT Workstation 3.51 3.51.1057 1995

Windows 95 4.0.950 1995

Windows NT Workstation 4.0 4.0.1381 1996

Windows 98 4.1.1998 1998

Windows 98 Second Edition 4.1.2222 1999

Windows Me 4.90.3000 2000

Windows 2000 Professional 5.0.2195 2000

Windows XP 5.1.2600 2001

Windows Vista 6.0.6000 2006

Page 40: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

xxxVersionLie

Symptoms“Unsupported operating system”

Fix descriptionLies

Page 41: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Version Lie ShimsWin95VersionLieWinNT4SP5VersionLieWin98VersionLieWin2000VersionLieWin2000SP1VersionLieWin2000SP2VersionLie

Win2000SP3VersionLieWinXPVersionLieWinXPSP1VersionLieWinXPSP2VersionLieWin2K3RTMVersionLieWin2K3SP1VersionLieVistaRTMVersionLie

Page 42: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Version Lie LayersWin95NT4SP5Win98Win2000Win2000SP2Win2000SP3

WinXPWinXPSP1WinXPSP2WinXPSP2VersionLieWinSrv03WinSrv03SP1VistaRTM

Page 43: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Shims and Layers

Windows

Shim

Application Child Application

Layer

Page 44: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Layers: More Than Version LiesXPSP2 Layer:

DirectXVersionLieElevateCreateProcessEmulateSortingEnableLegacyExceptionHandlingInOLEFailObsoleteShellAPIsGlobalMemoryStatus2GB

HandleBadPtrHardwareAudioMixerLoadLibraryCWDNoGhostRedirectMP3CodecVirtualRegistryWinXPSP2VersionLie

Page 45: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Operating System Versiondemo

Page 46: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

How to INSTALL Custom Shim Databases

Page 47: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

sdbinst.exe

%windir%\system32\sdbinst.exe

Page 48: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

sdbinst Command Line

-q Quiet mode-u Uninstall-g Guid (uninstall only)-n Internal name (uninstall only)

Page 49: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Deployment Options

Per enterprise

Per application

Page 50: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Installing Custom Shim Databasesdemo

Page 51: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

API Hooking Option #1

Overwriting code

Locate the address of the function

Save the first few bytes

Overwrite with JMP

Page 52: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Overwriting Code: Hooking

USER32!MessageBoxA:mov edi,edi ;nop for hot patchingpush ebp ;set up stack framemov ebp,esp ;””

Page 53: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Overwriting Code: Hooking

USER32!MessageBoxA:jmp rel8 ;short jump to hookpush ebp ;we never get heremov ebp,esp ;””

Page 54: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Overwriting Code: Challenges

CPU dependent

JUMP instructions vary between x86, x64, IA-64

Not thread safe

“…it is the programmer’s responsibility to ensure that no other threads are executing in the address space while a detour is inserted or removed.”

Page 55: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

API Hooking Option #2

Module import section

Modify address

No CPU dependency

No thread synchronization

Page 56: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

IAT Modification: Data Structures

MS-DOS Header

NT Headers

Section Headers

Section Images

PE Signature

File Headers

Optional Headers

Data Directories

Export Table

Import Table

Resource Table

Exception Table

...

Page 57: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Original First Thunk

Time Date Stamp

Forwarder Chain

Imported DLL Name

First Thunk

...

IAT Modification: Import Table

0x1034

0x1047

...

GetModuleHandleA

LoadLibrary

...

kernel32.dll

user32.dll

advapi32.dll

...

Page 58: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

IAT Modification: Sample CodeRichter & Nasarre, 2008ULONG ulSize;PIMAGE_IMPORT_DESCRIPTOR pImportDesc = NULL;__try { pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)ImageDirectoryEntryToData(hmodCaller, TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ulSize);} __except (InvalidReadExceptionFilter(GetExceptionInformation())) {}if (pImportDesc == NULL) return;for (; pImportDesc->Name; pImportDesc++) { PSTR pszModName=(PSTR)((PBYTE)hmodCaller + pImportDesc->Name); if (lstrcmpiA(pszModName, pszCalleeModName) == 0) { PIMAGE_THUNK_DATA pThunk = (PIMAGE_THUNK_DATA)((PBYTE)hmodCaller + pImportDesc->FirstThunk); for (; pThunk->u1.Function; pThunk++) { PROC* ppfn = (PROC*)&pThunk->u1.Function; BOOL bFound = (*ppfn == pfnCurrent); if (bFound) { if (!WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL) && (ERROR_NOACCESS == GetLastError())) { DWORD dwOldProtect; if (VirtualProtect(ppfn, sizeof(pfnNew), PAGE_WRITECOPY, &dwOldProtect)) { WriteProcessMemory(GetCurrentProcess(), ppfn, &pfnNew, sizeof(pfnNew), NULL); VirtualProtect(ppfn, sizeof(pfnNew), dwOldProtect, &dwOldProtect); } } return; } } }}

Page 59: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Security: the Good

Application

Shim

Page 60: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Security: Something to Think About

Crack resources to locate dialog item IDImplement hook for GetDlgItemTextTrick user into installing itYour user-mode API interception can now harvest passwords

Page 61: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

API Hookingdemo

Page 62: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Compatibility Administrator

/x switch

SearchNot perfect

Query

Page 63: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Shim Debug Spew

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags]

"ShowDebugInfo"=dword:00000009

Debugger, DebugView, etc.

Page 64: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Shim Logging

Environment variables:reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v SHIM_DEBUG_LEVEL /t REG_SZ /d 9 /f

reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v SHIM_FILE_LOG /t REG_SZ /d logfile.txt /f

%appdata%\logfile.txt

Page 65: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Shim Diagnostic Toolsdemo

Page 66: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

When to Use Shims

Define standards:

Vender no longer in business

Internal applications

Support negotiable

Page 67: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Custom SDBs Management

Custom SDBs defined by GUID

Affects updates

Define and enforce policy / workflow

Test / mitigation deployment

Centralized resources

Page 68: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Custom SDB Deployment

Package with installer

Centralized enterprise SDB

Page 69: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Managing Shims in the Enterprise

http://go.microsoft.com/fwlink/?LinkId=107072

Page 70: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Custom SDB Deploymentdemo

Page 71: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

(More) Shims for User Account Control

Page 72: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Symptom

Taskbar flasher

CorrectShellExecuteHWND

Fix description

Use the currently active HWND

Page 73: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

RetryOpenServiceWithReadAccess

Symptoms

Access denied opening service

Fix description

Try again requesting fewer rights

Page 74: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

RetryOpenSCManagerWithReadAccess

Symptoms

Access denied opening Service Control Manager

Fix description

Try again requesting fewer rights

Page 75: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

(More) UAC Shimsdemo

Page 76: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Shims for User Interface Issues

Page 77: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

DisableDWM

Symptoms

Not rendering correctly

Fix description

Turn off DWM when the app is running

Page 78: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

FakeLunaTheme

Symptoms

Hard to read

Fix description

Use XP Luna theme colors

Page 79: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

User Interface Shimsdemo

Page 80: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Shims for Miscellaneous Issues

Page 81: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

EmulateSorting

Symptoms

Search functions fail

Fix description

Use legacy sorting tables

Page 82: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

SessionShim

Symptoms

Unable to talk to service

Fix description

Global Local original API

Parameters\\ delimited list of object names, otherwise all objects shimmed

Page 83: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

IgnoreAltTab

Symptoms

Alt-Tab or other special keys fail

Fix description

Filters out special keys

ParametersNOKEYS – doesn’t disable Filter Keys / Sticky Keys

OPENGL – do not shim if running in OpenGL

Page 84: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

IgnoreException

Symptoms

Unhandled exception (typically crashes)

Fix description

Ignores the exceptionYes, this should make you nervous…

Parameters...

Page 85: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

IgnoreException Parameters 1/2

EXCEPTION1_NAME:EXCEPTION1_LEVEL;EXCEPTION2_NAME:EXCEPTION2_LEVEL;…Exception names can be:

ACCESS_VIOLATION_READACCESS_VIOLATION_WRITEARRAY_BOUNDS_EXCEEDEDBREAKPOINTDATATYPE_MISALIGNMENTFLT_DENORMAL_OPERANDFLT_DIVIDE_BY_ZEROFLT_INEXACT_RESULTFLT_INVALID_OPERATIONFLT_OVERFLOWFLT_STACK_CHECK

FLT_UNDERFLOWILLEGAL_INSTRUCTIONIN_PAGE_ERRORINT_DIVIDE_BY_ZEROINT_OVERFLOWINVALID_DISPOSITIONNONCONTINUABLE_EXCEPTIONPRIV_INSTRUCTIONSINGLE_STEPSTACK_OVERFLOWINVALID_HANDLE

Page 86: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

IgnoreException Parameters 2/2

Exception levels can be:0 - Don't ignore the exception1 - Ignore first chance exception2 - Ignore second chance exception3 - Exit process on second chance exception

Page 87: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

IgnoreMessageBox

Symptoms

Extraneous message box

Fix descriptionIgnores the message box

ParametersMessageBoxText1,MessageBoxCaption1;MessageBoxText2,MessageBoxCaption2

Empty arguments match anythingSupports * and ? wildcardsEscape these characters: ? * , ; \

Page 88: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Miscellaneous Shimsdemo

Page 89: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Frequently Asked Questions

Managed code?

VB6 code?

msvbvm60.dll

16-bit code?

Page 90: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Top 10 System SDB Shims1. GameUX2. VirtualRegistry3. CorrectFilePaths4. Win95VersionLie5. WinXPSP2VersionLie6. IgnoreAltTab7. ShimViaEAT8. AOLFindBundledInstaller9. ElevateCreateProcess10.OpenDirectoryACL

Page 92: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

www.microsoft.com/teched

Sessions On-Demand & Community

http://microsoft.com/technet

Resources for IT Professionals

http://microsoft.com/msdn

Resources for Developers

www.microsoft.com/learningMicrosoft Certification and Training Resources

www.microsoft.com/learning

Microsoft Certification & Training Resources

Resources

Page 93: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Related Content

Breakout Sessions (session codes and titles)WCL302 – Are You Breaking my Stuff Again? The Windows 7 App Compat StoryWCL304 – Fix Your Broken Applications: The Black Art of ShimsWCL401 – Not for the Faint of Heart: Hard Core App Compat Debugging

Page 94: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Track Resources→Want to find out which Windows Client sessions are best suited to help you in your deployment lifecycle? →Want to talk face-to-face with folks from the Windows Product Team?

Meet us today at the

Springboard Series Lounge, or visit us at www.microsoft.com/springboard

Springboard SeriesThe Springboard Series empowers you to select the right resources, at the right technical

level, at the right point in your Windows® Client adoption and management process. Come see why Springboard Series is your destination for Windows 7.

Page 95: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Complete an evaluation on CommNet and enter to win!

Page 96: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

© 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS,

IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.

Page 97: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

Complete an evaluation on CommNet and enter to win!

Page 98: Chris Jackson The App Compat Guy Microsoft Corporation WCL304.

© 2009 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS,

IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.