APP安全_Android反编译
反编译
Android的反编译工具:apktool,JEB等。
- Apk 文件的结构,如下:
 
- META-INF:签名文件
 - res:资源文件,里面的 xml 格式文件在编译过程中由文本格式转化为二进制的 AXML 文件格式
 - AndroidManifest.xml:android 配置文件,编译过程依然被转换为 AXML 格式
 - classes.dex:java 代码编译后产生的类似字节码的文件(dalvik 字节码,核心逻辑)
 - resources.arsc:具有 id 值资源的索引表(asserts 文件夹中的资源不会生成索引)
 - 其他文件:可由开发者自己添加,诸如 assets 等,或者 lib(native so 代码)等目录
 
一般APK破解过程:

- 逆向破解Android小技巧
 
- 信息反馈:通过界面的一些弹出信息,界面特点寻找突破点。
 - 特征函数:比如搜Toast,Log,getSignature等。
 - 代码注入:把toast或者log函数注入到程序中,跟踪位置。
 - 打印堆栈:插入new Exception(“定位”).printStackTrace()。
 - 网络抓包:通过抓包得到的关键字段,在代码中定位。
 
- 推荐资料书
 
- Android软件安全与逆向分析
 - Android Security Internals
 
配套装备
- Apktool
 - signapk.jar【apk签名工具】
java -jar signapk.jar testkey.x509.pem testkey.pk8 old.apk new.apk - dex2jar
 - jd-gui
 - JEB
 
Apktool+dex2jar+jd-gui
apktool安装(MacOS)
- 点击下载地址,在看雪学院网站下载相应的apktool包;
 - 解压,将包中的三个文件复制到/usr/local/bin下;

 - 执行apktool,查看安装情况。

 
dex2jar安装
- 点击下载地址
 
jd-gui安装(MacOS)
- 点击下载地址
 
反编译apk包
- 进入存放apk目录;
 - apktool d XX.apk;【编译apk:apktool b app文件】
 在同级目录中出现与包名一样的文件,生成的文件如下:

各文件简单介绍如下:
AndroidManifest.xml:清单文件,非二进制。
apktool.yml:apk属性。
original:原始数据,应用的二进制清单和签名。
res:资源文件。
smali:dex解析的代码。smali是dex虚拟机的解析格式,在dex2jar中也包含smali格式的转换。
反编译classes.dex文件
- 将需要反编译的apk重命名后缀为zip,解压,解压后的文件夹中有个classes.dex文件,获取该文件的路径 ;
 - 输入命令cd xxx/xxx/dex2jar,进入下载的dex2jar文件夹中 ;
 - 输入命令sh dextool.sh xxx/xxx/xxx/classes.dex,进行反编译classes.dex文件;
 - 操作完成后,会在dex2jar文件夹中生成一个classes-dex2jar.jar文件 ;
 - 打开jd-gui工具,将classes-dex2jar.jar拖入jd-gui界面上,就能够看到Java文件。
 
踩过的坑
反编译apk包报错

执行反编译apk包时,提示Could not decode arsc file;
产生原因:apktool.apk版本太低,下载最新的版本,将旧的apktool.jar替换。
JEB
安装
- 下载地址
 - 解压,将JEB根目录配置到环境变量中;
 - 运行jeb_macos.sh,启动JEB窗口;
 - File->open,选择*.apk。
 
踩过的坑
mac下运行jeb_macos.sh报错

报错原因:jeb包中的swt是win版本
解决办法:下载mac版本的swt,swt-3.6.1-cocoa-macosx-x86_64.jar.zip,存放到Jeb/bin下,将swt-3.6.1-cocoa-macosx-x86_64.jar修改成swt.jar。
APP安全_Android反编译的更多相关文章
- [APP]如果你想反编译
		
反编译,主要用到两类工具,一个就是获取apk包的包名(appPackage)和类名(appActivity)的工具,其实就是反编译出java源代码,dex2jar和jd-gui:一个是将一个apk包反 ...
 - APP反编译第一课《如何找到核心代码》
		
相信很多人都应该会去接触APP反编译,本小七给大家带来入门级别套路,自己也在慢慢摸索学习,一起成长吧.第一步,反编译需要的工具有:一.java环境,其实这里你只要安装了burp就不用管这个的二.apk ...
 - class-dump 反编译私有的库和应用
		
一.下载并安装class-dump 下载class-dump-3.5.dmg 点击下载 下载完成以后双击.dmg的文件,将里面的class-dump拷贝到/usr/local/bin 设置权限chm ...
 - android apk反编译,重新打包,签名
		
apktool安装 Windows系统: 1. 首先确保系统安装有Java 2. 下载最新版本的apktool.jar https://ibotpeaches.github.io/Apktool/ 下 ...
 - android app反编译
		
最新在反编译别人的apk,有时候看到别人的app有很炫的效果,就想知道别人是怎么样实现的,顺便自己参考,借鉴一下,下一次如果工作中碰到这个问题就知道怎么实现了.最近恰好放假三天,就研究了一下,一般别人 ...
 - Andorid 反编译App
		
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23564065 开发的过程中,有时候可能会去使用别的app里面的图片,参考布局甚至 ...
 - 手把手教你反编译别人的app
		
虽然iOS系统相比于其他手机操作系统相对安全,但是这个安全并不是绝对的,我一直相信,道高一尺魔高一丈.此文想以实际例子出发,告诉大家,如何去反编译一个app,并且从某个角度来说,iOS没有传说中的“安 ...
 - 反编译app方法
		
如果你没有代码,那么可以反编译该app. 这里将用到2个工具,分别是dex2jar和jd-gui.你可以在这里下载目前为止的最新版本以及示例apk. 我们以工具包里的ContactManager.ap ...
 - 教你如何反编译app,拿到加密方式
		
大家知道app 有安卓和ios 安卓是apk 现在基本上apk都是经过加密的 想动态脱壳没一定的技术是搞不定的 IOS是ipa 今天我主要讲的是这个 准备好反编译设备 1.一套越狱的ios手机 我 ...
 
随机推荐
- springboot2.0入门(三)----定义编程风格+jackjson使用+postMan测试
			
一.RESTFul风格API 1.优点: )看Url就知道要什么资源 )看http method就知道针对资源干什么 )看http status code就知道结果如何 HTTP方法体现对资源的操作: ...
 - HDU 6107 - Typesetting   |  2017 Multi-University Training Contest 6
			
比赛的时候一直念叨链表怎么加速,比完赛吃饭路上突然想到倍增- - /* HDU 6107 - Typesetting [ 尺取法, 倍增 ] | 2017 Multi-University Train ...
 - noi 统计前k大的数
			
描述 给定一个数组,统计前k大的数并且把这k个数从大到小输出. 输入 第一行包含一个整数n,表示数组的大小.n < 100000. 第二行包含n个整数,表示数组的元素,整数之间以一个空格分开.每 ...
 - C和汇编混联合的问题
			
关键时刻出现了问题: 关于packed的问题,一定要注意这个问题http://stackoverflow.com/questions/4306186/structure-padding-and-str ...
 - CodeForces Good Bye 2016
			
A题,水题略过. B题,也水,但是想复杂了.只要运动超出[0,20000]的范围就算不可能了. C题,我自己的方法是解不等式,然后取最大的答案即可.代码如下: #include <stdio.h ...
 - IDEA checkout Git 分支 弹出 Git Checkout Problem
			
1. 本地分支切换的时候(例如A切到B),会弹出来Restore workspace on branch switching 对话框,如果选择是的话,在切换分支的时候,你在当前分支(A)所做的一些还未 ...
 - Leetcode题目39.组合总和(回溯+剪枝-中等)
			
题目描述: 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的数字可以无 ...
 - TCP拥塞控制算法
			
转自浅谈TCP拥塞控制算法 本篇文章介绍了几种经典的TCP拥塞控制算法,包括算法原理及各自适用场景. 回顾上篇文章:浅谈 redis 延迟 前言 TCP 通过维护一个拥塞窗口来进行拥塞控制,拥塞控制的 ...
 - jdbc结合commons-dbutils-1.6.jar做素材数据处理的例子
			
前两个 insertTitle,insertOpening 是刚开始做的针对单一素材数据解析及写入的方法,后面一个 insertMaterial 是后期封装的一个可处理各种素材导入的方法,main方法 ...
 - 把文档中的数据取出并插入到excel中
			
from xlrd import open_workbookfrom xlutils.copy import copy jsonfile=r'C:\Users\Administrator\Deskto ...