Skip to content

Commit 1ebbcb3

Browse files
committed
feat: add main functionality for Frida-UI including device management, app interaction, and CodeShare integration
- Implemented device loading and management with remote device support - Added app list with search functionality and session management - Integrated script execution and console logging features - Developed CodeShare queue for managing external scripts - Enhanced UI with dynamic updates and user interactions - Included localStorage support for persistent state management
1 parent 42328ac commit 1ebbcb3

File tree

3 files changed

+2080
-0
lines changed

3 files changed

+2080
-0
lines changed

frida_ui/static/index.html

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
4+
<head>
5+
<meta charset="UTF-8">
6+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
7+
<title>Frida UI Dashboard</title>
8+
<link rel="stylesheet" href="/static/styles.css">
9+
</head>
10+
11+
<body>
12+
<header>
13+
<h1>Frida UI</h1>
14+
<div class="device-controls">
15+
<select id="devices">
16+
<option disabled selected>Loading devices...</option>
17+
</select>
18+
<button id="refreshDevices" title="Refresh Devices"></button>
19+
<button id="disconnectRemoteBtn" class="secondary hidden" title="Disconnect Remote Device">
20+
Disconnect</button>
21+
<button id="toggleRemoteBtn" title="Add Remote Device">+ Remote</button>
22+
<div id="remoteForm" class="remote-form">
23+
<input type="text" id="remoteHost" placeholder="192.168.1.100" title="Host/IP" />
24+
<input type="number" id="remotePort" value="27042" placeholder="Port" title="Port" />
25+
<button id="connectRemoteBtn" title="Connect">Connect</button>
26+
<button id="cancelRemoteBtn" title="Close"></button>
27+
</div>
28+
</div>
29+
<div class="header-links">
30+
<a href="https://codeshare.frida.re/browse" target="_blank" rel="noopener" class="btn secondary"
31+
title="Browse CodeShare">CodeShare ↗</a>
32+
<a href="https://github.com/adityatelange/frida-ui" target="_blank" rel="noopener" class="btn secondary"
33+
title="Browse Source Code on Github">Github ↗</a>
34+
</div>
35+
</header>
36+
37+
<div class="container">
38+
<div class="sidebar" id="sidebar">
39+
<div class="sidebar-header">
40+
<input type="text" id="appSearch" class="search-box" placeholder="Search apps...">
41+
<button id="refreshApps" title="Refresh Apps"></button>
42+
</div>
43+
<div id="appList" class="app-list">
44+
<!-- App items injected here -->
45+
</div>
46+
</div>
47+
<div class="resizer-h" id="sidebarResizer"></div>
48+
49+
<div class="main">
50+
<div id="emptyState" class="empty-state">
51+
<div id="deviceInfo" class="device-info-panel">
52+
<p class="status-msg">Loading device information...</p>
53+
</div>
54+
<p class="empty-hint">Select an application from the sidebar to <b>Attach</b> or <b>Spawn</b>.</p>
55+
</div>
56+
57+
<div id="sessionView" class="session-view hidden">
58+
<div class="session-header">
59+
<div class="session-info">
60+
<span id="sessionName" class="session-title">Target App</span>
61+
<span id="sessionIdentifier"></span>
62+
<span id="sessionPid" class="badge">PID: -</span>
63+
</div>
64+
<div class="actions">
65+
<button id="attachBtn" class="primary"
66+
title="Attach to the selected application">Attach</button>
67+
<button id="spawnBtn" class="primary" title="Spawn and attach to the selected application">Spawn
68+
&amp;
69+
Attach</button>
70+
<button id="killBtn" class="hidden danger" title="Kill the current process">Kill</button>
71+
<button id="detachBtn" class="hidden" title="Detach from the current session">Detach</button>
72+
</div>
73+
</div>
74+
75+
<div class="editor-container" id="editorContainer">
76+
<div class="editor-header">
77+
<div class="panel-title">Script Editor</div>
78+
<span id="loadedFilename" class="badge hidden"></span>
79+
</div>
80+
<div class="editor-wrapper">
81+
<textarea id="scriptArea" spellcheck="false"></textarea>
82+
<div class="editor-hint">Drag & drop a .js file here<br>or start typing to create a script</div>
83+
</div>
84+
</div>
85+
86+
<div class="resizer-v" id="editorResizer"></div>
87+
88+
<!-- Controls Area (moved out of editor-container) -->
89+
<div id="controlsArea">
90+
91+
<!-- CodeShare Manager -->
92+
<div class="codeshare-manager">
93+
<div class="panel-title">CodeShare Queue</div>
94+
<div class="codeshare-input-row">
95+
<input id="codeshareUri" placeholder="URI (e.g. frida/android-ssl-pinning)" />
96+
<button id="addCodeshareBtn" title="Add URI to CodeShare queue" type="button">Add</button>
97+
</div>
98+
<div id="codeshareList"></div>
99+
</div>
100+
101+
<!-- Manual Script Controls -->
102+
<div class="manual-controls">
103+
<input id="loadFileInput" type="file" accept=".js,.txt" />
104+
<div class="file-controls">
105+
<button id="loadFileBtn" title="Load script from file">Load File</button>
106+
</div>
107+
<button id="spawnRunBtn" class="primary"
108+
title="Spawn the app, attach, and run the loaded scripts" aria-label="Spawn, Attach & Run">
109+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
110+
fill="currentColor" aria-hidden="true" focusable="false">
111+
<path d="M8 5v14l11-7z" />
112+
</svg>
113+
Spawn, Attach &amp; Run
114+
</button>
115+
<button id="sendScript" title="Run the script currently in the editor">
116+
Run Editor Script
117+
</button>
118+
<button id="loadCodeshareSequenceBtn" class="secondary"
119+
title="Run all scripts in the CodeShare queue in order">
120+
Run CodeShare Scripts
121+
</button>
122+
</div>
123+
</div>
124+
125+
<div class="resizer-v" id="consoleResizer"></div>
126+
127+
<div class="console-container" id="consoleContainer">
128+
<div class="console-header">
129+
<div>Console Output <button id="downloadConsoleBtn" class="icon-btn console-btn"
130+
title="Download console">Download Logs</button></div>
131+
<button id="clearConsoleBtn" class="icon-btn console-btn" title="Clear console">Clear</button>
132+
</div>
133+
<div id="consoleOutput" class="console-output"></div>
134+
</div>
135+
</div>
136+
</div>
137+
</div>
138+
139+
<script src="/static/script.js"></script>
140+
</body>
141+
142+
</html>

0 commit comments

Comments
 (0)