1.大小;
2.APK文件的MD5;
3.dex、resxml、arsc文件也是不一样的,png/mp3/mp4/dat等是一致所有具有反编译过程的文件,重打包后,HASH都是变化的;
AndroidKiller对apk的反编译时,反编译的文件有resxml、classes.dex、arsc(string.xml/valus.xml)
png/mp3/mp4/dat等资源文件,是不参与反编译和编译过程。
4.签名校验
Android Killer 自带的签名:
签名文件:
使用Android Killer 工具对 apk 文件进行验证签名,就是用 androidkiller.keystore 文件对 apk 文件进行验证签名。
多了一个 META-INF 文件:
与正版 apk 文件的 META-INF 文件是不一样的。
(dex校验、AndroidManifest.xml校验、so/dll校验、APK包体的大小/MD5校验放在服务器)的一种方式:
1.删除APK包体内的META-INF,重新签名,安装运行,如果运行失败,就一定有签名校验;
META-INF 中的签名文件不一样,AndroidKiller 软件有自己的签名文件,app 作者有自己的签名文件。
可能还有APK的MD5校验/大小校验;
2.借助Xposed+核心破解,在保持APK中的META-INF不变的时候,修改dex,如果运行失败,那就是dex校验;
遇到签名校验的情况,搜索的关键词:
getPackageManager->getPackageInfo->signatures 就是签名信息
定制混淆字典
常规abcd等混淆方式对逆向的干扰程序并不是很大,所以需要一个变态的字典
比较变态的混淆
加花
当一个程序包被黑客反编译、篡改、重打包后,apk的签名信息一定是发生改变,利用这一特性,开发者可以对正在运行的程序包进行正盗版的校验。
Java获取签名信息
JNI反射获取签名信息
首先通过 sourceDir或getPackageCodePath来获取APK的安装路径,然后解析RSA的签名信息。
当一个程序包被黑客反编译、篡改、重打包后,不仅仅只有签名信息发生了改变,还有重新编译的classes.dex、xml、修改过的so/dll、apk的整体包等,这些都能成为判断包体是否经过修改的依据。
关键词
- nsourceDir
- ngetPackageCodePath
- ngetPackageResourcePath
遇到签名校验的情况,搜索的关键词:
getPackageManager->getPackageInfo->signatures 就是签名信息
sign签名信息校验
整体包MD5校验
classes.dex/so/dll/META-INF等文件校验。
某银行 apk:
复制 apk 文件,用 Bandzip 打开,删除签名文件:
使用 Android Killer 软件对它进行 apk 签名:
新生成的_sign.apk 文件发现无法安装到模拟器:
显示签名验证失败!
打开 Android Killer 查找【签名】:
双击进入,注释,不让它跳转,发现报错:
查看报错第一行:
找到这张图片 getcode.png,路径就在报错第二行:
删除原 getcode.png ,把下面 icon.png 复制重命名为 getcode.png
重新编译,成功:
先卸载前面安装的正版 apk 文件,再安装上面编译好的 apk 文件:
安装成功:
是不是太简单了,就改了一个跳转,就完成了,不要慌,下面我们从代码角度,细说一下这个签名:
首先进入 Java 代码环境:
搜索【签名】
代码可观性不是很好,我们使用 Jadx 搜索一下:
遇到签名校验的情况,搜索的关键词:
getPackageManager->getPackageInfo->signatures 就是签名信息
a 函数返回一个 MD5 值,选中,右键,查找用例:
双击,进入第一个,查看一下:
选中,右键,跳到声明:
new d 是一个线程,getString(R.string.signSafe),获取一个提示语,可以在【资源文件】-【ressoures.arsc】-【res】-【values】-【strings.xml】中找到 signSafe:
通过关键词,我们可以一步步挖掘代码的含义。后面对于签名我们还会分享几个案例,敬请期待吧!
原文始发于微信公众号(安全君呀):【Android(安卓)安全逆向05】某银行 | Android APP 去除自签名校验
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论