From ae50f60f1e1a6b7b638393fc49ef381bb649ac27 Mon Sep 17 00:00:00 2001 From: Martinvlba Date: Sat, 8 Apr 2023 22:19:58 +0300 Subject: [PATCH] Usual changes, see desc * Add function to extract initial boot scripts when app is freshly opened or */usr dir is missing * Change versioning to 2023.2-dev * Slight change to About section so title of app name is shown correctly --- nhterm/build.gradle | 4 +- nhterm/src/main/AndroidManifest.xml | 1 - .../offsec/nhterm/services/NeoTermService.kt | 49 +++++++++++++++++++ .../offsec/nhterm/ui/other/AboutActivity.kt | 2 +- nhterm/src/main/res/layout/ui_about.xml | 3 ++ 5 files changed, 55 insertions(+), 4 deletions(-) diff --git a/nhterm/build.gradle b/nhterm/build.gradle index 9ebe5b6..d331904 100644 --- a/nhterm/build.gradle +++ b/nhterm/build.gradle @@ -8,8 +8,8 @@ android { applicationId "com.offsec.nhterm" minSdkVersion rootProject.ext.android.MIN_SDK_VERSION targetSdkVersion rootProject.ext.android.TARGET_SDK_VERSION - versionCode 20231 - versionName "2023.1-dev" + versionCode 20232 + versionName "2023.2-dev" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' resConfigs 'zh-rCN', 'zh-rTW' externalNativeBuild { diff --git a/nhterm/src/main/AndroidManifest.xml b/nhterm/src/main/AndroidManifest.xml index b3e545a..281768b 100644 --- a/nhterm/src/main/AndroidManifest.xml +++ b/nhterm/src/main/AndroidManifest.xml @@ -51,7 +51,6 @@ android:exported="true"> - diff --git a/nhterm/src/main/java/com/offsec/nhterm/services/NeoTermService.kt b/nhterm/src/main/java/com/offsec/nhterm/services/NeoTermService.kt index 947abc7..a36a606 100644 --- a/nhterm/src/main/java/com/offsec/nhterm/services/NeoTermService.kt +++ b/nhterm/src/main/java/com/offsec/nhterm/services/NeoTermService.kt @@ -13,12 +13,20 @@ import androidx.core.app.NotificationCompat import com.offsec.nhterm.R import com.offsec.nhterm.backend.EmulatorDebug import com.offsec.nhterm.backend.TerminalSession +import com.offsec.nhterm.component.config.NeoTermPath import com.offsec.nhterm.component.session.ShellParameter import com.offsec.nhterm.component.session.XParameter import com.offsec.nhterm.component.session.XSession +import com.offsec.nhterm.setup.SetupHelper +import com.offsec.nhterm.ui.other.AboutActivity import com.offsec.nhterm.ui.term.NeoTermActivity import com.offsec.nhterm.utils.NLog import com.offsec.nhterm.utils.Terminals +import com.offsec.nhterm.utils.extractAssetsDir +import java.io.BufferedReader +import java.io.File +import java.io.InputStreamReader +import java.lang.Process import java.util.concurrent.Executors import java.util.concurrent.ScheduledExecutorService @@ -40,6 +48,14 @@ class NeoTermService : Service() { override fun onCreate() { super.onCreate() + + // Check whather we need to populate initial boot scripts or not + // By simply checking */usr folder of ours + if (!checkPrefix()) { + resetApp() + return + } + createNotificationChannel() startForeground(NOTIFICATION_ID, createNotification()) } @@ -48,6 +64,39 @@ class NeoTermService : Service() { return serviceBinder } + fun resetApp() { + // Manual way of resetting required assets + Runtime.getRuntime().exec("mkdir -p "+" "+"/data/data/com.offsec.nhterm/files/usr/").waitFor() + Executer("/system/bin/rm -rf /data/data/com.offsec.nhterm/files/usr/bin") + Thread.sleep(1200) + extractAssetsDir("bin", "/data/data/com.offsec.nhterm/files/usr/bin/") + Thread.sleep(800) + Executer("/system/bin/chmod +x /data/data/com.offsec.nhterm/files/usr/bin/bash") // Static bash for arm ( works for *64 too ) + Executer("/system/bin/chmod +x /data/data/com.offsec.nhterm/files/usr/bin/kali") // Kali chroot scriptlet + Executer("/system/bin/chmod +x /data/data/com.offsec.nhterm/files/usr/bin/android-su") // Android su scriptlet + } + + fun Executer(command: String?): String? { + val output = StringBuilder() + val p: Process + try { + p = Runtime.getRuntime().exec(command) + p.waitFor() + val reader = BufferedReader(InputStreamReader(p.inputStream)) + var line: String? + while (reader.readLine().also { line = it } != null) { + output.append(line).append('\n') + } + } catch (e: Exception) { + e.printStackTrace() + } + return output.toString() + } + fun checkPrefix(): Boolean { + val PREFIX_FILE = File(NeoTermPath.USR_PATH) + return !PREFIX_FILE.isDirectory + } + override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { val action = intent.action when (action) { diff --git a/nhterm/src/main/java/com/offsec/nhterm/ui/other/AboutActivity.kt b/nhterm/src/main/java/com/offsec/nhterm/ui/other/AboutActivity.kt index 73ce5ed..3704080 100644 --- a/nhterm/src/main/java/com/offsec/nhterm/ui/other/AboutActivity.kt +++ b/nhterm/src/main/java/com/offsec/nhterm/ui/other/AboutActivity.kt @@ -181,7 +181,7 @@ class AboutActivity : AppCompatActivity() { .show() } - private fun resetApp() { + fun resetApp() { // Manual way of resetting required assets Runtime.getRuntime().exec("mkdir -p "+" "+"/data/data/com.offsec.nhterm/files/usr/").waitFor() Executer("/system/bin/rm -rf /data/data/com.offsec.nhterm/files/usr/bin") diff --git a/nhterm/src/main/res/layout/ui_about.xml b/nhterm/src/main/res/layout/ui_about.xml index 3ff53cd..4f85c32 100644 --- a/nhterm/src/main/res/layout/ui_about.xml +++ b/nhterm/src/main/res/layout/ui_about.xml @@ -60,6 +60,9 @@ android:paddingLeft="16dp" android:paddingRight="16dp" android:text="@string/app_name" + android:textSize="22sp" + android:autoSizeMaxTextSize="22sp" + android:autoSizeMinTextSize="18sp" android:textAppearance="@style/TextAppearance.AppCompat.Headline"/>