Skip to content

Commit 58f9ba4

Browse files
committed
adding guides
1 parent 572db64 commit 58f9ba4

File tree

9 files changed

+428
-0
lines changed

9 files changed

+428
-0
lines changed

src/views/guides/_sidebar.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# All Guides
2+
3+
* [Rooting](/guides/rooting/)
4+
* [faultmanager](/guides/rooting/faultmanager/)
5+
* [dejavuln](/guides/rooting/dejavuln/)
6+
* [ASM](/guides/rooting/asm/)
7+
* [crashd](/guides/rooting/crashd/)
8+
* [WTA](/guides/rooting/wta/)
9+
* [RootMyTV](/guides/rooting/rootmytv/)
10+
* [GetMeNow](/guides/rooting/getmenow/)
11+
* [NVM](/guides/rooting/nvm/)

src/views/guides/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# User Guides

src/views/guides/rooting/dejavuln.md

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# DejaVuln
2+
3+
A simplified guide of [dejavuln-autoroot](https://github.com/throwaway96/dejavuln-autoroot),
4+
by [throwaway96](https://github.com/throwaway96).
5+
6+
> [!WARNING]
7+
> LG has started rolling out patched firmware. Do not update your
8+
> firmware if you want to be able to root your TV.
9+
10+
> ### Before You Begin
11+
>
12+
> Please read every step carefully before proceeding.
13+
>
14+
> #### :bi-tv: Target
15+
> TV running webOS **3.5 ~ 8.x**
16+
> (visit [CanI.RootMy.TV](https://cani.rootmy.tv/) to find out if your TV is supported)
17+
>
18+
> #### :bi-info-circle: What's Needed
19+
> 1. A computer
20+
> 2. A USB thumb drive (16MB or larger)
21+
22+
## Prepare USB Drive
23+
24+
### Format USB Drive
25+
26+
1. Insert the USB drive into your computer.
27+
2. Format the USB drive to FAT32 or NTFS. **Do not use exFAT**.
28+
29+
### Download DejaVuln
30+
31+
1. Open [latest the release of DejaVuln](https://github.com/throwaway96/dejavuln-autoroot/releases/latest).
32+
2. Download `dejavuln-autoroot-*.zip` from the assets section. **Do not download the source code**.
33+
3. Extract the contents of the zip file **to the root** of the USB drive. It should look like this:
34+
![USB Drive Contents](../../../img/screenshots/dejavuln-explorer.png)
35+
36+
## Begin Rooting
37+
38+
### Prepare TV
39+
40+
1. Remove any other USB drives from your TV.
41+
2. Make sure LG Developer Mode app is not installed on your TV. You _MUST_ uninstall it if it is installed.
42+
3. Insert the USB drive with DejaVuln exploit into your TV.
43+
44+
### Run DejaVuln
45+
46+
1. Open the Music app.
47+
2. Navigate to the USB drive.
48+
3. Browse to `lol$(sh$IFS$(find$IFS/tmp`.
49+
4. Try to play the MP3 file (`usb$IFS-maxdepth${IFS}3$IFS-name${IFS}autoroot.sh)).mp3`).
50+
5. After the pop-up messages tell you rooting is complete, eject the USB drive.
51+
52+
## Troubleshooting
53+
54+
### I'm seeing "This file cannot be played" error
55+
56+
This is not an error. The `.mp3` file is not a real audio file.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# faultmanager
2+
3+
Get autoroot script from [GitHub](https://github.com/throwaway96/faultmanager-autoroot)

src/views/guides/rooting/getmenow.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# GetMeNow (GetMeIn)
2+
3+
Under construction.

src/views/guides/rooting/index.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# Rooting
2+
3+
## Why Root?
4+
5+
### Install Apps without Developer Mode
6+
7+
Installing apps without root requires enabling developer mode. It needs a developer account, and has a timer that
8+
deletes apps after 1000 hours. Rooting allows you to install apps without developer mode.
9+
10+
### Gain More Control
11+
12+
You can install custom screensavers, set up DIY ambient lighting, and more.
13+
14+
### Free Up Space
15+
16+
Some models have store demo videos preloaded. They could take up to 500MB of space. Rooting allows you to delete them.
17+
18+
## Risks of Rooting
19+
20+
Before rooting, make sure you understand the risks:
21+
22+
### Warranty
23+
24+
Rooting _may_ void your warranty. We're not responsible for any damage caused.
25+
26+
### Bricking Risk
27+
28+
Rooting via software methods is generally safe and usually has no consequences if it fails.
29+
30+
However, making system changes without proper knowledge or ignoring [warnings](https://rootmy.tv/warning) can
31+
damage (brick) your TV.
32+
33+
### Security Issues
34+
35+
Rooting allows you to enable SSH and Telnet. If your TV is exposed to the internet, hackers could gain access -
36+
especially when you have Telnet enabled, which has no password protection.
37+
38+
### Firmware Updates & Factory Reset
39+
40+
Rooting usually remains after firmware updates. However, if you perform a factory reset and lose root access, you may
41+
not be able to root your TV again.
42+
43+
## Rooting Methods

src/views/guides/rooting/wta.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# WTA
2+
3+
Under construction.

src/views/hacking/dump_lls.js

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
const fs = require('fs');
2+
const child_process = require("node:child_process");
3+
4+
/**
5+
* @typedef {Object} LLSEntry
6+
* @property {string} llsname
7+
* @property {number} llsidx
8+
* @property {string} category
9+
* @property {Omit<LLSEntry, 'subitems'>[]} [subitems]
10+
*/
11+
12+
/**
13+
* @type {{lls: Record<string, LLSEntry[]>}}
14+
*/
15+
const optionTable = JSON.parse(fs.readFileSync('/etc/factorymanager/db/optionTable.json', 'utf-8'));
16+
17+
/**
18+
* @typedef {Object} ExportOption
19+
* @property {string} key
20+
* @property {string} name
21+
* @property {string} type
22+
*/
23+
24+
/**
25+
* @type {{'export': Record<string, ExportOption[]>}}
26+
*/
27+
const exportTable = JSON.parse(fs.readFileSync('/etc/factorymanager/db/exportOptions.json', 'utf-8'));
28+
29+
/**
30+
*
31+
* @param dbid {string}
32+
* @param llsname {string}
33+
*/
34+
function getLLSValue(dbid, llsname) {
35+
const buf = child_process.execSync(`luna-send -n 1 -f 'luna://com.webos.service.lowlevelstorage/getData' '{"dbgroups":[{"dbid":"${dbid}","items":["${llsname}"]}]}'`, {encoding: 'utf-8'});
36+
const data = JSON.parse(buf);
37+
if (data.returnValue) {
38+
return `\`${JSON.stringify(data.dbgroups[0].items[llsname])}\``;
39+
}
40+
return null;
41+
}
42+
43+
const categoryMapping = {
44+
'factorydb': 'factory',
45+
'tv.model': 'factory',
46+
'system': 'system',
47+
};
48+
49+
/**
50+
* @param key {string}
51+
* @returns {ExportOption | null}
52+
*/
53+
function getExportOption(key) {
54+
for (const groupKey in exportTable.export) {
55+
for (const entry of exportTable.export[groupKey]) {
56+
if (entry.key === key) {
57+
return entry;
58+
}
59+
}
60+
}
61+
return null;
62+
}
63+
64+
console.log('| Category | LLS Name | Export Option | Example Value |');
65+
console.log('|---|---|---|---|');
66+
for (const groupKey in optionTable.lls) {
67+
for (const entry of optionTable.lls[groupKey]) {
68+
const category = categoryMapping[entry.category] || entry.category;
69+
if (entry.llsname === 'null') {
70+
continue;
71+
}
72+
if (!entry.subitems?.length) {
73+
console.log('|', category, '|', entry.llsname, '|', getExportOption(entry.llsname)?.name ?? '', '|', getLLSValue(category, entry.llsname), '|');
74+
} else {
75+
for (const subitem of entry.subitems) {
76+
if (!subitem.llsname) {
77+
continue;
78+
}
79+
console.log('|', category, '|', subitem.llsname, '|', getExportOption(subitem.llsname)?.name ?? '', '|', getLLSValue(category, subitem.llsname), '|');
80+
}
81+
}
82+
}
83+
}

0 commit comments

Comments
 (0)