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
This commit is contained in:
Martinvlba 2023-04-08 22:19:58 +03:00
parent 9ea12d5765
commit ae50f60f1e
5 changed files with 55 additions and 4 deletions

View File

@ -8,8 +8,8 @@ android {
applicationId "com.offsec.nhterm" applicationId "com.offsec.nhterm"
minSdkVersion rootProject.ext.android.MIN_SDK_VERSION minSdkVersion rootProject.ext.android.MIN_SDK_VERSION
targetSdkVersion rootProject.ext.android.TARGET_SDK_VERSION targetSdkVersion rootProject.ext.android.TARGET_SDK_VERSION
versionCode 20231 versionCode 20232
versionName "2023.1-dev" versionName "2023.2-dev"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
resConfigs 'zh-rCN', 'zh-rTW' resConfigs 'zh-rCN', 'zh-rTW'
externalNativeBuild { externalNativeBuild {

View File

@ -51,7 +51,6 @@
android:exported="true"> android:exported="true">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter> </intent-filter>
<intent-filter> <intent-filter>

View File

@ -13,12 +13,20 @@ import androidx.core.app.NotificationCompat
import com.offsec.nhterm.R import com.offsec.nhterm.R
import com.offsec.nhterm.backend.EmulatorDebug import com.offsec.nhterm.backend.EmulatorDebug
import com.offsec.nhterm.backend.TerminalSession 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.ShellParameter
import com.offsec.nhterm.component.session.XParameter import com.offsec.nhterm.component.session.XParameter
import com.offsec.nhterm.component.session.XSession 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.ui.term.NeoTermActivity
import com.offsec.nhterm.utils.NLog import com.offsec.nhterm.utils.NLog
import com.offsec.nhterm.utils.Terminals 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.Executors
import java.util.concurrent.ScheduledExecutorService import java.util.concurrent.ScheduledExecutorService
@ -40,6 +48,14 @@ class NeoTermService : Service() {
override fun onCreate() { override fun onCreate() {
super.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() createNotificationChannel()
startForeground(NOTIFICATION_ID, createNotification()) startForeground(NOTIFICATION_ID, createNotification())
} }
@ -48,6 +64,39 @@ class NeoTermService : Service() {
return serviceBinder 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 { override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
val action = intent.action val action = intent.action
when (action) { when (action) {

View File

@ -181,7 +181,7 @@ class AboutActivity : AppCompatActivity() {
.show() .show()
} }
private fun resetApp() { fun resetApp() {
// Manual way of resetting required assets // Manual way of resetting required assets
Runtime.getRuntime().exec("mkdir -p "+" "+"/data/data/com.offsec.nhterm/files/usr/").waitFor() 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") Executer("/system/bin/rm -rf /data/data/com.offsec.nhterm/files/usr/bin")

View File

@ -60,6 +60,9 @@
android:paddingLeft="16dp" android:paddingLeft="16dp"
android:paddingRight="16dp" android:paddingRight="16dp"
android:text="@string/app_name" android:text="@string/app_name"
android:textSize="22sp"
android:autoSizeMaxTextSize="22sp"
android:autoSizeMinTextSize="18sp"
android:textAppearance="@style/TextAppearance.AppCompat.Headline"/> android:textAppearance="@style/TextAppearance.AppCompat.Headline"/>
</LinearLayout> </LinearLayout>