如何测试android 如何生成apkapk

浅谈android完整性检测 - 『移动安全区』
- 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|
后使用快捷导航没有帐号?
只需一步,快速开始
请完成以下验证码
请完成以下验证码
查看: 4795|回复: 18
浅谈android完整性检测
阅读权限100
本帖最后由 世事繁华皆成空 于
11:33 编辑
转自:常见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 =& && &&&int sig = 0;& && &&&try {& && && &&& pi = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);& && && &&& Signature[] s = pi.& && && &&& sig = s[0].hashCode();& && && & } catch (Exception e1) {& && && && &sig = 0;& && && && &e1.printStackTrace();& && &&&}& && & & & }
签名重定向: pi = pm.getPackageInfo(packageName, PackageManager.GET_SIGNATURES);
getPackageInfo hook掉 获取到原始的pi信息 (网上说如果动态加载的.是没法hook住的??,没验证,不可能把 00)classes.dex校验:& & private boolean checkCRC() {& && &&&boolean beModified =& && &&&long crc = Long.parseLong(getString(R.string.crc));& && &&&ZipF& && &&&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 =& && && && &}& && && &} catch (IOException e) {& && && && &e.printStackTrace();& && && && &beModified =& && &&&}& && &&&return beM& & }
dex重定向:
zf = new ZipFile(getApplicationContext().getPackageCodePath());
hook ZipFile定向到原始的apk.如果你能搜索到明文classes.dex信息,可以修改明文字符串来重定向,参考帖子:
你可以直接修改系统,把系统的签名校验给patch了(参考:)& && & 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/approot@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& & 4-08-24 18:51 com.citicbank.cyberpay.ui-2.apk
classes.dex文件保存在/data/dalvik-cache,供dalvik执行,命名方式data@app@包名-数字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& & 4-08-24 19:27 data@@classes.dex
android系统在安装的时候校验签名,安装之后不校验, 这样我们就可以替换安装文件来绕过检测的目的 ^^.
把修改apk的签名替换成原本的apk的签名,然后在替换系统里面的apk和dex.adb push E:\测试\zhifu_sign.apk /data/dalvik-cache/data@@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指纹 ^^
dex校验求重定向详细教程
鼓励转贴优秀软件安全工具和文档!
鼓励转贴优秀软件安全工具和文档!
鼓励转贴优秀软件安全工具和文档!
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限100
俺觉得如何检查 签名 最简单就是修改为更高版本号以后进行模拟器重新安装 若是能安装覆盖那就是用的默认签 ...
不用,把apk解包。原封不动回包,如果不能正常运行就是有验证,然后可以分别确定是签名验证还是dex验证
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限30
俺觉得如何检查 签名 最简单就是修改为更高版本号以后进行模拟器重新安装 若是能安装覆盖那就是用的默认签名 若是不能那就是没有 不知道说的对不对 俺也刚学
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限20
本帖最后由 7535668 于
11:37 编辑
沙发是我的吗?
嘿嘿,关注楼主好多年了,终于找到一个坐沙发的机会了。
只想问问楼主:你饭吃了吗?
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限30
老大的二楼我要了!
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限35
我不是小三
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限100
沙发是我的吗?
嘿嘿,关注楼主好多年了,终于找到一个坐沙发的机会了。
只想问问楼主:你饭吃了吗?
刚吃了才回来
热心回复!
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
谢谢楼主分享,好厉害的样子,虽然看不懂
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限25
楼主威武,顶一定
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限30
学习了!!
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限25
好腻害,赞一个
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
免责声明:吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
( 京ICP备号 | 京公网安备 87号 )
Powered by Discuz!
Comsenz Inc.Android简单判断某个APK是否已经安装的方法
作者:Hecker385
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Android简单判断某个APK是否已经安装的方法,通过针对应用程序包名的读取及判断获取安装信息,需要的朋友可以参考下
本文实例讲述了Android简单判断某个APK是否已经安装的方法。分享给大家供大家参考,具体如下:
privateboolean isAppInstalled(String uri){
PackageManager pm = getPackageManager();
boolean installed =
pm.getPackageInfo(uri,PackageManager.GET_ACTIVITIES);
installed =
}catch(PackageManager.NameNotFoundException e){
installed =
只需要使用该方法检查你需要进行判断的应用程序包名即可:
if(isAppInstalled("com.yourpackage.package")){
//app installed
//app not installed
更多关于Android相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》、《》、《》及《》
希望本文所述对大家Android程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具使用DDMS测试安卓手机APP的性能(android)
我的图书馆
使用DDMS测试安卓手机APP的性能(android)
安装/配置:
通过另外一个工具也可以测试手机客户端APP的性能,这就是android开发包中的DDMS工具(Dalvik Debug Monitor Service),先来说一下android开发包的安装:
1、 首先安装JDK,1.5以上的版本
2、 在安装完JDK 后,就需要下载及安装Android SDK,即: android-sdk-windows,压缩包大约有551M左右
3、 解压缩android-sdk-windows,放在C盘的根目录下,配置系统变量path 的值为:C: \android-sdk-windows\tools
1、 可以在运行中进入ddms
2、也可以在C: \android-sdk-windows\tools目录下启动ddms.bat
1、 使用数据线连接安卓系统的手机,确认手机是处于“USB调试”模式
1)在手机上按下“Menu”键,在弹出的菜单中选择“Setting(设置)”;&& 2)选择“应用程序”;&&& 3)在此界面勾选“未知来源”,然后选择“开发”;&&& 4)勾选“USB调试”,“保持唤醒状态”;
2、 在ddms的左边框中会显示手机已经打开的应用程序(APP)进程,如果不显示,可以多连接几次,或者换个手机试试
前提是要打开我们要分析的手机客户端app程序(网上随便找的APK程序)
1. 点击选中想要监测的进程,比如system_process进程;&& 2. 点击选中Devices视图界面中最上方一排图标中的“Update Heap”图标;&&& 3. 点击Heap视图中的“Cause GC”按钮;&&& 4. 此时在Heap视图中就会看到当前选中的进程的内存使用量的详细情况。
如何才能知道我们的程序是否有内存泄漏的可能性呢。这里需要注意一个值:Heap视图中部有一个Type叫做data object,即数据对象,也就是我们的程序中大量存在的类类型的对象。在data object一行中有一列是“Total Size”,其值就是当前进程中所有Java数据对象的内存总量,一般情况下,这个值的大小决定了是否会有内存泄漏。可以这样判断:
a) 不断的操作当前应用,同时注意观察data object的Total Size值;
b) 正常情况下Total Size值都会稳定在一个有限的范围内,也就是说由于程序中的的代码良好,没有造成对象不被垃圾回收的情况,所以说虽然我们不断的操作会不断的生成很多对象,而在虚拟机不断的进行GC的过程中,这些对象都被回收了,内存占用量会会落到一个稳定的水平;
c) 反之如果代码中存在没有释放对象引用的情况,则data object的Total Size值在每次GC后不会有明显的回落,随着操作次数的增多Total Size的值会越来越大,直到到达一个上限后导致进程被kill掉。
d) 此处已system_process进程为例,在我的测试环境中system_process进程所占用的内存的data object的Total Size正常情况下会稳定在2.2~2.8之间,而当其值超过3.55后进程就会被kill。
TA的最新馆藏[转]&
喜欢该文的人也喜欢

我要回帖

更多关于 android 测试apk 的文章

 

随机推荐