反编译

Android的反编译工具:apktool,JEB等。

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

  • 逆向破解Android小技巧
  1. 信息反馈:通过界面的一些弹出信息,界面特点寻找突破点。
  2. 特征函数:比如搜Toast,Log,getSignature等。
  3. 代码注入:把toast或者log函数注入到程序中,跟踪位置。
  4. 打印堆栈:插入new Exception(“定位”).printStackTrace()。
  5. 网络抓包:通过抓包得到的关键字段,在代码中定位。
  • 推荐资料书
  1. Android软件安全与逆向分析
  2. Android Security Internals

配套装备

  1. Apktool
  2. signapk.jar【apk签名工具】
    java -jar signapk.jar testkey.x509.pem testkey.pk8 old.apk new.apk
  3. dex2jar
  4. jd-gui
  5. JEB

Apktool+dex2jar+jd-gui

apktool安装(MacOS)

  1. 点击下载地址,在看雪学院网站下载相应的apktool包;
  2. 解压,将包中的三个文件复制到/usr/local/bin下;
  3. 执行apktool,查看安装情况。

dex2jar安装

  1. 点击下载地址

jd-gui安装(MacOS)

  1. 点击下载地址

反编译apk包

  1. 进入存放apk目录;
  2. apktool d XX.apk;【编译apk:apktool b app文件】
  3. 在同级目录中出现与包名一样的文件,生成的文件如下:

    各文件简单介绍如下:
    AndroidManifest.xml:清单文件,非二进制。
    apktool.yml:apk属性。
    original:原始数据,应用的二进制清单和签名。
    res:资源文件。
    smali:dex解析的代码。smali是dex虚拟机的解析格式,在dex2jar中也包含smali格式的转换。

反编译classes.dex文件

  1. 将需要反编译的apk重命名后缀为zip,解压,解压后的文件夹中有个classes.dex文件,获取该文件的路径 ;
  2. 输入命令cd xxx/xxx/dex2jar,进入下载的dex2jar文件夹中 ;
  3. 输入命令sh dextool.sh xxx/xxx/xxx/classes.dex,进行反编译classes.dex文件;
  4. 操作完成后,会在dex2jar文件夹中生成一个classes-dex2jar.jar文件 ;
  5. 打开jd-gui工具,将classes-dex2jar.jar拖入jd-gui界面上,就能够看到Java文件。

踩过的坑

  1. 反编译apk包报错

    执行反编译apk包时,提示Could not decode arsc file;
    产生原因:apktool.apk版本太低,下载最新的版本,将旧的apktool.jar替换。

JEB

安装

  1. 下载地址
  2. 解压,将JEB根目录配置到环境变量中;
  3. 运行jeb_macos.sh,启动JEB窗口;
  4. File->open,选择*.apk。

踩过的坑

  1. 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反编译的更多相关文章

  1. [APP]如果你想反编译

    反编译,主要用到两类工具,一个就是获取apk包的包名(appPackage)和类名(appActivity)的工具,其实就是反编译出java源代码,dex2jar和jd-gui:一个是将一个apk包反 ...

  2. APP反编译第一课《如何找到核心代码》

    相信很多人都应该会去接触APP反编译,本小七给大家带来入门级别套路,自己也在慢慢摸索学习,一起成长吧.第一步,反编译需要的工具有:一.java环境,其实这里你只要安装了burp就不用管这个的二.apk ...

  3. class-dump 反编译私有的库和应用

    一.下载并安装class-dump 下载class-dump-3.5.dmg  点击下载 下载完成以后双击.dmg的文件,将里面的class-dump拷贝到/usr/local/bin 设置权限chm ...

  4. android apk反编译,重新打包,签名

    apktool安装 Windows系统: 1. 首先确保系统安装有Java 2. 下载最新版本的apktool.jar https://ibotpeaches.github.io/Apktool/ 下 ...

  5. android app反编译

    最新在反编译别人的apk,有时候看到别人的app有很炫的效果,就想知道别人是怎么样实现的,顺便自己参考,借鉴一下,下一次如果工作中碰到这个问题就知道怎么实现了.最近恰好放假三天,就研究了一下,一般别人 ...

  6. Andorid 反编译App

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23564065 开发的过程中,有时候可能会去使用别的app里面的图片,参考布局甚至 ...

  7. 手把手教你反编译别人的app

    虽然iOS系统相比于其他手机操作系统相对安全,但是这个安全并不是绝对的,我一直相信,道高一尺魔高一丈.此文想以实际例子出发,告诉大家,如何去反编译一个app,并且从某个角度来说,iOS没有传说中的“安 ...

  8. 反编译app方法

    如果你没有代码,那么可以反编译该app. 这里将用到2个工具,分别是dex2jar和jd-gui.你可以在这里下载目前为止的最新版本以及示例apk. 我们以工具包里的ContactManager.ap ...

  9. 教你如何反编译app,拿到加密方式

    大家知道app 有安卓和ios 安卓是apk 现在基本上apk都是经过加密的 想动态脱壳没一定的技术是搞不定的 IOS是ipa 今天我主要讲的是这个   准备好反编译设备 1.一套越狱的ios手机 我 ...

随机推荐

  1. Java笔记(基础第四篇)

    Java集合类 集合类概述 Java 语言的java.util包中提供了一些集合类,这些集合类又被称为容器.常用的集合有List集合.Set集合.Map集合,其中List与Set实现了Collecti ...

  2. zuul网管配置其他服务时 HTTP Status 500 – Internal Server Error

    1.这个错误是由三个原因导致的 (1).我在给类的接口命名的时候前面少加了一个/ (2)给zuul配置路由的时候多加了个服务名,serviceId名称就是spring的name,而不是eureka注入 ...

  3. delphi将两个Strlist合并,求交集 (保留相同的)

    Function StrList_Join(StrListA,StrListB:String):String; //将两个Strlist合并,求交集 (保留相同的) var SListA,SListB ...

  4. Linux+CLion+树莓派远程编译时,Cmake编译出现undefined reference to `vtable for MainWindow'的解决办法

    在win+CLion上进行远程qt开发时碰到以下错误: 错误提示: undefined reference to `vtable for MainWindow' 原因:源文件的目录结构有问题?? 解决 ...

  5. UOJ社区版安装多个Judger

    目录 声明 在同一台机器上安装 在不同机子上安装 声明 本文档非官方文档,为我试坑的经验总结. 本文编写时间 2019.11.04 ,并不一定会随UOJ更新而更新. 由于UOJ需要用SVN传题,并不那 ...

  6. 由 Vue 中三个常见问题引发的深度思考

    为什么 data 要写成函数,而不允许写成对象? Vue 中常说的数据劫持到底是什么? Vue 实例中数组改变 length 或下标直接赋值什么不能更新视图? http://www.sohu.com/ ...

  7. 【CF671D】 Roads in Yusland(对偶问题,左偏树)

    传送门 洛谷翻译 CodeForces Solution emmm,先引入一个对偶问题的概念 \(max(c^Tx|Ax \leq b)=min(b^Ty|A^Ty \ge c)\) 考虑这个式子的现 ...

  8. redis的哨兵

    删除旧master或者不可达slave sentinel永远会记录好一个Master的slaves,即使slave已经与组织失联好久了.这是很有用的,因为sentinel集群必须有能力把一个恢复可用的 ...

  9. Leetcode题目279.完全平方数(动态规划-中等)

    题目描述: 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示例 1: 输入: n = 12 输出: 3 解 ...

  10. Leetcode题目169.求众数(简单)

    题目描述: 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [3,2,3] ...