From 0ee3be8b5529b1dd3636c6b92882832b4cb8271e Mon Sep 17 00:00:00 2001 From: simonpunk Date: Thu, 9 Jan 2020 13:58:44 +0800 Subject: [PATCH 1/6] Update gradle and define nethunter-app path in BuildConfig --- build.gradle | 6 +++--- gradle/wrapper/gradle-wrapper.properties | 4 ++-- libtermexec/build.gradle | 2 +- term/build.gradle | 17 ++++++++++++++++- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index acca89e..e3dd457 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { } } dependencies { - classpath 'com.android.tools.build:gradle:3.4.0' + classpath 'com.android.tools.build:gradle:3.5.3' } } @@ -20,9 +20,9 @@ allprojects { } ext { - compileSdkVersion=28 + compileSdkVersion=29 minSdkVersion=14 - targetSdkVersion=28 + targetSdkVersion=29 //version=YYYYMMVVRR (Either "VV" for stable version OR "RR" for pre-release candidate (e.g. 0001 for rc1) versionCode=2020010100 versionName="2020.1" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a0545d3..6839772 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Feb 14 02:14:00 CST 2019 +#Thu Jan 09 00:45:43 CST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/libtermexec/build.gradle b/libtermexec/build.gradle index ee8f128..d1e850c 100644 --- a/libtermexec/build.gradle +++ b/libtermexec/build.gradle @@ -4,7 +4,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.4.0' + classpath 'com.android.tools.build:gradle:3.5.3' } } apply plugin: 'com.android.library' diff --git a/term/build.gradle b/term/build.gradle index ec2f2c9..8fc8e7a 100644 --- a/term/build.gradle +++ b/term/build.gradle @@ -10,6 +10,21 @@ android { versionCode rootProject.ext.versionCode versionName rootProject.ext.versionName + def nh_app_name = 'com.offsec.nethunter' + def nh_app_script_path = '/data/data/' + nh_app_name + '/files/scripts' + def nh_app_script_bin_path = '/data/data/' + nh_app_name + '/files/scripts/bin' + buildConfigField("String", + "NH_APP_NAME", + "\"${nh_app_name}\"") + + buildConfigField("String", + "NH_APP_SCRIPT_PATH", + "\"${nh_app_script_path}\"") + + buildConfigField("String", + "NH_APP_SCRIPT_BIN_PATH", + "\"${nh_app_script_bin_path}\"") + ndk { moduleName "libjackpal-androidterm5nhj1" abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86' @@ -46,5 +61,5 @@ android { dependencies { implementation project(':emulatorview') implementation project(':libtermexec') - implementation 'com.android.support:support-v4:+' + implementation 'com.android.support:support-v4:28.0.0' } From 3bfc2a603f81fa89277657d3b08f525423633a01 Mon Sep 17 00:00:00 2001 From: simonpunk Date: Thu, 9 Jan 2020 14:00:38 +0800 Subject: [PATCH 2/6] Force enabling UTF-8 mode --- .../java/com/offsec/nhterm/emulatorview/TermSession.java | 1 + .../com/offsec/nhterm/emulatorview/TerminalEmulator.java | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/emulatorview/src/main/java/com/offsec/nhterm/emulatorview/TermSession.java b/emulatorview/src/main/java/com/offsec/nhterm/emulatorview/TermSession.java index 2cfe468..12755c5 100644 --- a/emulatorview/src/main/java/com/offsec/nhterm/emulatorview/TermSession.java +++ b/emulatorview/src/main/java/com/offsec/nhterm/emulatorview/TermSession.java @@ -247,6 +247,7 @@ public class TermSession { public void initializeEmulator(int columns, int rows) { mTranscriptScreen = new TranscriptScreen(columns, TRANSCRIPT_ROWS, rows, mColorScheme); mEmulator = new TerminalEmulator(this, mTranscriptScreen, columns, rows, mColorScheme); + mDefaultUTF8Mode = true; mEmulator.setDefaultUTF8Mode(mDefaultUTF8Mode); mEmulator.setKeyListener(mKeyListener); diff --git a/emulatorview/src/main/java/com/offsec/nhterm/emulatorview/TerminalEmulator.java b/emulatorview/src/main/java/com/offsec/nhterm/emulatorview/TerminalEmulator.java index 8175cc4..d27c3e4 100644 --- a/emulatorview/src/main/java/com/offsec/nhterm/emulatorview/TerminalEmulator.java +++ b/emulatorview/src/main/java/com/offsec/nhterm/emulatorview/TerminalEmulator.java @@ -388,9 +388,9 @@ class TerminalEmulator { * UTF-8 support */ private static final int UNICODE_REPLACEMENT_CHAR = 0xfffd; - private boolean mDefaultUTF8Mode = false; - private boolean mUTF8Mode = false; - private boolean mUTF8EscapeUsed = false; + private boolean mDefaultUTF8Mode = true; + private boolean mUTF8Mode = true; + private boolean mUTF8EscapeUsed = true; private int mUTF8ToFollow = 0; private ByteBuffer mUTF8ByteBuffer; private CharBuffer mInputCharBuffer; From 96e79fefcac293b3955c7f6437e90881f204e674 Mon Sep 17 00:00:00 2001 From: simonpunk Date: Thu, 9 Jan 2020 14:05:31 +0800 Subject: [PATCH 3/6] Change 'su' to 'su -mm' so that the mounted chroot can be seen by other app or terminal as the fs is mounted as globle namespace. --- term/src/main/java/com/offsec/nhterm/ShellType.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/term/src/main/java/com/offsec/nhterm/ShellType.java b/term/src/main/java/com/offsec/nhterm/ShellType.java index 235e766..787a1e8 100644 --- a/term/src/main/java/com/offsec/nhterm/ShellType.java +++ b/term/src/main/java/com/offsec/nhterm/ShellType.java @@ -11,9 +11,9 @@ import java.io.InputStreamReader; class ShellType { static final String ANDROID_SHELL = whichCMD("sh") + " -"; - static final String ANDROID_SU_SHELL = whichCMD("su"); - static final String KALI_SHELL = whichCMD("su") + " -c /data/data/com.offsec.nethunter/files/scripts/bootkali"; - static final String KALI_LOGIN_SHELL = whichCMD("su") +" -c /data/data/com.offsec.nethunter/files/scripts/bootkali_login"; + static final String ANDROID_SU_SHELL = whichCMD("su") + " -mm"; + static final String KALI_SHELL = whichCMD("su") + " -mm -c bootkali"; + static final String KALI_LOGIN_SHELL = whichCMD("su") + " -mm -c bootkali_login"; private static String whichCMD(String theCmd){ String output = null; From f78a1df7991209f599abfc70b245416f310306ba Mon Sep 17 00:00:00 2001 From: simonpunk Date: Thu, 9 Jan 2020 14:08:26 +0800 Subject: [PATCH 4/6] Add nethunter-app's script path and bin path to PATH so that we can execute the sciprts or executables directly. --- term/src/main/java/com/offsec/nhterm/ShellTermSession.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/term/src/main/java/com/offsec/nhterm/ShellTermSession.java b/term/src/main/java/com/offsec/nhterm/ShellTermSession.java index d20fb7c..837e564 100644 --- a/term/src/main/java/com/offsec/nhterm/ShellTermSession.java +++ b/term/src/main/java/com/offsec/nhterm/ShellTermSession.java @@ -96,10 +96,11 @@ public class ShellTermSession extends GenericTermSession { if (settings.verifyPath()) { path = checkPath(path); } - String[] env = new String[3]; + String[] env = new String[4]; env[0] = "TERM=" + settings.getTermType(); - env[1] = "PATH=" + path + ":/data/data/com.offsec.nethunter/files/scripts/"; + env[1] = "PATH=" + path + ":" + BuildConfig.NH_APP_SCRIPT_PATH + ":" + BuildConfig.NH_APP_SCRIPT_BIN_PATH; env[2] = "HOME=" + settings.getHomePath(); + env[3] = "PWD=" + "/"; // Log.d("Initialize Sess", settings.getShell()); mProcId = createSubprocess(mShell, env); } From f2775ece0aaa9941ff33d1fa28a7b3e3fd0d9c67 Mon Sep 17 00:00:00 2001 From: simonpunk Date: Thu, 9 Jan 2020 14:09:24 +0800 Subject: [PATCH 5/6] Fix some warnings. --- libtermexec/src/main/java/com/offsec/nhterm/TermExec.java | 2 +- libtermexec/src/main/jni/process.cpp | 2 +- term/src/main/java/com/offsec/nhterm/Term.java | 3 --- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/libtermexec/src/main/java/com/offsec/nhterm/TermExec.java b/libtermexec/src/main/java/com/offsec/nhterm/TermExec.java index 9ce9089..798dd6f 100644 --- a/libtermexec/src/main/java/com/offsec/nhterm/TermExec.java +++ b/libtermexec/src/main/java/com/offsec/nhterm/TermExec.java @@ -103,7 +103,7 @@ public class TermExec { { final int integerFd; - if (Build.VERSION.SDK_INT >= 12) + if (Build.VERSION.SDK_INT >= 14) integerFd = FdHelperHoneycomb.getFd(masterFd); else { try { diff --git a/libtermexec/src/main/jni/process.cpp b/libtermexec/src/main/jni/process.cpp index 2e4a8bc..32e41f5 100644 --- a/libtermexec/src/main/jni/process.cpp +++ b/libtermexec/src/main/jni/process.cpp @@ -180,7 +180,7 @@ static int create_subprocess(JNIEnv *env, const char *cmd, char *const argv[], c extern "C" { -JNIEXPORT void JNICALL Java_com_offsec_nhterm_TermExec_sendSignal(JNIEnv *env, jobject clazz, +JNIEXPORT void JNICALL Java_com_offsec_nhterm_TermExec_sendSignal(JNIEnv *env, jclass clazz, jint procId, jint signal) { kill(procId, signal); diff --git a/term/src/main/java/com/offsec/nhterm/Term.java b/term/src/main/java/com/offsec/nhterm/Term.java index e4953cf..8a72eb2 100644 --- a/term/src/main/java/com/offsec/nhterm/Term.java +++ b/term/src/main/java/com/offsec/nhterm/Term.java @@ -596,9 +596,6 @@ public class Term extends Activity implements UpdateCallback, SharedPreferences. } protected static TermSession createTermSession(Context context, TermSettings settings, String initialCommand, String _mShell) throws IOException { - - - Log.d("MM createTermSession", _mShell + "cmd: " + initialCommand); GenericTermSession session = new ShellTermSession(settings, initialCommand, _mShell); // called from intents // XXX We should really be able to fetch this from within TermSession From a8667523aa25abcd624dca9a3fc9a1652ef55b31 Mon Sep 17 00:00:00 2001 From: Re4son <3520622-re4son@users.noreply.gitlab.com> Date: Thu, 9 Jan 2020 08:28:25 +0000 Subject: [PATCH 6/6] Bump to 2020010200 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index e3dd457..fb5e12b 100644 --- a/build.gradle +++ b/build.gradle @@ -24,7 +24,7 @@ ext { minSdkVersion=14 targetSdkVersion=29 //version=YYYYMMVVRR (Either "VV" for stable version OR "RR" for pre-release candidate (e.g. 0001 for rc1) - versionCode=2020010100 + versionCode=2020010200 versionName="2020.1" }