V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Intangiblew
V2EX  ›  Java

从设置安装包里的 Dex 找出了一串代码,能不能告诉我它写了什么?(代码已转成 Java )

  •  
  •   Intangiblew · 2020-03-07 16:56:57 +08:00 via Android · 1843 次点击
    这是一个创建于 1523 天前的主题,其中的信息可能已经有所发展或是发生改变。
    package com.android.settings;

    import android.content.Context;
    import android.content.Intent;
    import android.os.Build;
    import android.os.SystemProperties;
    import android.provider.Settings;
    import android.util.Log;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Calendar;

    public class DevelopmentUtils {
    private static final String MD5_ALGORITHM = "md5";
    private static final String OKAY_DEFAULT = "@okjiaoyu.cn";
    private static final String TAG = "DevelopmentUtils";
    private static MessageDigest md5;

    public DevelopmentUtils() {
    }

    static {
    try {
    md5 = MessageDigest.getInstance("md5");
    } catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
    }
    }

    public static String getEnterDevPassword() {
    String md5Result = encrypt(getVerificationMsg());
    return md5Result.substring(md5Result.length() - 6, md5Result.length());
    }

    private static String encrypt(String str) {
    return encryptMD5ReturnEvenNumber(encryptMD5ReturnOddNumber(str));
    }

    public static String encryptMD5ReturnOddNumber(String plainText) {
    String result;
    byte[] cipherData = md5.digest(plainText.getBytes());
    StringBuilder oddNumber = new StringBuilder();
    for (byte cipher : cipherData) {
    String toHexStr = Integer.toHexString(cipher & 255);
    if (toHexStr.length() == 1) {
    result = "0" + toHexStr;
    } else {
    result = toHexStr;
    }
    oddNumber.append(result.charAt(0));
    }
    return oddNumber.toString();
    }

    public static String encryptMD5ReturnEvenNumber(String plainText) {
    String result;
    byte[] cipherData = md5.digest(plainText.getBytes());
    StringBuilder oddNumber = new StringBuilder();
    for (byte cipher : cipherData) {
    String toHexStr = Integer.toHexString(cipher & 255);
    if (toHexStr.length() == 1) {
    result = "0" + toHexStr;
    } else {
    result = toHexStr;
    }
    oddNumber.append(result.charAt(1));
    }
    return oddNumber.toString();
    }

    private static String dynamicStr(int month, int day) {
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append(String.valueOf(month)).append("month").append("-").append(String.valueOf(day)).append("day");
    return stringBuilder.toString();
    }

    public static String encryptMD5(String plainText) {
    byte[] cipherData = md5.digest(plainText.getBytes());
    StringBuilder builder = new StringBuilder();
    for (byte cipher : cipherData) {
    String toHexStr = Integer.toHexString(cipher & 255);
    if (toHexStr.length() == 1) {
    toHexStr = "0" + toHexStr;
    }
    builder.append(toHexStr);
    }
    return builder.toString();
    }

    public static String getVerificationMsg() {
    String sequenceNumber = Build.SERIAL;
    Calendar c = Calendar.getInstance();
    int year = c.get(1);
    int month = c.get(2) + 1;
    int day = c.get(5);
    StringBuilder stringBuilder = new StringBuilder();
    stringBuilder.append(sequenceNumber).append(String.valueOf(year)).append(String.valueOf(month)).append(String.valueOf(day)).append("@okjiaoyu.cn").append(dynamicStr(month, day));
    return stringBuilder.toString();
    }

    public static boolean isEnterDevelpment(Context context) {
    boolean showDev = context.getSharedPreferences("development", 0).getBoolean("show", Build.TYPE.equals("eng"));
    Log.d("DevelopmentUtils", "isEnterDevelpment showDev=" + showDev);
    return showDev;
    }

    public static void exitDevelpment(Context context) {
    context.startService(new Intent(context, CheckService.class));
    Settings.Global.putInt(context.getContentResolver(), "adb_enabled", 0);
    Settings.System.putInt(context.getContentResolver(), "usb_storage_enable", 0);
    Settings.System.putInt(context.getContentResolver(), "xdf_apk_install_enable", 0);
    Settings.System.putInt(context.getContentResolver(), "net_white_list_enable", 1);
    Settings.System.putInt(context.getContentResolver(), "launcher_white_list_enable", 1);
    Settings.Secure.putInt(context.getContentResolver(), "bugreport_in_power_menu", 0);
    Settings.Global.putInt(context.getContentResolver(), "stay_on_while_plugged_in", 0);
    Settings.Secure.putInt(context.getContentResolver(), "bluetooth_hci_log", 0);
    Utils.setOemUnlockEnabled(context, false);
    Settings.Secure.putInt(context.getContentResolver(), "mock_location", 0);
    Settings.System.putInt(context.getContentResolver(), "sd_card_enable", 0);
    SystemProperties.set("persist.sys.sdcard_enable", "0");
    context.getSharedPreferences("development", 0).edit().putBoolean("show", false).apply();
    }
    }
    3 条回复    2020-03-07 18:42:48 +08:00
    yulihao
        1
    yulihao  
       2020-03-07 17:05:14 +08:00
    说实话我第一眼看到以为是 C#
    不会,留给下一位,告辞
    asionbo
        2
    asionbo  
       2020-03-07 18:36:37 +08:00 via Android
    写了一些 android 工具类😀,进入开发模式的密码加解密
    Intangiblew
        3
    Intangiblew  
    OP
       2020-03-07 18:42:48 +08:00 via Android
    @asionbo 能不能说说密码是怎么设置的?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1111 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:29 · PVG 03:29 · LAX 12:29 · JFK 15:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.