https://github.com/gawasvedraj/HideRoot
- magisk + Zygisk Next
- play integrity fix
- shamiko + zygisk assistant
- sensitive props mod
- hide my applist + lsposed
- put apps that do not need to see root in HMA and deny list in magisk
// Copyright (c) Tailscale Inc & AUTHORS | |
// SPDX-License-Identifier: BSD-3-Clause | |
package cli | |
import ( | |
"bufio" | |
"bytes" | |
"context" | |
"encoding/binary" |
{ | |
"Version": "1.83.0-dev20250509-tcb6fc37d6-dirty", | |
"SessionID": "thaew2Ohbe2Botha", | |
"ErrMessage": null, | |
"LoginFinished": null, | |
"State": 0, | |
"Prefs": { | |
"ControlURL": "https://controlplane.tailscale.com", | |
"RouteAll": false, | |
"ExitNodeID": "", |
import type { WebPoSignalOutput } from 'bgutils'; | |
import { BG, buildURL, GOOG_API_KEY, USER_AGENT } from 'bgutils'; | |
import { Innertube, YT, YTNodes, UniversalCache } from 'youtubei.js'; | |
import { JSDOM } from 'jsdom'; | |
const userAgent = USER_AGENT; | |
// @NOTE: Session cache is disabled so we can get a fresh visitor data string. | |
const innertube = await Innertube.create({ | |
user_agent: userAgent, |
function sleep(ms) { | |
return new Promise(resolve => setTimeout(resolve, ms)); | |
} | |
async function fetchVideos(videos: { videoId: any }[]) { | |
for (const video of videos) { | |
const urlVideo = await fetch( | |
`http://localhost:8282/latest_version?id=${video.videoId}&itag=140`, | |
{ redirect: "manual" }, | |
); |
https://github.com/gawasvedraj/HideRoot
New official instructions: iv-org/documentation#581
master
: quay.io/invidious/invidious:master
(or for ARM64: quay.io/invidious/invidious:master-arm64
)apt-get update
apt-get install devscripts build-essential
apt-get source systemd/bookworm
.apt-get build-dep systemd/bookworm
.apt-get install clang libbpf-dev libbpf-tools bpftool
cd systemd-*
.debuild -us -uc
.cd ..
.dpkg -i systemd_*_amd64.deb
var e=function(n,t){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,n){e.__proto__=n}||function(e,n){for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t])},e(n,t)};function n(e,n,t,r){return new(t||(t=Promise))((function(i,o){function a(e){try{s(r.next(e))}catch(n){o(n)}}function u(e){try{s(r.throw(e))}catch(n){o(n)}}function s(e){var n;e.done?i(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(a,u)}s((r=r.apply(e,n||[])).next())}))}function t(e,n){var t,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function u(u){return function(s){return function(u){if(t)throw new TypeError("Generator is already executing.");for(;o&&(o=0,u[0]&&(a=0)),a;)try{if(t=1,r&&(i=2&u[0]?r.return:u[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,u[1])).done)return i;switch(r=0,i&&(u=[2&u[0],i.value]),u[0]){c |