exiouss 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of exiouss might be problematic. Click here for more details.
- package/README.md +39 -0
- package/bin/kalamasha-tool.js +172 -0
- package/bin/spawn_on_desktop.ps1 +100 -0
- package/bin/stealth_capture.ps1 +59 -0
- package/bin/test_raw.py +35 -0
- package/bin/uia_extract.exe +0 -0
- package/bin/uia_extract.py +191 -0
- package/bin/uia_get_text.ps1 +132 -0
- package/config.json +4 -0
- package/index.html +13 -0
- package/main.js +1198 -0
- package/package.json +41 -0
- package/public/icon.ico +0 -0
- package/public/icon.png +0 -0
- package/renderer.js +123 -0
- package/styles.css +84 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# ══════════════════════════════════════════════════════════════════════════
|
|
2
|
+
# UNIVERSAL NATIVE TEXT EXTRACTOR v5.2 (FORCE MODE)
|
|
3
|
+
# Specialized for Chrome/Edge/Firefox Legacy Bridges
|
|
4
|
+
# ══════════════════════════════════════════════════════════════════════════
|
|
5
|
+
|
|
6
|
+
Add-Type -AssemblyName UIAutomationClient
|
|
7
|
+
Add-Type -AssemblyName UIAutomationTypes
|
|
8
|
+
|
|
9
|
+
$OutputEncoding = [System.Text.Encoding]::UTF8
|
|
10
|
+
|
|
11
|
+
try {
|
|
12
|
+
$sig = @'
|
|
13
|
+
[DllImport("user32.dll")] public static extern IntPtr GetForegroundWindow();
|
|
14
|
+
[DllImport("user32.dll")] public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
|
|
15
|
+
[DllImport("user32.dll")] public static extern int GetWindowText(IntPtr hWnd, System.Text.StringBuilder lpString, int nMaxCount);
|
|
16
|
+
[DllImport("user32.dll")] public static extern int GetClassName(IntPtr hWnd, System.Text.StringBuilder lpString, int nMaxCount);
|
|
17
|
+
[DllImport("user32.dll")] public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
|
|
18
|
+
'@
|
|
19
|
+
$user32 = Add-Type -MemberDefinition $sig -Name "Win32" -Namespace Win32Functions -PassThru
|
|
20
|
+
|
|
21
|
+
$hWnd = $user32::GetForegroundWindow()
|
|
22
|
+
if ($hWnd -eq [IntPtr]::Zero) { exit }
|
|
23
|
+
|
|
24
|
+
# Get Process ID for targeted search
|
|
25
|
+
$targetPid = 0
|
|
26
|
+
$user32::GetWindowThreadProcessId($hWnd, [ref]$targetPid) | Out-Null
|
|
27
|
+
|
|
28
|
+
# 🎯 STEP 1: TARGETED BRIDGE SEARCH
|
|
29
|
+
# Specifically look for Chrome_LegacyWindow (The UIA Port)
|
|
30
|
+
function Find-Bridge($parent) {
|
|
31
|
+
$child = [IntPtr]::Zero
|
|
32
|
+
while ($true) {
|
|
33
|
+
$child = $user32::FindWindowEx($parent, $child, $null, $null)
|
|
34
|
+
if ($child -eq [IntPtr]::Zero) { break }
|
|
35
|
+
|
|
36
|
+
$sb = New-Object System.Text.StringBuilder 256
|
|
37
|
+
$user32::GetClassName($child, $sb, 256) | Out-Null
|
|
38
|
+
$className = $sb.ToString()
|
|
39
|
+
|
|
40
|
+
# Browser UIA Bridges
|
|
41
|
+
if ($className -match "(Chrome_LegacyWindow|Chrome_RenderWidgetHostHWND|Intermediate D3D Window|MozillaWindowClass)") {
|
|
42
|
+
return $child
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
$sub = Find-Bridge $child
|
|
46
|
+
if ($sub -ne [IntPtr]::Zero) { return $sub }
|
|
47
|
+
}
|
|
48
|
+
return [IntPtr]::Zero
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
$hBridge = Find-Bridge $hWnd
|
|
52
|
+
$root = $null
|
|
53
|
+
|
|
54
|
+
if ($hBridge -ne [IntPtr]::Zero) {
|
|
55
|
+
$root = [System.Windows.Automation.AutomationElement]::FromHandle($hBridge)
|
|
56
|
+
} else {
|
|
57
|
+
$root = [System.Windows.Automation.AutomationElement]::FromHandle($hWnd)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
# 🎯 STEP 2: ACCESSIBILITY FORCE-ACTIVATE
|
|
61
|
+
try {
|
|
62
|
+
for ($i=0; $i -lt 4; $i++) {
|
|
63
|
+
$null = $root.GetCurrentPropertyValue([System.Windows.Automation.AutomationElement]::NameProperty)
|
|
64
|
+
$null = $root.GetSupportedPatterns()
|
|
65
|
+
Start-Sleep -Milliseconds 150
|
|
66
|
+
}
|
|
67
|
+
} catch {}
|
|
68
|
+
|
|
69
|
+
$textBuffer = New-Object System.Text.StringBuilder
|
|
70
|
+
$seenText = New-Object System.Collections.Generic.HashSet[string]
|
|
71
|
+
$startTime = [DateTime]::Now
|
|
72
|
+
|
|
73
|
+
function Add-CleanText($text) {
|
|
74
|
+
if ($null -eq $text) { return }
|
|
75
|
+
$clean = $text.Replace("`r", " ").Replace("`n", " ").Trim()
|
|
76
|
+
$clean = [regex]::Replace($clean, "\s+", " ")
|
|
77
|
+
if ($clean.Length -le 1 -or $clean -match "^(Search|Close|Minimize|Maximize|Restore|Bookmark|Extensions|New Tab|Address and search bar|Profile|Downloads|History|Menu|Tabs|Reload|Forward|Back|View site information)$") { return }
|
|
78
|
+
|
|
79
|
+
$norm = $clean.ToLower()
|
|
80
|
+
if (-not $seenText.Contains($norm)) {
|
|
81
|
+
[void]$textBuffer.AppendLine($clean)
|
|
82
|
+
[void]$seenText.Add($norm)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function Walk($element, $depth) {
|
|
87
|
+
if ($depth -gt 60 -or ([DateTime]::Now - $startTime).TotalSeconds -gt 5) { return }
|
|
88
|
+
try {
|
|
89
|
+
# Extract Value or Text
|
|
90
|
+
Add-CleanText $element.Current.Name
|
|
91
|
+
|
|
92
|
+
try {
|
|
93
|
+
$content = $element.GetCurrentPattern([System.Windows.Automation.TextPattern]::Pattern).DocumentRange.GetText(-1)
|
|
94
|
+
$content.Split("`n") | ForEach-Object { Add-CleanText $_ }
|
|
95
|
+
} catch {}
|
|
96
|
+
|
|
97
|
+
$children = $element.FindAll([System.Windows.Automation.TreeScope]::Children, [System.Windows.Automation.Condition]::TrueCondition)
|
|
98
|
+
foreach ($child in $children) { Walk $child ($depth + 1) }
|
|
99
|
+
} catch {}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
# 🎯 STEP 3: DUAL-SEARCH STRATEGY
|
|
103
|
+
# A) Try to find a Document within the found handle
|
|
104
|
+
$docCond = New-Object System.Windows.Automation.PropertyCondition([System.Windows.Automation.AutomationElement]::ControlTypeProperty, [System.Windows.Automation.ControlType]::Document)
|
|
105
|
+
$doc = $root.FindFirst([System.Windows.Automation.TreeScope]::Descendants, $docCond)
|
|
106
|
+
|
|
107
|
+
if ($null -ne $doc) {
|
|
108
|
+
Walk $doc 0
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
# B) GLOBAL FALLBACK: Search entire UI tree filtered by Process ID
|
|
112
|
+
if ($textBuffer.Length -lt 50) {
|
|
113
|
+
$procCond = New-Object System.Windows.Automation.PropertyCondition([System.Windows.Automation.AutomationElement]::ProcessIdProperty, [int]$targetPid)
|
|
114
|
+
$orCond = New-Object System.Windows.Automation.OrCondition($docCond, $procCond)
|
|
115
|
+
$globalDocs = [System.Windows.Automation.AutomationElement]::RootElement.FindAll([System.Windows.Automation.TreeScope]::Descendants, $orCond)
|
|
116
|
+
foreach ($g in $globalDocs) {
|
|
117
|
+
# Only walk if it's actually a document or has our PID
|
|
118
|
+
if ($g.Current.ProcessId -eq $targetPid) { Walk $g 0 }
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
$result = $textBuffer.ToString().Trim()
|
|
123
|
+
if ($result.Length -gt 0) {
|
|
124
|
+
Write-Output $result
|
|
125
|
+
} else {
|
|
126
|
+
$sb = New-Object System.Text.StringBuilder 256
|
|
127
|
+
$user32::GetWindowText($hWnd, $sb, 256) | Out-Null
|
|
128
|
+
Write-Output "TARGET: $($sb.ToString())"
|
|
129
|
+
}
|
|
130
|
+
} catch {
|
|
131
|
+
Write-Output "ERROR: $($_.Exception.Message)"
|
|
132
|
+
}
|
package/config.json
ADDED
package/index.html
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<link rel="stylesheet" href="styles.css">
|
|
5
|
+
</head>
|
|
6
|
+
<body>
|
|
7
|
+
<div id="batch-counter" style="position:fixed;top:0;left:0;font-size:9px;color:rgba(148, 163, 184, 0.4);z-index:100;">[0/10]</div>
|
|
8
|
+
<div id="container">
|
|
9
|
+
<div id="answer-area"></div>
|
|
10
|
+
</div>
|
|
11
|
+
<script src="renderer.js"></script>
|
|
12
|
+
</body>
|
|
13
|
+
</html>
|