`
sin90lzc
  • 浏览: 157410 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于Android软件破解的经验总结

 
阅读更多
android软件破解的工具:
smali.jar——google官方提供,主要作用是把smali文件打包成class.dex文件
baksmali.jar——google官方提供,主要作用是把*.odex文件反编译为smali文件
apktool.jar——第三方提供?用于解析*.apk文件,生成smali文件和解析资源文件
signapk.jar——apk签名工具
ddms——ADT中的一个调试工具


破解工具的使用方法:
http://sin90lzc.iteye.com/blog/1198173


除了这些破解工具之外,还需要对smali语法有一定的了解。下面的网址对smali的语法有详细的说明:
http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html


最后,最好对Android的应用开发有一定的了解,至少对Android的四大组件有深刻的认识:Activity,Service,ContentProvider,BroadcastReceiver


Android应用程序在某些机器上不能运行、崩溃的原因不外乎以下几点:
原因一:该应用程序需要依赖于生产厂商的框架(像三星,它对android的framework做过大量的修改)
错误提示:找不到field,找不到对应的方法,找不到相应的类
解决途径:
1.在smali中尝试屏蔽掉相应的field,method,或类的调用,然后进行大量测试,确保不影响正常使用
2.反编译framework,找到缺少的field,method,类的相应smali文件,根据smali文件编写java源码。(当smali文件比较小的时候,这个方法才可行,否则尽量避免用这种方法)
3.实在无招的情况下,只能把第三方的framework的smali文件复制到自己的framework里面(非常槽糕的方法)。
4.对于应用程序需要依赖第三方低层的功能实现时,而我们的低层却没有这样的功能(比如说视频通话等),此时可以使用上面的方法一解决,也可以参考技术四。


原因二:资源文件不存在,像color,drawable,string等等的资源
错误提示:资源文件找不到
解决途径:
在技巧一中有详细说明。


原因三:应用程序需要一些函数库的支持(在目录/system/lib中缺少相应的函数库)。
错误提示:一般都会抛出UnSatisfiedException异常,后面紧跟所缺函数库的库名。
解决途径:
1.在第三方的函数库中找到对应的so文件,然后复制到自己的函数库中。
2.如果函数库与函数库之间有着各种耦合的时候,方法一可能就会不适用了(看运气呗)。这时候就只能反编译so文件了(这个是C/C++的反编译的应用了,需要再学习)


原因四:应用程序没有相应的权限
错误提示:nopermission
解决途径:
1.在AndroidMenifest.xml文件中添加<user-permision />添加相应的权限


原因五:由于应用程序本身的一些安全机制或条件判断影响程序的表现
解决途径:
1.反编译成smali文件,使用技巧三的方法跟踪程序的运行,耐心地分析程序的逻辑,找到可疑smali代码,屏蔽或修改代码。


原因六:数据库的结构不一样
错误提示:缺少某个字段或类型不匹配
场情:比如android的音乐播放器与三星的音乐播放器,它们的数据库结构由MediaProvider.apk这个包提供。然而两者在MediaProvider.apk中关于数据库结构的定义是不一样的,三星音乐播放器需要更多的字段去保存信息。
解决途径:
1.拿上面场情为例,反编译MediaProvider.apk,从smali文件中找到组件ContentProvider的定义(smali文件),在该smali文件中找到关于SQL生成表结构的字符串(如:create table...),修改该SQL语句来适合三星音乐播放器的需要,然后重新打包回apk文件。


原因七:应用程序需要引用第三方提供商自定义的框架(比如,三星的/system/framework目录下有twframework.jar、twframework-res.apk,这个就是三星的UI框架)

错误提示:
解决途径:
1.屏蔽AndroidMenifest.xml文件中<uses-library android:name="sec_feature" />的代码,一般这样改动是不可行的。
2.在/system/etc/permission目录下添加库的声明,如添加touchwiz.xml文件,文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<library name="touchwiz" file="/system/framework/twframework.jar"/>
</permissions>
最后,还需要把三星的twframework.jar、twframework-res.apk复制到/system/framework目录下

反编译或破解的技巧总结:
一、对无应用程序源码的情况下,对资源文件的增删改。
概述:在无程序源码,不重新编译的情况下,删除或修改资源文件都是非常简单的一件事情,网上也有很多的文章提到过。但是网上却找不到在不重新编译的情况下添加资源文件的方法。
在不重新编译的情况下添加资源文件的步骤:
1.按正常的应用程序开发添加资源。比如,要添加一个string资源,在values/strings.xml上加上:
<string name="newstring">content</string>


2.一个编译后的apk会在values目录下多生成了一个public.xml文件,这个文件记录了每个资源的引用编号。以添加string资源为例,在public.xml文件中找到<public type="string" ...>中最后一个元素,在这个元素后添加
<public type="string" name="newstring" id="0x7f0700a0" /><!--此时id就是string资源newstring的引用编号,注意该id应该是public.xml文件中是唯一值-->


3.修改smali文件,使用新增的资源
invoke-virtual {p0}, Lcom/sini/SfsdfsActivity;->getResources()Landroid/content/res/Resources;


move-result-object v0


const v1, 0x7f0700a0


invoke-virtual {v0, v1}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String;


二、编写smali文件
概述:自己一手一脚去写smali文件是件超级困难的事情,如何快速地得到smali代码呢?
技巧:使用eclipse开发工具,新建一个Android项目,用正常的开发方式写一段java代码(这个代码就是你想在smali中完成的东西)。使用eclipse的run->Android Application选项 生成apk文件,再把apk文件反编译,找到需要的smali代码,然后复制这段代码到需要的地方。NOTIC:复制的时候需要注意smali的变量v0,v1...的正确性。


三、跟踪程序运行
概述:没源码=寸步难行!为了能跟踪无源码的apk程序的运行,只能辛苦地修改smali添加跟踪信息了。值得庆幸的是,android本身自带有方便的日志API(Log.i()\Log.w()...);
技巧:按技巧二的方法得到Log.i()的smali代码,然后把这段代码插入到你想跟踪信息的地方。


四、只修改smali中影响UI的代码,保留功能代码(适用于必须得把smali写回java源码的情况)
概述:这里最好的例子就是破解三星的通话界面。三星的通话界面程序Phone.apk中包含了视频通话的功能,这个功能又需要依赖三星的一些低层实现。而我们的系统中没有视频通话的功能,也没有相应的低层实现。但Phone.apk的主要功能是打电话,而这个功能android本身就自带的。也就是说三星的Phone.apk与android的Phone.apk的核心功能是一样的,只是UI不太一样而已。此时应该只修改smali中的影响UI的代码,屏蔽掉
smali中对视频通话的调用。
技巧:找到程序中影响UI的Actvity,然后根据smali文件的内容,写java源码
分享到:
评论

相关推荐

    Android 应用软件测试 心得 关注点

    这是敝人在Android系统下基于所负责的实际程序初调研的测试经验,希望对新入职测试人员有所帮助,也供大家交流

    使用Android 系统测量软件开发技术 [武安状 主编] 2014年版

    Android是美国Google公司开发的基于Linux平台的、开源的智能手机操作系统,作者以AndroidSDK+Eclipse IDE+Windows7旗舰版为平台,总结了安卓开发经验与技术。《实用Android系统测量软件开发技术》共10章,系统地介绍...

    Android实训报告基于Android游戏开发.docx

    目前基于Android的移动终端上的软件应用开发很火热,Android平台的开发已越来越强大。 Android是一种以Linux为基础的开放源码操作系统,主要使用于便携设备。Android操作系统最初由AndyRubin创办,最初只支持手机。...

    软件开发经验(apk)

    学习书是Android客户端目前最全面的免费离线学习资料,包括各种软件知识的学习经验,主要内容包括: 1、C语言的学习经验 2、Java语言的学习经验 3、Android语言的学习经验 4、C++的学习经验 5、C#的学习经验 6...

    Android DevCamp幻灯片分享:和Android源代码一起工作 | 海豚浏览器 胡继堂

    资深程序员多年代码实践总结:《和Android源代码一起工作》 | Android DevCamp 话题简介:本演讲将结合讲师多年的代码实践经验,主要介绍Android源代码以及相关内容,让应用开发者了解到如何利用Android源代码来...

    深入理解Android:卷I--详细书签版

     邓凡平,资深Android开发工程师,热衷于Android源代码的研究,对Android的架构设计和实现原理有非常深刻的认识和理解,应用开发经验也十分丰富。目前就职于国内一家领先的 Android企业,负责Framework的开发和...

    开发Google手机Android四步

    本人开发经验总结,启蒙开发Google手机Android四步走。适合于初级和中级手机应用软件开发员学习者。

    android手机APP测试用例

    android手机客户端APP测试用例、APP功能测试用例,可以按常规功能测试的用例模板,多年测试经验总结的模板

    用微课学·Android高级开发 电子资源

    本书是达内时代科技集团(以下简称达内集团)编程类课程新形态教材,是由达内集团诸多开发经验及授课经验...并总结近几年国家示范性高职院校软件技术专业教学改革经验及达内集团在IT培训行业十多年的经验编写而成的。

    竞赛资料源码-基于cocos2dx引擎的Android物理手游(for 齐鲁软件设计大赛).zip

    教育部认可的大学生竞赛备赛资料代码,源码,竞赛总结,所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通 全国电子设计大赛、全国大学生智能汽车竞赛、蓝桥杯、集成电路...

    Android studio 连接手机调试操作步骤

    最近正在研究AS在使用手机调试时遇到了一点问题始终找不到设备,在网上找了很多帖子说的都不太对路,下面根据我自己操作的实际经验,总结一下我的操作方法: 1、我假设你已经搞定了前面gradle和build(前面配置各种...

    安卓指纹原理及解锁流程详fingerprintd

    文档为个人学习经验总结,包含指纹框架,指纹原理,指纹软件解锁流程,附有详细解释。可做毕业设计或个人学习参考用。

    程序员面试什么最重要

    程序员面试一直是社区乐于讨论的热门话题。我自己从06年实习以来,先后经历了4家软件公司...我感觉现在到了对这个问题发表自己看法的时候,这篇文章是我站在面试官角度对于程序员面试问题的一个阶段性反思和经验总结。

    Android开发新手必须知道的10大严重错误

    本文总结了Android开发新手必须知道的10大严重错误。分享给大家供大家参考,具体如下: 作为过去10年广泛涉猎各热门平台的经验丰富手机应用开发商,我们觉得Android平台对新手开发者来说是最通俗易懂的平台。平价的...

    AndroidQ(10)分区存储完美适配方法

    最近时间在做AndroidQ的适配,截止到今天AndroidQ分区存储适配完成,期间出现很多坑,目前网上的帖子大部分都是概述变更内容,接下来的几篇帖子都是对分区存储实际经验代码总结,填坑经验,特此记录一下,也为大家...

    竞赛资料源码-智能盲杖 Android App 挑战杯 智慧城市 代码.zip

    教育部认可的大学生竞赛备赛资料代码,源码,竞赛总结,所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通 全国电子设计大赛、全国大学生智能汽车竞赛、蓝桥杯、集成电路...

    JAVA 五年的工作经验和学习笔记

    J2SE/J2ME/J2EE/JAVA代码优化/Flex(BlazeDS、PureMVC等技术)/LDAP/C++/Portal/即时通讯/数据建模/UML/UML设计工具(Rose、EA、PD等)/移动办公(Android、Symbian、Wap等技术)/项目管理(敏捷开发等)/软件架构...

    竞赛资料源码-挑战杯国奖项目 智能眼镜项目 Android APP 代码开源.zip

    教育部认可的大学生竞赛备赛资料代码,源码,竞赛总结,所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通 全国电子设计大赛、全国大学生智能汽车竞赛、蓝桥杯、集成电路...

    openjpeg:jpeg2000图像压缩算法在Android上应用

    近期老师要求将jpeg2000算法移植到安卓平台上,尝试了很长时间,在这里总结一下经验、 OpenJPEG是Universite catholique de Louvain, Belgium大学的通信和遥感试验室于2003年12月开发出来的。OpenJPEG作为完全用C...

Global site tag (gtag.js) - Google Analytics