-
-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
95 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
-- Diagnostic | ||
-- Microsoft.Windows.Desktop.TextInput.TextServiceFramework | ||
-- from C:\ProgramData\Microsoft\Diagnosis\EventTranscript\EventTranscript.db | ||
|
||
SELECT | ||
|
||
--Timestamp from db field | ||
json_extract(events_persisted.payload,'$.time') as 'UTC TimeStamp', | ||
|
||
-- Timestamp from json payload | ||
datetime((timestamp - 116444736000000000)/10000000, 'unixepoch','localtime') as 'Local TimeStamp', | ||
json_extract(events_persisted.payload,'$.ext.loc.tz') as 'TimeZome', | ||
json_extract(events_persisted.payload,'$.ext.utc.seq') as 'seq', | ||
|
||
-- Event | ||
replace(events_persisted.full_event_name,'Microsoft.Windows.Desktop.TextInput.TextServiceFramework.InputSession','') as 'InputSession', | ||
json_extract(events_persisted.payload,'$.data.applicationName') as 'applicationName', | ||
json_extract(events_persisted.payload,'$.data.processId') as 'processId', | ||
json_extract(events_persisted.payload,'$.data.staticFlags') as 'staticFlags', | ||
|
||
-- InputScopeNameValue: Specifies a particular named input mode | ||
-- Values list: | ||
-- https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.input.inputscopenamevalue?view=winrt-20348 | ||
case json_extract(events_persisted.payload,'$.data.inputScope') | ||
when 0 then 'Default' -- No input scope is applied | ||
when 1 then 'Url' | ||
when 31 then 'Password' | ||
when 50 then 'Search' | ||
when 32 then 'TelephoneNumber' | ||
when 57 then 'Text' | ||
when 5 then 'EmailSmtpAddress' -- (?) Input scope is intended for working with a (SMTP) form e-mail address (accountname@host) | ||
else json_extract(events_persisted.payload,'$.data.inputScope') | ||
end as 'inputScope', | ||
-- https://docs.microsoft.com/en-us/windows/win32/intl/language-identifiers | ||
-- https://docs.microsoft.com/en-us/windows/win32/msi/localizing-the-error-and-actiontext-tables | ||
json_extract(events_persisted.payload,'$.data.langId') as 'langId', | ||
json_extract(events_persisted.payload,'$.data.insertedCharacterCount') as 'InsCharCount', -- nr of inserted characters | ||
json_extract(events_persisted.payload,'$.data.keyCount') as 'keyCount', -- Pressed key count | ||
json_extract(events_persisted.payload,'$.data.imeBackspaceCount') as 'BackspaceCount', -- backspace key press count | ||
strftime('%H:%M:%f',json_extract(events_persisted.payload,'$.data.totalTimeMilliseconds')/1000.0, 'unixepoch') as 'totalTime', | ||
|
||
-- Possible Conversion Mode Values | ||
-- https://docs.microsoft.com/en-us/windows/win32/intl/ime-conversion-mode-values | ||
json_extract(events_persisted.payload,'$.data.conversionMode') as 'conversionMode', | ||
|
||
-- App Info | ||
case substr(json_extract(events_persisted.payload,'$.ext.app.id'),1,1) | ||
when 'U' then "UWP" | ||
when 'W' then "Win" | ||
else substr(json_extract(events_persisted.payload,'$.ext.app.id'),1,1) | ||
end as 'App Type', | ||
|
||
-- Application Name | ||
case when substr(json_extract(events_persisted.payload,'$.ext.app.id'),1,1) is 'W' -- Windows Application x32/x64 | ||
then substr(json_extract(events_persisted.payload,'$.ext.app.id'),93) | ||
else substr(json_extract(events_persisted.payload,'$.ext.app.id'),3) | ||
end as 'App Name', | ||
|
||
-- SHA1 Hash of the application that produced this event | ||
case when substr(json_extract(events_persisted.payload,'$.ext.app.id'),1,1) is 'W' -- Windows Application x32/x64 | ||
then upper(substr(json_extract(events_persisted.payload,'$.ext.app.id'),52,40 )) | ||
-- Same as the 'FileId' in Amcache.hve (Root\InventoryApplicationFile\) | ||
end as 'AppId SHA1', -- (SHA1 Base16) checked & verified | ||
|
||
-- ProgramId of the application that produced this event | ||
case when substr(json_extract(events_persisted.payload,'$.ext.app.id'),1,1) is 'W' -- Windows Application x32/x64 | ||
then upper(substr(json_extract(events_persisted.payload,'$.ext.app.id'),3,44 )) | ||
end as 'ProgramId', -- Same as the 'ProgramId' in Amcache.hve (Root\InventoryApplicationFile\) | ||
|
||
-- Version of the application that produced this event | ||
case when substr(json_extract(events_persisted.payload,'$.ext.app.id'),1,1) is 'W' -- Windows Application x32/x64 | ||
then substr(json_extract(events_persisted.payload,'$.ext.app.ver'),1,19 ) | ||
end as 'AppVersion Date', -- Same as the 'LinkDate' in Amcache.hve (Root\InventoryApplicationFile\) | ||
|
||
case when substr(json_extract(events_persisted.payload,'$.ext.app.id'),1,1) is 'W' -- Windows Application x32/x64 | ||
then substr(json_extract(events_persisted.payload,'$.ext.app.ver'),21,(instr(substr(json_extract(events_persisted.payload,'$.ext.app.ver'),21),'!')-1) ) | ||
end as 'PE Header CheckSum', -- PE Header CheckSum variable size (4-6) | ||
|
||
case when substr(json_extract(events_persisted.payload,'$.ext.app.id'),1,1) is 'W' -- Windows Application x32/x64 | ||
then substr(json_extract(events_persisted.payload,'$.ext.app.ver'),(instr(substr(json_extract(events_persisted.payload,'$.ext.app.ver'),22),'!')+22)) | ||
else json_extract(events_persisted.payload,'$.ext.app.ver') | ||
end as 'Executable', | ||
|
||
|
||
-- Local, MS or AAD account | ||
trim(json_extract(events_persisted.payload,'$.ext.user.localId'),'m:') as 'UserId', | ||
sid as 'User SID', | ||
|
||
logging_binary_name | ||
|
||
from events_persisted | ||
where events_persisted.full_event_name like 'Microsoft.Windows.Desktop.TextInput.TextServiceFramework.%' | ||
|
||
-- Sort by event date dscending (newest first) | ||
order by cast(events_persisted.timestamp as integer) desc |