共计 1165 个字符,预计需要花费 3 分钟才能阅读完成。
前两篇文章分析该 APP 的抓包、的逆向:
启 xin 宝 app 的 token 算法破解——抓包分析篇(一)
启 xin 宝 app 的 token 算法破解——逆向篇(二)
本篇就将对 token 静态分析,其实很简单就可以搞定那种。通过 idea 的全局搜索,直接搜索 "token"
直接找到 token 在哪里,上图。
找到了,进去看看,这是 MessageUtil
类里面,可以看下 MessageUtil
的具体方法:
具体代码就不贴了,分析到这里发现使用 ndk,也就是 c 编译之后的 so 文件,这就有点难办了,先不管这个,继续分析下。static {System.loadLibrary("encrypt-lib");
}
在该类里面有这个 return b.a(str);
方法,该方法是具体的算法分析。
/* renamed from: a reason: collision with root package name */
public static String f1288a = "CryptoTool_KEY";
public static String b = "CryptoTool_IV";
public static String c = MessageUtil.getKey();
public static String d = MessageUtil.getIV();
private static final String e = "AES/CBC/PKCS5Padding";
private static byte[] f = a.a(c);
private static SecretKeySpec g = new SecretKeySpec({}, "AES");
private static Cipher h;
public static String a(String str) {
try {if (h == null) {f = a.a(c);
g = new SecretKeySpec(f, "AES");
h = Cipher.getInstance(e);
h.init(1, g, new IvParameterSpec(a.a(d)));
}
byte[] bytes = str.getBytes("UTF-8");
byte[] bArr = new byte[h.getOutputSize(bytes.length)];
h.doFinal(bArr, h.update(bytes, 0, bytes.length, bArr, 0));
return Base64.encodeToString(bArr, 2);
} catch (Exception e2) {e2.printStackTrace();
return null;
}
}
看到该 token 使用的是 AES 进行加密,具体的秘钥和偏移则在 encrypt-lib 里面。
如何能拿到秘钥和偏移呢?这里可以借助 frida 和 xposed 的 hook 进行提取,下一篇进行 frida 的 hook 提取。
正文完