梆梆加固样本特征
清单文件入口
android:name=“com.SecShell.SecShell.ApplicationWrapper”
特征
- 免费版
- meta-data
meta-data - 总结
assets/secData0.jar
lib/armeabi/libSecShell.so
lib/armeabi/libSecShell-x86.so
梆梆企业版
assets/classes0.jar
lib/armeabi-v7a/libDexHelper.so
lib/armeabi-v7a/ libDexHelper-x86.so
梆梆是把原dex文件加密放到了secData0.jar,所以直接拿到dex文件,修复配置文件的程序入口点就可以重打包完美运行。
通过还原加密算法,解密secData0.jar,直接解压解密jar就是原dex。
secData0.jar文件保存在.cache的classes.dex是加密的,主要是通过hook实现,打开时解密,关闭时加密(open、mmap)。
/data/app/com.qianyu.helloworld-47o1HjF-eZJXXlpOoPX_nA==/lib/arm/libSecShell.so CC688000 1B6AB000
清单文件
package com.SecShell.SecShell;import android.annotation.TargetApi;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.res.Configuration;
import android.view.LayoutInflater;
import java.lang.reflect.Field;/* loaded from: classes.dex */
public class ApplicationWrapper extends Application {public static Application realApplication = null;static {d.a();System.loadLibrary("SecShell");if (Helper.PPATH != null) {System.load(Helper.PPATH);}if (Helper.J2CNAME.equals("SECNEOJ2C")) {return;}System.loadLibrary(Helper.J2CNAME);}@Override // android.content.ContextWrapperprotected void attachBaseContext(Context context) {super.attachBaseContext(context);if (Boolean.parseBoolean(Helper.ABCCHECK)) {e.a(context);}try {if (!"".equals(Helper.APPNAME)) {realApplication = (Application) getClassLoader().loadClass(Helper.APPNAME).newInstance();}} catch (Exception e) {realApplication = null;}Helper.attach(realApplication, context);}@Override // android.content.ContextWrapper, android.content.Contextpublic boolean bindService(Intent intent, ServiceConnection serviceConnection, int i) {if (realApplication != null) {Helper.b(realApplication);return realApplication.bindService(intent, serviceConnection, i);}return super.bindService(intent, serviceConnection, i);}@Override // android.app.Application, android.content.ComponentCallbackspublic void onConfigurationChanged(Configuration configuration) {super.onConfigurationChanged(configuration);if (realApplication != null) {realApplication.onConfigurationChanged(configuration);}}@Override // android.app.Applicationpublic void onCreate() {super.onCreate();try {Helper.c();} catch (Throwable th) {}if (realApplication != null) {Helper.attach(realApplication, null);realApplication.onCreate();LayoutInflater from = LayoutInflater.from(getApplicationContext());try {Field declaredField = LayoutInflater.class.getDeclaredField("mContext");declaredField.setAccessible(true);declaredField.set(from, realApplication);} catch (Exception e) {}}}@Override // android.app.Application, android.content.ComponentCallbackspublic void onLowMemory() {super.onLowMemory();if (realApplication != null) {realApplication.onLowMemory();}}@Override // android.app.Applicationpublic void onTerminate() {super.onTerminate();if (realApplication != null) {realApplication.onTerminate();}}@Override // android.app.Application, android.content.ComponentCallbacks2@TargetApi(14)public void onTrimMemory(int i) {try {super.onTrimMemory(i);if (realApplication != null) {realApplication.onTrimMemory(i);}} catch (Exception e) {}}@Override // android.app.Application@TargetApi(14)public void registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks activityLifecycleCallbacks) {super.registerActivityLifecycleCallbacks(activityLifecycleCallbacks);if (realApplication != null) {realApplication.registerActivityLifecycleCallbacks(activityLifecycleCallbacks);}}
}
Helper
package com.SecShell.SecShell;import android.app.Application;
import android.content.Context;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;/* loaded from: classes.dex */
public class Helper {public static ClassLoader cl;public static String PPATH = null;public static String JNIPPATH = null;public static String PKGNAME = "com.qianyu.helloworld";public static String APPNAME = "";public static String J2CNAME = "SECNEOJ2C";public static String ABCCHECK = "SECNEOCHECK";public static String ISMPASS = "SECNEOMPASS";public static native void attach(Application application, Context context);public static native void b(Application application);public static native void c();public static native String d(String str);public static native Object[] e(Object obj, List list, String str);public static void f(ClassLoader classLoader, String str, String str2) {b.a(classLoader, str, str2);}public static void g(Object obj) {b.a(obj);}public static Object h(ClassLoader classLoader) {return new f(":", classLoader);}public static boolean isInstalled(String str) {BufferedReader bufferedReader;String readLine;try {bufferedReader = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("pm path " + str).getInputStream()));} catch (IOException e) {e.printStackTrace();}do {readLine = bufferedReader.readLine();if (readLine == null) {return false;}} while (!readLine.startsWith("package:"));return true;}public static void stub() {}
}
a
public final class a {public static final String[] a = {"com.noshufou.android.su", "com.noshufou.android.su.elite", "eu.chainfire.supersu", "com.koushikdutta.superuser", "com.thirdparty.superuser", "com.yellowes.su"};public static final String[] b = {"com.koushikdutta.rommanager", "com.koushikdutta.rommanager.license", "com.dimonvideo.luckypatcher", "com.chelpus.lackypatch", "com.ramdroid.appquarantine", "com.ramdroid.appquarantinepro"};public static final String[] c = {"com.devadvance.rootcloak", "com.devadvance.rootcloakplus", "de.robv.android.xposed.installer", "com.saurik.substrate", "com.zachspong.temprootremovejb", "com.amphoras.hidemyroot", "com.amphoras.hidemyrootadfree", "com.formyhm.hiderootPremium", "com.formyhm.hideroot"};public static final String[] d = {"/data/local/", "/data/local/bin/", "/data/local/xbin/", "/sbin/", "/su/bin/", "/system/bin/", "/system/bin/.ext/", "/system/bin/failsafe/", "/system/sd/xbin/", "/system/usr/we-need-root/", "/system/xbin/"};public static final String[] e = {"/system", "/system/bin", "/system/sbin", "/system/xbin", "/vendor/bin", "/sbin", "/etc"};
}
b
/* loaded from: classes.dex */
public class b {private static ArrayList a = new ArrayList();/* JADX INFO: Access modifiers changed from: private *//* loaded from: classes.dex */public static final class a {private static Object[] a(Object obj, ArrayList arrayList, File file) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {return (Object[]) b.b(obj, "makeDexElements", ArrayList.class, File.class).invoke(obj, arrayList, file);}/* JADX INFO: Access modifiers changed from: private */public static void b(ClassLoader classLoader, List list, File file) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, InvocationTargetException, NoSuchMethodException {Object obj = b.b(classLoader, "pathList").get(classLoader);b.b(obj, "dexElements", a(obj, new ArrayList(list), file));}}/* JADX INFO: Access modifiers changed from: private *//* renamed from: com.SecShell.SecShell.b$b reason: collision with other inner class name *//* loaded from: classes.dex */public static final class C0000b {/* JADX INFO: Access modifiers changed from: private */public static void b(ClassLoader classLoader, List list, File file) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, InvocationTargetException, NoSuchMethodException {IOException[] iOExceptionArr;Object obj = b.b(classLoader, "pathList").get(classLoader);ArrayList arrayList = new ArrayList();b.b(obj, "dexElements", b(obj, new ArrayList(list), file, arrayList), Build.VERSION.SDK_INT < 28);if (arrayList.size() > 0) {Iterator it = arrayList.iterator();while (it.hasNext()) {IOException iOException = (IOException) it.next();}Field b = b.b(classLoader, "dexElementsSuppressedExceptions");IOException[] iOExceptionArr2 = (IOException[]) b.get(classLoader);if (iOExceptionArr2 == null) {iOExceptionArr = (IOException[]) arrayList.toArray(new IOException[arrayList.size()]);} else {IOException[] iOExceptionArr3 = new IOException[arrayList.size() + iOExceptionArr2.length];arrayList.toArray(iOExceptionArr3);System.arraycopy(iOExceptionArr2, 0, iOExceptionArr3, arrayList.size(), iOExceptionArr2.length);iOExceptionArr = iOExceptionArr3;}b.set(classLoader, iOExceptionArr);}}/* JADX INFO: Access modifiers changed from: private */public static Object[] b(Object obj, ArrayList arrayList, File file, ArrayList arrayList2) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {Method method = null;try {method = b.b(obj, "makeDexElements", ArrayList.class, File.class, ArrayList.class);} catch (Exception e) {}if (method == null) {try {method = b.b(obj, "makePathElements", List.class, File.class, List.class);} catch (Exception e2) {}}return (Object[]) method.invoke(obj, arrayList, file, arrayList2);}}/* JADX INFO: Access modifiers changed from: private *//* loaded from: classes.dex */public static final class c {/* JADX INFO: Access modifiers changed from: private */public static void b(ClassLoader classLoader, List list) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, IOException {int size = list.size();Field b = b.b(classLoader, "path");StringBuilder sb = new StringBuilder((String) b.get(classLoader));String[] strArr = new String[size];File[] fileArr = new File[size];ZipFile[] zipFileArr = new ZipFile[size];DexFile[] dexFileArr = new DexFile[size];ListIterator listIterator = list.listIterator();while (listIterator.hasNext()) {File file = (File) listIterator.next();String absolutePath = file.getAbsolutePath();sb.append(':').append(absolutePath);int previousIndex = listIterator.previousIndex();strArr[previousIndex] = absolutePath;fileArr[previousIndex] = file;zipFileArr[previousIndex] = new ZipFile(file);dexFileArr[previousIndex] = DexFile.loadDex(absolutePath, absolutePath + ".dex", 0);}b.set(classLoader, sb.toString());b.b(classLoader, "mPaths", strArr);b.b(classLoader, "mFiles", fileArr);b.b(classLoader, "mZips", zipFileArr);b.b(classLoader, "mDexs", dexFileArr);}}private static void a(ClassLoader classLoader, File file, List list) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, InvocationTargetException, NoSuchMethodException, IOException {if (list.isEmpty()) {return;}if ((Build.VERSION.RELEASE.equals("P") || Build.VERSION.SDK_INT >= 28) && !Boolean.parseBoolean(Helper.ISMPASS)) {a(classLoader, ((File) list.get(0)).getAbsolutePath());} else if (Build.VERSION.SDK_INT >= 19) {C0000b.b(classLoader, list, file);} else if (Build.VERSION.SDK_INT >= 14) {a.b(classLoader, list, file);} else {c.b(classLoader, list);}}private static void a(ClassLoader classLoader, String str) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, InvocationTargetException, NoSuchMethodException {IOException[] iOExceptionArr;Object obj = b(classLoader, "pathList").get(classLoader);ArrayList arrayList = new ArrayList();b(obj, "dexElements", Helper.e(obj, arrayList, str), false);if (arrayList.size() > 0) {Iterator it = arrayList.iterator();while (it.hasNext()) {((IOException) it.next()).printStackTrace(System.out);}Field b = b(classLoader, "dexElementsSuppressedExceptions");IOException[] iOExceptionArr2 = (IOException[]) b.get(classLoader);if (iOExceptionArr2 == null) {iOExceptionArr = (IOException[]) arrayList.toArray(new IOException[arrayList.size()]);} else {IOException[] iOExceptionArr3 = new IOException[arrayList.size() + iOExceptionArr2.length];arrayList.toArray(iOExceptionArr3);System.arraycopy(iOExceptionArr2, 0, iOExceptionArr3, arrayList.size(), iOExceptionArr2.length);iOExceptionArr = iOExceptionArr3;}b.set(classLoader, iOExceptionArr);}}public static void a(ClassLoader classLoader, String str, String str2) {try {a(classLoader, new File(str2), Arrays.asList(new File(str)));} catch (Exception e) {}}public static void a(Object obj) {Object[] objArr;try {ArrayList arrayList = new ArrayList();Field b = b(obj, "dexElements");for (Object obj2 : (Object[]) b.get(obj)) {DexFile dexFile = (DexFile) b(obj2, "dexFile").get(obj2);if (dexFile != null) {arrayList.add(new File(dexFile.getName()));a.add(dexFile);}}b.set(obj, C0000b.b(obj, arrayList, null, new ArrayList()));} catch (Exception e) {}}/* JADX INFO: Access modifiers changed from: private */public static Field b(Object obj, String str) throws NoSuchFieldException {for (Class<?> cls = obj.getClass(); cls != null; cls = cls.getSuperclass()) {try {Field declaredField = cls.getDeclaredField(str);if (!declaredField.isAccessible()) {declaredField.setAccessible(true);}return declaredField;} catch (NoSuchFieldException e) {}}throw new NoSuchFieldException("Field " + str + " not found in " + obj.getClass());}/* JADX INFO: Access modifiers changed from: private */public static Method b(Object obj, String str, Class... clsArr) throws NoSuchMethodException {for (Class<?> cls = obj.getClass(); cls != null; cls = cls.getSuperclass()) {try {Method declaredMethod = cls.getDeclaredMethod(str, clsArr);if (!declaredMethod.isAccessible()) {declaredMethod.setAccessible(true);}return declaredMethod;} catch (NoSuchMethodException e) {}}throw new NoSuchMethodException("Method " + str + " with parameters " + Arrays.asList(clsArr) + " not found in " + obj.getClass());}/* JADX INFO: Access modifiers changed from: private */public static void b(Object obj, String str, Object[] objArr) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException {b(obj, str, objArr, true);}/* JADX INFO: Access modifiers changed from: private */public static void b(Object obj, String str, Object[] objArr, boolean z) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException {Field b = b(obj, str);Object[] objArr2 = (Object[]) b.get(obj);Object[] objArr3 = (Object[]) Array.newInstance(objArr2.getClass().getComponentType(), objArr2.length + objArr.length);if (z) {System.arraycopy(objArr2, 0, objArr3, objArr.length, objArr2.length);System.arraycopy(objArr, 0, objArr3, 0, objArr.length);} else {System.arraycopy(objArr2, 0, objArr3, 0, objArr2.length);System.arraycopy(objArr, 0, objArr3, objArr2.length, objArr.length);}b.set(obj, objArr3);}
}
c
/* loaded from: classes.dex */
public class c {public static int a(String[] strArr) {try {int i = 0;for (String str : strArr) {try {if (b(str)) {i++;}} catch (Throwable th) {return i;}}return i;} catch (Throwable th2) {return 0;}}public static boolean a(String str) {try {return new File(str).exists();} catch (Exception e) {return false;}}public static boolean b(String str) {try {return a(str);} catch (Throwable th) {th.printStackTrace();return false;}}
}
d
/* loaded from: classes.dex */
public class d extends FileObserver {private static d a;private static Object b = new Object();private static boolean c = true;public d(String str, int i) {super(str, i);}public static void a() {Thread[] threadArr = new Thread[20];int enumerate = Thread.currentThread().getThreadGroup().enumerate(threadArr);boolean z = false;for (int i = 0; i < enumerate; i++) {if ("FileObserver".equals(threadArr[i].getName())) {z = true;}}if (z) {String b2 = b();new File(b2, "miui_notify" + Process.myPid()).delete();a = new d(b2, 256);a.startWatching();try {new File(b2, "miui_notify" + Process.myPid()).createNewFile();} catch (IOException e) {}synchronized (b) {try {if (c) {b.wait(1000L);}} catch (InterruptedException e2) {}}new File(b2, "miui_notify" + Process.myPid()).delete();}}private static String b() {try {Class<?> cls = Class.forName("android.app.ActivityThread");Method method = cls.getMethod("currentActivityThread", new Class[0]);Field declaredField = cls.getDeclaredField("mBoundApplication");boolean isAccessible = declaredField.isAccessible();declaredField.setAccessible(true);Object obj = declaredField.get(method.invoke(null, new Object[0]));declaredField.setAccessible(isAccessible);Field declaredField2 = obj.getClass().getDeclaredField("appInfo");boolean isAccessible2 = declaredField2.isAccessible();declaredField2.setAccessible(true);declaredField2.setAccessible(isAccessible2);return ((ApplicationInfo) declaredField2.get(obj)).dataDir;} catch (Exception e) {return "/data/data/" + Helper.PKGNAME;}}@Override // android.os.FileObserverpublic void onEvent(int i, String str) {stopWatching();synchronized (b) {c = false;b.notify();}try {Thread.sleep(3000L);} catch (InterruptedException e) {}}
}
e
/* loaded from: classes.dex */
public class e {private final Context a;private boolean b = true;public e(Context context) {this.a = context;}public static void a(Context context) {if (new e(context).a()) {System.exit(0);}}private boolean a(List list) {boolean z = false;PackageManager packageManager = this.a.getPackageManager();Iterator it = list.iterator();while (true) {boolean z2 = z;if (!it.hasNext()) {return z2;}try {packageManager.getPackageInfo((String) it.next(), 0);z = true;} catch (PackageManager.NameNotFoundException e) {z = z2;}}}public boolean a() {return b() || c() || a("su") || d() || e() || f() || h();}public boolean a(String str) {String[] strArr;int length = a.d.length;boolean z = false;for (int i = 0; i < length; i++) {if (new File(strArr[i] + str).exists()) {z = true;}}return z;}public boolean a(String[] strArr) {ArrayList arrayList = new ArrayList();arrayList.addAll(Arrays.asList(a.a));if (strArr != null && strArr.length > 0) {arrayList.addAll(Arrays.asList(strArr));}return a(arrayList);}public boolean b() {return a((String[]) null);}public boolean b(String[] strArr) {ArrayList arrayList = new ArrayList();arrayList.addAll(Arrays.asList(a.b));if (strArr != null && strArr.length > 0) {arrayList.addAll(Arrays.asList(strArr));}return a(arrayList);}public boolean c() {return b(null);}/* JADX WARN: Code restructure failed: missing block: B:14:0x0072, code lost:if (r3.equals("0") != false) goto L18;*//*Code decompiled incorrectly, please refer to instructions dump.To view partially-correct code enable 'Show inconsistent code' option in preferences*/public boolean d() {/*r8 = this;r4 = 0r0 = 1r2 = 0java.lang.ProcessBuilder r1 = new java.lang.ProcessBuilder // Catch: java.lang.Exception -> L78 java.lang.Throwable -> L82r3 = 2java.lang.String[] r3 = new java.lang.String[r3] // Catch: java.lang.Exception -> L78 java.lang.Throwable -> L82r5 = 0java.lang.String r6 = "getprop"r3[r5] = r6 // Catch: java.lang.Exception -> L78 java.lang.Throwable -> L82r5 = 1java.lang.String r6 = "ro.debuggable"r3[r5] = r6 // Catch: java.lang.Exception -> L78 java.lang.Throwable -> L82r1.<init>(r3) // Catch: java.lang.Exception -> L78 java.lang.Throwable -> L82r3 = 1r1.redirectErrorStream(r3) // Catch: java.lang.Exception -> L78 java.lang.Throwable -> L82java.lang.Process r1 = r1.start() // Catch: java.lang.Exception -> L78 java.lang.Throwable -> L82java.io.BufferedReader r3 = new java.io.BufferedReader // Catch: java.lang.Exception -> L78 java.lang.Throwable -> L82java.io.InputStreamReader r5 = new java.io.InputStreamReader // Catch: java.lang.Exception -> L78 java.lang.Throwable -> L82java.io.InputStream r1 = r1.getInputStream() // Catch: java.lang.Exception -> L78 java.lang.Throwable -> L82r5.<init>(r1) // Catch: java.lang.Exception -> L78 java.lang.Throwable -> L82r3.<init>(r5) // Catch: java.lang.Exception -> L78 java.lang.Throwable -> L82java.lang.String r1 = ""java.lang.String r1 = r3.readLine() // Catch: java.lang.Throwable -> L88 java.lang.Exception -> L8dif (r1 == 0) goto L97java.lang.String r2 = "1"boolean r1 = r1.equals(r2) // Catch: java.lang.Throwable -> L88 java.lang.Exception -> L8dif (r1 == 0) goto L97r1 = r0L3c:if (r1 != 0) goto L94java.lang.ProcessBuilder r2 = new java.lang.ProcessBuilder // Catch: java.lang.Throwable -> L88 java.lang.Exception -> L8dr5 = 2java.lang.String[] r5 = new java.lang.String[r5] // Catch: java.lang.Throwable -> L88 java.lang.Exception -> L8dr6 = 0java.lang.String r7 = "getprop"r5[r6] = r7 // Catch: java.lang.Throwable -> L88 java.lang.Exception -> L8dr6 = 1java.lang.String r7 = "ro.secure"r5[r6] = r7 // Catch: java.lang.Throwable -> L88 java.lang.Exception -> L8dr2.<init>(r5) // Catch: java.lang.Throwable -> L88 java.lang.Exception -> L8dr5 = 1r2.redirectErrorStream(r5) // Catch: java.lang.Throwable -> L88 java.lang.Exception -> L8djava.lang.Process r5 = r2.start() // Catch: java.lang.Throwable -> L88 java.lang.Exception -> L8djava.io.BufferedReader r2 = new java.io.BufferedReader // Catch: java.lang.Throwable -> L88 java.lang.Exception -> L8djava.io.InputStreamReader r6 = new java.io.InputStreamReader // Catch: java.lang.Throwable -> L88 java.lang.Exception -> L8djava.io.InputStream r5 = r5.getInputStream() // Catch: java.lang.Throwable -> L88 java.lang.Exception -> L8dr6.<init>(r5) // Catch: java.lang.Throwable -> L88 java.lang.Exception -> L8dr2.<init>(r6) // Catch: java.lang.Throwable -> L88 java.lang.Exception -> L8djava.lang.String r3 = r2.readLine() // Catch: java.lang.Throwable -> L8a java.lang.Exception -> L8fif (r3 == 0) goto L92java.lang.String r5 = "0"boolean r3 = r3.equals(r5) // Catch: java.lang.Throwable -> L8a java.lang.Exception -> L8fif (r3 == 0) goto L92L74:com.SecShell.SecShell.g.a(r2)L77:return r0L78:r0 = move-exceptionr3 = r2L7a:r0.printStackTrace() // Catch: java.lang.Throwable -> L88com.SecShell.SecShell.g.a(r3)r0 = r4goto L77L82:r0 = move-exceptionr3 = r2L84:com.SecShell.SecShell.g.a(r3)throw r0L88:r0 = move-exceptiongoto L84L8a:r0 = move-exceptionr3 = r2goto L84L8d:r0 = move-exceptiongoto L7aL8f:r0 = move-exceptionr3 = r2goto L7aL92:r0 = r1goto L74L94:r0 = r1r2 = r3goto L74L97:r1 = r4goto L3c*/throw new UnsupportedOperationException("Method not decompiled: com.SecShell.SecShell.e.d():boolean");}public boolean e() {BufferedReader bufferedReader;BufferedReader bufferedReader2 = null;try {ProcessBuilder processBuilder = new ProcessBuilder("mount");processBuilder.redirectErrorStream(true);Process start = processBuilder.start();bufferedReader = new BufferedReader(new InputStreamReader(start.getInputStream()));boolean z = false;while (true) {try {String readLine = bufferedReader.readLine();if (readLine == null) {start.waitFor();g.a(bufferedReader);return z;}String[] split = readLine.split(" ");if (split.length >= 4) {String str = split[1];String str2 = split[3];for (String str3 : a.e) {if (str.equalsIgnoreCase(str3)) {String[] split2 = str2.split(",");int length = split2.length;int i = 0;while (true) {if (i >= length) {break;} else if (split2[i].equalsIgnoreCase("rw")) {z = true;break;} else {i++;}}}}}} catch (Exception e) {bufferedReader2 = bufferedReader;g.a(bufferedReader2);return false;} catch (Throwable th) {th = th;g.a(bufferedReader);throw th;}}} catch (Exception e2) {} catch (Throwable th2) {th = th2;bufferedReader = null;}}public boolean f() {BufferedReader bufferedReader;Process start;BufferedReader bufferedReader2;try {ProcessBuilder processBuilder = new ProcessBuilder("which", "su");processBuilder.redirectErrorStream(false);start = processBuilder.start();bufferedReader2 = new BufferedReader(new InputStreamReader(start.getInputStream()));} catch (Throwable th) {bufferedReader = null;}try {String readLine = bufferedReader2.readLine();start.waitFor();g.a(bufferedReader2);if (readLine != null) {if (readLine.endsWith("su")) {return true;}}return false;} catch (Throwable th2) {bufferedReader = bufferedReader2;if (bufferedReader != null) {g.a(bufferedReader);}return false;}}public boolean g() {return true;}public boolean h() {if (g()) {String[] strArr = new String[a.d.length];for (int i = 0; i < strArr.length; i++) {strArr[i] = a.d[i] + "su";}return c.a(strArr) > 0;}return false;}
}
f
/* loaded from: classes.dex */
class f extends PathClassLoader {private final ClassLoader a;public f(String str, ClassLoader classLoader) {super(str, classLoader.getParent());this.a = classLoader;}@Override // dalvik.system.BaseDexClassLoader, java.lang.ClassLoaderpublic Class findClass(String str) throws ClassNotFoundException {return (str == null || !str.equals(Helper.class.getName())) ? super.findClass(str) : this.a.loadClass(str);}
}
g
/* loaded from: classes.dex */
public class g {public static void a(Closeable closeable) {if (closeable != null) {try {closeable.close();} catch (Exception e) {}}}
}
乐谷加固样本特征(ELF区段加密和案例)
主要看assets文件夹和lib文件夹
so文件
lib-shell.so