很久以前开的blog,关于如何获取APP签名。不知道为啥要写这个了。
Android逆向-APP签名
生成JKS签名
Android studio 如何生成jks签名文件 - 简书 (jianshu.com)
打开AndroidStudio
Build-->Generate Signed APK-->APK
然后Key store path
选择Create New
然后设置好存储路径,密码也设置一下(偷懒写个123456)
Key
的别名就叫key
,密码一样简单。
然后剩下的Certificate
全填taardis
,Country Code
填11451。
反正创建成功后,就在选定路径下出现了jks
密钥文件。
APK签名
将APK魔改,重新打包后,需要重新签名。
参考:Android之通过 apksigner 对 apk 进行 手动签名_恋恋西风的博客-CSDN博客
1 | apksigner.bat sign --verbose --ks D:\Android\Keystore\taardis.jks --v1-signing-enabled false --v2-signing-enabled true --ks-key-alias key --ks-pass pass:123456 --key-pass pass:123456 --out D:\Android\Frida\gadget\bs.apk D:\Android\Frida\gadget\b.apk |
成功后提示:
1 | Signed |
获取APK签名
首先APK解包:
1 | apktool d <apk> |
然后在 META-INF
文件夹拿到 CERT.RSA
文件。之后:
1 | keytool -printcert -file CERT.RSA |
不过Keytool似乎是Java的工具,不管了现在用不上。
JEB/JADX
这种反编译器也能直接看到APK的签名信息。
MT APP签名检查及绕过
L-JINBIN/ApkSignatureKillerEx: 新版MT去签及对抗 (github.com)
从“去除签名验证”说起 - 腾讯云开发者社区-腾讯云 (tencent.com)
过签名校验(2) – MT 的 IO 重定向实践 - 『移动安全区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
MT提供的签名绕过方式能够实现对API和APK方式的绕过。但是对于SVC的则无能为力。
1 | String signatureExpected = "3bf8931788824c6a1f2c6f6ff80f6b21"; |
API检测
用PackageManager
直接获得签名。
1 | private byte[] signatureFromAPI() { |
APK检测
找到APP私有文件夹下的base.apk
,然后得到签名
1 | private byte[] signatureFromAPK() { |
SVC检测
1 | private byte[] signatureFromSVC() { |
绕过
Java层的东西不多
1 | private static void killOpen(String packageName) { |
然后看Native层,实际上是XHook,用于替换libc函数。
mt_jni.c
实际上就做了个字符串替换,有意将原本要打开的APK替换成origin.apk
。
1 | const char *apkPath__; |
通过Hook open函数,可以把基于APK读取的签名方式给绕过。
下面提供一个绕过基于PackageManager的:
1 | private static void killPM(String packageName, String signatureData) { |
参考
Java Keytool 介绍 - 且行且码 - 博客园 (cnblogs.com)
获取Android应用签名的几种方式 - 简书 (jianshu.com)
Android studio 如何生成jks签名文件 - 简书 (jianshu.com)
apktool重新打包时报错_apktool 忽略错误信息__y4nnl2的博客-CSDN博客
Android之通过 apksigner 对 apk 进行 手动签名_恋恋西风的博客-CSDN博客
apksigner | Android 开发者 | Android Developers (google.cn)
- 本文作者: Taardis
- 本文链接: https://taardisaa.github.io/2023/09/08/Android逆向-APP签名/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!