吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11880|回复: 18
收起左侧

[Android 转帖] 浅谈android完整性检测

[复制链接]
qtfreet00 发表于 2015-8-8 11:29
本帖最后由 世事繁华皆成空 于 2015-8-8 11:33 编辑

转自:http://www.9hao.info/pages/2014/ ... -zheng-xing-jian-ce
常见android完整性检测
[1] 检测签名
[2] 校验classes.dex
[3] 检验整个apk(这种比较少见)

验证哪方面的检测

  先直接对apk进行签名,然后安装运行,如果运行出错那么可以推测有签名检测;如果签名没问题,那反编译再回编译安装运行出问题,那么说明有校验classes.dex校验。

找到校验的地方
[1] 针对签名 : 可以搜索getPackageInfo 、PackageManager、 Signature、signatures、签名信息RSA文件。
[2] 针对classes.dex, 搜索classes.dex,解压缩ZipEntry,资源文件读取也可以注意下.(还有一些,暂时不记得了)。
[3] 算法 md5,hash。
[4] 退出函数、错误提示等。搜索这些特征函数和字符串,找到校验的地方。

突破校验

1 爆破

如果只是本地校验,可以找到校验函数后修改调转;如果是网络验证,直接爆破容易失效。

2 文件重定向 我们先看看两个常见的检测代码(摘自《Android安全与逆向分析》 防止重编译小结)
签名获取:

    public int getSignature(String packageName) {              
PackageManager pm = this.getPackageManager();        
PackageInfo pi = null;        
int sig = 0;        
try {           
pi = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);           
Signature[] s = pi.signatures;           
sig = s[0].hashCode();         
} catch (Exception e1)
{            
sig = 0;            e1.printStackTrace();        }      
return sig;    }

签名重定向: pi = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
getPackageInfo hook掉 获取到原始的pi信息 (网上说如果动态加载的.是没法hook住的??,没验证,不可能把 00)

classes.dex校验:

    private boolean checkCRC() {        boolean beModified = false;        long crc = Long.parseLong(getString(R.string.crc));        ZipFile zf;        try {            zf = new ZipFile(getApplicationContext().getPackageCodePath());            ZipEntry ze = zf.getEntry("classes.dex");            Log.d("com.droider.checkcrc", String.valueOf(ze.getCrc()));            if (ze.getCrc() == crc) {                beModified = true;            }         } catch (IOException e) {            e.printStackTrace();            beModified = false;        }        return beModified;    }

dex重定向:
zf = new ZipFile(getApplicationContext().getPackageCodePath());
hook ZipFile定向到原始的apk.

如果你能搜索到明文classes.dex信息,可以修改明文字符串来重定向,参考帖子:
http://www.kanxue.com/bbs/showthread.php?t=190711

你可以直接修改系统,把系统的签名校验给patch了(参考:http://www.kanxue.com/bbs/showthread.php?t=190876)

       public void initZygote(StartupParam startupParam) throws Throwable {               XposedHelpers.findAndHookMethod("java.security.Signature",null,"verify", byte[].class,new XC_MethodHook(){             protected void afterHookedMethod(MethodHookParam param) throws Throwable {               XposedBridge.log("disabled verifysignature......");               param.setResult(Boolean.TRUE);          }                 });


ps:这样有写局限,别人要装你修改的apk,需要装个xposed,当然自己也可以实现一个hook用于文件重定向,还有就是给系统带来风险.

3 安装文件替换
程序安装完成,apk文件将保存在/data/app(名字一般为:包名-1.apk或包名-2.apk)、系统程序apk文件保存在/system/app

root@android:/ # ls -l /data/app |busybox grep com.citicbank.cyberpay.uils -l /data/app |busybox grep com.citicbank.cyberpay.ui-rw-r--r-- system   system    7892655 2014-08-24 18:51 com.citicbank.cyberpay.ui-2.apk

classes.dex文件保存在/data/dalvik-cache,供dalvik执行,命名方式data@app@包名-数字-apk@classes.dex

255|root@android:/data/dalvik-cache # ls -l /data/dalvik-cache|busybox grep com.citicbank.cyberpay.uiache|busybox grep com.citicbank.cyberpay.ui                                   <-rw-r--r-- system   u0_a66    4974920 2014-08-24 19:27 data@app@com.citicbank.cyberpay.ui-2.apk@classes.dex

android系统在安装的时候校验签名,安装之后不校验, 这样我们就可以替换安装文件来绕过检测的目的 ^^.
把修改apk的签名替换成原本的apk的签名,然后在替换系统里面的apk和dex.

adb push E:\测试\zhifu_sign.apk /data/dalvik-cache/data@app@com.citicbank.cyberpay.ui-2.apk@classes.dex4160 KB/s (7902332 bytes in 1.854s)(ps: apk和dex都可以)Desktop>adb push E:\测试\zhifu_sign.apk /data/app/com.citicbank.cyberpay.ui-2.apk3235 KB/s (7902332 bytes in 2.385s)

写个脚本,杠杠的 00.

----------------------------------------------------分割线-------------------------------------------

但是呢,理想很丰满,现实很骨感------
签名还能怎么读 ?
特征字符串和特征函数有这么容易搜索到?
还有个apktool指纹 ^^

免费评分

参与人数 4热心值 +4 收起 理由
统列 + 1 dex校验求重定向详细教程
悼文吟诵 + 1 买糖买糖
本尊至高无上 + 1 鼓励转贴优秀软件安全工具和文档!
7535668 + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| qtfreet00 发表于 2015-8-9 11:30
smile1110 发表于 2015-8-8 13:00
俺觉得如何检查 签名 最简单就是修改为更高版本号以后进行模拟器重新安装 若是能安装覆盖那就是用的默认签 ...

不用,把apk解包。原封不动回包,如果不能正常运行就是有验证,然后可以分别确定是签名验证还是dex验证
smile1110 发表于 2015-8-8 13:00
俺觉得如何检查 签名 最简单就是修改为更高版本号以后进行模拟器重新安装 若是能安装覆盖那就是用的默认签名 若是不能那就是没有 不知道说的对不对 俺也刚学
7535668 发表于 2015-8-8 11:36
本帖最后由 7535668 于 2015-8-8 11:37 编辑

沙发是我的吗?
嘿嘿,关注楼主好多年了,终于找到一个坐沙发的机会了。
只想问问楼主:你饭吃了吗?

2217936322 发表于 2015-8-8 11:57
老大的二楼我要了!
就爱玩玩 发表于 2015-8-8 11:59
我不是小三
 楼主| qtfreet00 发表于 2015-8-8 12:06
7535668 发表于 2015-8-8 11:36
沙发是我的吗?
嘿嘿,关注楼主好多年了,终于找到一个坐沙发的机会了。
只想问问楼主:你饭吃了吗?

刚吃了才回来

免费评分

参与人数 1热心值 +1 收起 理由
本尊至高无上 + 1 热心回复!

查看全部评分

w1149857077 发表于 2015-8-8 12:14 来自手机
谢谢楼主分享,好厉害的样子,虽然看不懂
吸引力9933 发表于 2015-8-8 12:32 来自手机
楼主威武,顶一定
本尊至高无上 发表于 2015-8-8 12:55
学习了!!
UUY 发表于 2015-8-8 15:15
好腻害,赞一个
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表