功能:反编译apk 降低权限及重新签名 场景:很多软件,申请了一些可能会导致付费(如,发短信,呼叫号码)或者泄漏隐私(如:读取通讯录)的权限,让人很不放心。比如:飞信、墨迹天气、iReader 等都在此列。为了让自己能放心使用,需要做一些破解工作,减少该应用程序的权限,限制其操作。 工具:apktool-install-windows-2.2_r01-3.tar.bz2
(https://www.sodocs.net/doc/5a16222317.html,/p/android-apktool/downloads/list )
工具:(JDK ) keytool.exe 生成签名的密钥库
工具:(JDK ) jarsigner.exe 用于对apk 做签名
工具:(可选)D:\android-sdk-windows\tools\zipalign.exe 对打包的应用程序进行优化,使得在运行时Android 与应用程序间的交互更加有效率。
操作:
1,反编译APK 文件 demo.apk 到 demo 目录 apktool.bat d demo.apk demo
2,修改。。。
2.1 减少权限:修改demo 目录 demoAndroidManifest.xml 文件,找到
https://www.sodocs.net/doc/5a16222317.html,/a/20101115/001156.htm 开发者不得不知的Android 权限说明) 1
2.2 去掉广告:如 Smart Monitor Pro_2.
3.16.apk
1 2 android:layout_width="fill_parent" 3 android:layout_height="wrap_content" 4 app:keywords="girl friends monitor women sex 5 adult gift electron wallpaper ring 6 shirt Android application game 7 sport football soccer world cup" 8 /> 改为 1 2 android:layout_width="wrap_content" 3 android:layout_height="wrap_content" 4 android:width="1dip" 5 android:height="1dip" app:keywords="" /> 2.3 去掉广告:如Hi-MSN.apk 1 2 android:layout_width="fill_parent" 3 android:layout_height="wrap_content" 4 android:layout_alignParentBottom="true" /> 改为: view source print? 1 2 android:layout_width="fill_parent" 3 android:layout_height="wrap_content" 4 android:layout_alignParentBottom="true" 5 android:width="1dip" 6 android:height="1dip" /> 3.编译成.apk文件 4.签名 程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 各种权限说明如下: android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问”properties”表在checkin数据库中,改值可以修改上传( Allows read/write access to the “properties” table in the checkin database, to change values that get upload ed) android.permission.ACCESS_COARSE_LOCATION 允许一个程序访问CellID或WiFi热点来获取粗略的位置(Allows an application to access coarse (e.g., Cell-ID, WiFi) location) android.permission.ACCESS_FINE_LOCATION 允许一个程序访问精良位置(如GPS) (Allows an application to access fine (e.g., GPS) location) android.permission.ACCESS_LOCATION_EXTRA_COMMANDS 允许应用程序访问额外的位置提供命令(Allows an application to access extra location provider commands) android.permission.ACCESS_MOCK_LOCA TION 允许程序创建模拟位置提供用于测试(Allows an application to create mock location providers for testing) android.permission.ACCESS_NETWORK_STA TE 允许程序访问有关GSM网络信息(Allows applications to access information about networks) android.permission.ACCESS_SURFACE_FLINGER 允许程序使用SurfaceFlinger底层特性(Allows an application to use SurfaceF linger’s low level features) android.permission.ACCESS_WIFI_STATE 允许程序访问Wi-Fi网络状态信息(Allows applications to access information about Wi-Fi networks) android.permission.ADD_SYSTEM_SERVICE 允许程序发布系统级服务(Allows an application to publish system-level services). android.permission.BA TTERY_STATS 允许程序更新手机电池统计信息(Allows an application to update the collected battery statistics) android.permission.BLUETOOTH 允许程序连接到已配对的蓝牙设备(Allows applications to connect to paired bluetooth devices) android.permission.BLUETOOTH_ADMIN 允许程序发现和配对蓝牙设备(Allows applications to discover and pair bluetooth devices) android.permission.BRICK 请求能够禁用设备(非常危险)(Required to be able to disable the device (very *erous!).) android.permission.BROADCAST_PACKAGE_REMOVED 允许程序广播一个提示消息在一个应用程序包已经移除后(Allows an application to broadcast a notification that an application package has been removed) android.permission.BROADCAST_STICKY 允许一个程序广播常用intents(Allows an application to broadcast sticky intents) android.permission.CALL_PHONE Android如何防止apk程序被反编译 作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。 Google似乎也发现了这个问题,从SDK2.3开始我们可以看到在android-sdk-windows\tools\下面多了一个proguard文件夹 proguard是一个java代码混淆的工具,通过proguard,别人即使反编译你的apk包,也只会看到一些让人很难看懂的代码,从而达到保护代码的作用。 下面具体说一说怎么样让SDK2.3下的proguard.cfg文件起作用,先来看看android-sdk- windows\tools\lib\proguard.cfg的内容: [html] -optimizationpasses 5n -dontusemixedcaseclassnamesn -dontskipnonpubliclibraryclassesn -dontpreverifyn -verbosen -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*n -keep public class * extends android.app.Activityn -keep public class * extends android.app.Applicationn -keep public class * extends android.app.Servicen -keep public class * extends android.content.BroadcastReceivern -keep public class * extends android.content.ContentProvidern -keep public class * extends android.app.backup.BackupAgentHelpern -keep public class * extends android.preference.Preferencen -keep public class com.android.vending.licensing.ILicensingServicen -keepclasseswithmembernames class * {n nnn native 我们在安装Android软件的时候,系统会提示该软件所需要的权限,相对于其他系统,android的权限非常多。我们在开发软件的时候,也需要声明相应的权限,比如希望软件能发短信,需要声明软件调用短信的权限,否则软件运行的时候就会报错。 Android的权限在AndroidManifest.xml文件里配置。AndroidManifest文件中有四个标签与permission有关,它们分别是 .去震动教程.时间居中教程,时间显示到秒且居中 在通知栏增加模拟时钟透明状态栏代码修改 字体颜色修改关于运营商图标修改 可以ctrl+F,按需搜索 一:去震动教程: 一、首先是配置编译和反编译环境,具体方法如下: 1、在电脑上下载安装JRE(https://www.sodocs.net/doc/5a16222317.html,/file/clif5w53)。其次下载好apk反编译工具 (apk反编译软件.rar(2.43 MB, 下载次数: 5756) ) 2、在系统环境变量Path里加入java.exe所在路径。 右键我的电脑--属性--高级系统--设置--环境变量--系统环境变量,里面的path变量项,值里面添加java的所在路径(例如“;C:\Program Files\Java\jre6\bin”) 3、将反编译软件解压出来,为了便于使用,最好放在C:\Windows目录下。 二、提取并反编译framework-res.apk文件 1、手机必须root,先用RE管理器将/system/framework文件夹下的文件framework-res.apk复制到/sdcard,然后复制到电脑(为了方便后面的操作,建议将文件放到电脑某个盘符的根目录下。例如:e:\framework-res.apk) 2、反编译framework-res.apk文件。具体方法运行cmd.exe(如图) 然后在出来的命令提示行中输入以下命令:apktool+空格d+空格+framework-res.apk路径+空格+反编译后文件存放路径,比如文件放入d盘根目录则命令为:apktool d d:\framework-res.apk d:\framework-res(如图)(此时反编译出来的文件放在d盘framework-res文件夹下) 三、修改去震动相关的xml文件 一般framework-res\res\values\arrays.xml就是我们要修改的对象。用xml编辑器(xml 编辑器.rar(345.03 KB, 下载次数: 3223) )打开这个文件。修改如图: Android permission 访问权限说明手册 tech.er 2011年2月12日 android平台上的权限许可分得很细,如果软件无法正常执行时,首先要检查是不是缺少相关的permission声明,以下就把permission 访问权限列举出来供大家参考。 程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 完整列表如下: android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问”properties”表在checkin数据库中,改值可以修改上传( Allows read/write access to the “properties” table in the checkin database, to change values that get uploaded) android.permission.ACCESS_COARSE_LOCATION 允许一个程序访问CellID或WiFi热点来获取粗略的位置(Allows an application to access coarse (e.g., Cell-ID, WiFi) location) android.permission.ACCESS_FINE_LOCATION 允许一个程序访问精良位置(如GPS) (Allows an application to access fine (e.g., GPS) location) android.permission.ACCESS_LOCATION_EXTRA_COMMANDS 允许应用程序访问额外的位置提供命令(Allows an application to access extra location provider commands) android.permission.ACCESS_MOCK_LOCATION 允许程序创建模拟位置提供用于测试(Allows an application to create mock location providers for testing) android.permission.ACCESS_NETWORK_STATE 允许程序访问有关GSM网络信息(Allows applications to access information about networks) android.permission.ACCESS_SURFACE_FLINGER 允许程序使用SurfaceFlinger底层特性(Allows an application to use SurfaceFlinger’s low level features) android.permission.ACCESS_WIFI_STATE 允许程序访问Wi-Fi网络状态信息(Allows applications to access information about Wi-Fi networks) android.permission.ADD_SYSTEM_SERVICE 允许程序发布系统级服务(Allows an application to publish system-level services). android.permission.BATTERY_STATS 允许程序更新手机电池统计信息(Allows an application to update the collected battery statistics) android.permission.BLUETOOTH 涉及内容 apk反编译 代码修改 打包 重启签名 需要的工具 jdk:必须的 baksmali:classes.dex反编译为smali格式(文本文件,可修改) smali:smali格式编译打包为classes.dex 但由于smali格式类似汇编,比较难阅读,所以用dex2jar进行辅助 dex2jar:classes.dex转为jar包 jdgui:jar反编译并阅读 以上工具可以在 https://www.sodocs.net/doc/5a16222317.html,/ 下载 好了,顺序就是把apk用zip解开,里面的classes.dex分别用baksmali处理为smali,用dex2jar处理成jar,然后用jdgui看代码,找好java文件中要改的位置后,在smali里找对应的位置修改,改完了用smali再编译为classes.dex,覆盖原来apk里的同名文件,最后重新签名。注意安装时要先删除原来手机里的版本,因为签名不同了,我第一次再这里卡了好久。 以“捕鱼达人海底捞”为例 下载这个游戏的apk,fishing_joy_1.apk,和工具放在一起 用zip解开fishing_joy_1.apk copy classes.dex到baksmali的同一目录 用baksmali处理为smali java -jar baksmali-1.2.6.jar -x classes.dex 得到out目录,里面是smali文件 用dex2jar处理classes.dex为jar包 dex2jar-0.0.7.10-SNAPSHOT\dex2jar.bat classes.dex 得到classes.dex.dex2jar.jar 这时我们的工作目录下面是这样 用jdgui打开classes.dex.dex2jar.jar 1.课程基本信息 课程编号:M21F58D10 课程名称:Android应用与开发 开设学期:第3学期 总学时:60 总学分:4 课程类别:岗位能力课程课程性质:必修课 适用专业:软件技术(移动应用开发) 责任单位:计算机与软件学院 2.课程定位 《Android应用与开发》课程是软件技术(移动应用开发方向)专业的岗位能力课程,课程的开设依据是软件技术专业人才培养目标和相关职业岗位(群)的能力要求,对本专业所面向的手机软件开发与测试、软件开发与项目管理等岗位所需要的知识、技能和素质目标的达成起支撑作用。 在课程设置上,前导课程有《Java程序设计》(M21F1611),《数据结构》(M21F232),后续课程有《移动互联网开发综合实训》(M21J57B10)、《毕业实习》(M21J991)。 3.课程设计思路 首先依据专业人才培养方案中关于人才培养目标的阐述,明确课程目标;其次,结合职业教育课程观、教学观、能力观,基于软件工程的开发过程,以项目化教学来组织课程内容,在课程内容的选择与排序中,以软件项目研发的不同阶段、典型任务为载体,将课程内容划分为互相联系的学习情景;第三,通过对各学习情景中学习目标、主要内容、授课方式、师生要求等各项内容的描述,来规范课程所要求的内容;第四,通过对课程内容的选取和组合,以一个完整的项目为载体,完成课程的实施;最后,通过对项目实施过程中各个环节的考察和评价,来完成对课程的评鉴与考核。 本课程在设计上本着懂方法,重应用的总体思路,突出体现职业教育的技能型、应用性特色,着重培养学生的实践应用技能,力求达到理论方法够用,技术技能过硬的目的。 4.课程建设基本理念 本课程按照理论实践一体、课内外互补、课堂教学与培优工程相结合的课程设计指导思想,以任务或项目为载体组织教学内容,突出学生的主体地位,实现“教、学、做”的有机融合;通过班级讲授、团队学习、个体辅导、展示交流、技能大赛等手段,实现从模仿到应用到创新的高职学生递进式培养。 本课程强调对学生职业岗位能力的培养和职业素养的养成,针对不同环节,采用特定的教学方法,有意识、有步骤地将职业能力的训练和职业素养的形成融入到实际的教学过程中。 一、修改软件名称 在AndroidManifest.xml 文件 可以看到这个apk 一共有5 个图标,其实这些图标都一样,只是分辨率不一样。如果你要修改图标,提前准备好图片资源,把apk 中对应的文件替换掉就行了。 如果你觉得一次要准备5 个不同分辨率的图标进行替换的话不方便,你也可以只替换其中一个,然后在arsc 中把其它四个配置删掉,同时apk 中对应的图标也删掉。 例如你准备的图标的分辨率和apk 中hdpi 的图标分辨率最接近,那么你可以只替换hdpi 所对应路径的图标,然后把mdpi、xhdpi、xxhdpi、xxxhdpi 四个配置都删掉。这样做完全没问题,即使你的分辨率是xxxhdpi,系统找不到最佳分辨率图标时就会去使用hdpi 的图标,顶多显示时图标比较不清晰。 2、Androidkiller 在META-INF 文件搜/icon.png(经验:图标一般都是png格式) 搜到后找到文件夹目录地址(一般在res文件夹里)(右键打开res文件目录),根据尺寸大小替换图标 技巧一:在META-INF文件夹中的“MANIFEST. MF”文件搜索 技巧二:搜索/icon. Png 而不是icon. 流程: 篡改APK图标:工程管理器→AndroidManifest. xml→ →“application”标签→“android: icon=@drawable/ icon→ “META- -INF"→MANIFEST.MF →搜索“/icon. png→替换图片 三、修改包名实现软件分身、共存 在AndroidManifest.xml 文件 找到 Android权限大全 允许程序写入外部存储,如SD卡上写文件 Android应用逆向分析技术综述Dex文件结构 Android 程序静态分析 一、Dex文件结构 1. 文件头 DEX文件头主要包括校验和以及其他结构的偏移地址和长度信息。 字段名称偏移 值 长 度 描述 magic 0x0 8 'Magic'值,即魔数字段,格式如”dex/n035/0”,其中的035表示结构的版本。 checksum 0x8 4 校验码。 signature 0xC 20 SHA-1签名。 file_size 0x20 4 Dex文件的总长度。 header_size 0x24 4 文件头长度,009版本=0x5C,035版本=0x70。 endian_tag 0x28 4 标识字节顺序的常量,根据这个常量可以判断文件是否交换了字节顺序,缺省情况下=0x78563412。 link_size 0x2C 4 连接段的大小,如果为0就表示是静态连接。 link_off 0x30 4 连接段的开始位置,从本文件头开始算起。如果连接段的大小为0,这里也是0。 map_off 0x34 4 map数据基地址。 string_ids_size 0x38 4 字符串列表的字符串个数。string_ids_off 0x3C 4 字符串列表表基地址。type_ids_size 0x40 4 类型列表里类型个数。type_ids_off 0x44 4 类型列表基地址。 proto_ids_size 0x48 4 原型列表里原型个数。proto_ids_off 0x4C 4 原型列表基地址。 field_ids_size 0x50 4 字段列表里字段个数。field_ids_off 0x54 4 字段列表基地址。method_ids_size 0x58 4 方法列表里方法个数。method_ids_off 0x5C 4 方法列表基地址。 class_defs_size 0x60 4 类定义类表中类的个数。class_defs_off 0x64 4 类定义列表基地址。 Android平台介绍及使用指导 二○一○年二月 版本 1.0 目录 Android平台介绍 ................................................................................... - 4 -基本名词...................................................................................................................... - 5 - 操作方法介绍 .......................................................................................... - 6 - 手机按键介绍.............................................................................................................. - 6 - 快捷键介绍.................................................................................................................. - 6 - 信息功能介绍.............................................................................................................. - 7 - 联系人功能介绍........................................................................................................ - 11 - 通话记录功能介绍.................................................................................................... - 14 - 文本粘贴/复制功能介绍.......................................................................................... - 14 - Push Email(Moxier)功能介绍............................................................................ - 15 - 电子邮件功能介绍.................................................................................................... - 16 - 桌面功能介绍............................................................................................................ - 19 - 蓝牙功能介绍............................................................................................................ - 23 - Wifi功能介绍........................................................................................................... - 23 - 飞行模式功能介绍.................................................................................................... - 23 - CDMA数据链接介绍................................................................................................... - 24 - 黑屏解锁功能............................................................................................................ - 25 - 回复出厂设置............................................................................................................ - 26 - 应用程序设置............................................................................................................ - 26 - GPS设置..................................................................................................................... - 27 - 手机中英文语言切换................................................................................................ - 28 - 更换手机输入法........................................................................................................ - 29 - 数据线链接Android手机........................................................................................ - 29 - 手机测试模式进入方法............................................................................................ - 30 - 横屏显示介绍............................................................................................................ - 30 - 浏览器功能介绍........................................................................................................ - 31 - RSS功能介绍............................................................................................................ - 32 - Q/A- 34 - 安卓平板电脑ROOT权限说明 就在我前面一节中就给大家提到过ROOT相关问题,此篇将给大家详细讲解ROOT权限,如果你以前经常去各大论坛一定也会接触到“ROOT”,他的出现频率很高,在各个论坛上,网友的字里行间经常会出现,那么ROOT权限是什么呢?可以给我们带来怎样的好处呢? 什么是root,我需要它做什么? root就是平板电脑的神经中枢,它可以访问和修改你平板电脑几乎所有的文件,这些东西可能是生产平板电脑的公司不愿意你修改和触碰的东西,因为他们有可能影响到平板电脑的稳定,还容易被一些黑客入侵(Root是Linux等类UNIX系统中的超级管理员用户帐户,该帐户拥有整个系统至高无上的权利,所有对象他都有可以操作的权利,所以很多黑客在入侵系统时,都要把权限提升到Root权限,就是将自己的非法帐户添加到Root用户组。类比于Administrator是Windows NT内核系统中的超级管理员用户帐户,也拥有最高的权限。但不同的是,在WINDOWS下Administrator的资源和别的用户资源是共享的,简单的说,别的用户可以访问Administrator的文件。而Linux中,别的用户是不能访问Root用户的家目录(/root)下文件的。因此,Linux比Windows更安全) 既然root权限这么重要,我们为什么还要去获取它? 其实用root的权限主要是因为我们很多东西是受限制的,我们只能利用这些权限来做我们被限制的去做的事情,比如Google禁止我们看到市场里很多免费或付费软件,我们可以用Marketenabler进去看;很多朋友只能看不能下,不能绑定gmail,我们可以修改hosts 来搞定他们,但这些都需要root权限(由于Root权限对于系统具有最高的统治权,便可方便的对于系统的部件进行删除或更改。对于玩家而言,最大的诱惑是在于“刷机”,只有获得Root权限,我们便可随心所欲地对自己的爱机进行“重新包装”,感受新版本软件的优点) 取得root的好处? 1 可以备份系统 2 使用高级的程序例如资源管理器 3 修改系统的程序 4 把程序安装在SD卡上(默认是不支持的) 绝大多数自制的rom都已经获取了root,如果你的rom没有的话,就要自己取得。 很重要的提示:如果你的平板电脑是行货,在保修之内,获取root就会丧失保修的权利。不知道通过以上内容,你是否对root权限有了更为透彻的了解了呢?当然ROOT也应该根据我们所需,如果你是个爱玩,爱研究平板电脑的机友,那么root权限就会对你很重要,但是如果你只是用平板电脑看看网页,看看电影,上上QQ,那么root显然和你没什么关系权限说明大全
Android如何防止apk程序被反编译
Android用户权限列表
Android权限清单
反编译详细教程
Android permission 访问权限说明手册
android捕鱼达人修改方法(反编译、修改、打包)
android课程介绍
安卓逆向笔记-逆向思路教程
Android权限大全
Android应用逆向分析技术综述
Android平台介绍及使用指导
安卓平板电脑ROOT权限说明