相信很多人都应该会去接触APP反编译,本小七给大家带来入门级别套路,自己也在慢慢摸索学习,一起成长吧。
第一步,反编译
需要的工具有:
一.java环境,其实这里你只要安装了burp就不用管这个的
二.apktool工具
三.dex2jar工具
四.sublime工具:Sublime Text 是一款流行的代码编辑器软件,也是HTML和散文先进的文本编辑器,可运行在Linux,Windows和Mac OS X。
五.jd-gui.exe工具
首先我们来看看 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 代码)等目录

复制代码

之后我们下载一个网站的app包,这里就不用细说了,大家随便找一个APP下载到电脑即可。

现在开始反编译:

打开cmd,定位到apktool,然后执行下面命令,123.apk是刚刚下载的APP名称,后面的123是反编译的文件名。

  1. E:\反编译\apktool>java -jar apktool.jar d -f 123.apk 123

复制代码

执行命令会提示:

  1. E:\反编译\apktool>java -jar apktool.jar d -f 123.apk 123
  2. I: Baksmaling...
  3. I: Loading resource table...
  4. Exception in thread "main" brut.androlib.AndrolibException: Could not decode ars
  5. c file
  6. at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:55)
  7. at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibRes
  8. ources.java:315)
  9. at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.jav
  10. a:50)
  11. at brut.androlib.res.AndrolibResources.getResTable(AndrolibResources.jav
  12. a:43)
  13. at brut.androlib.Androlib.getResTable(Androlib.java:44)
  14. at brut.androlib.ApkDecoder.getResTable(ApkDecoder.java:148)
  15. at brut.androlib.ApkDecoder.decode(ApkDecoder.java:98)
  16. at brut.apktool.Main.cmdDecode(Main.java:120)
  17. at brut.apktool.Main.main(Main.java:57)
  18. Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000
  19. at brut.util.ExtDataInput.skipCheckInt(ExtDataInput.java:48)
  20. at brut.androlib.res.decoder.StringBlock.read(StringBlock.java:45)
  21. at brut.androlib.res.decoder.ARSCDecoder.readPackage(ARSCDecoder.java:97
  22. )
  23. at brut.androlib.res.decoder.ARSCDecoder.readTable(ARSCDecoder.java:82)
  24. at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:48)
  25. ... 8 more

复制代码

这个说明app做了反编译措施。不过没事,我们继续。你会发现多了一个123文件,打开这个文件会显示smail文件。那么什么是 smali 文件呢?

  1. Smali 是 Android 的 Dalvik 虚拟机所使用的一种 dex 格式的中间语言
  2. 可以理解为,C 语言和汇编语言的编译与反编译,把 smali 理解为一种汇编语言

复制代码

第二步就是把这个123文件拖到sublime工具中,就可以看到APP代码做了混淆,我们要找到核心代码才行。那么如何找到核心代码?
主要用到两种方法,一是,利用burp或者wireshark抓包的关键字符串,结合sublime text工具在smali文件夹中使用“find in folder”功能找到关键字符串所在位置,然后再顺藤摸瓜。
二是直接通过jd-gui查看其代码,并找到登录界面的点击事件,并定位到其关键代码。

我这里使用还是推荐第一种,第二种比较累。
登录APP的时候,打开burp拦截数据包或者使用wireshark工具,关键参数为userName

  1. https://www.xx.com/app/checkRegister.do?userName=18888888888&channelCode=af9rU2Tq&platForm=5&uKey=2f9d65cf-94c9-457b-9e6c-593ecbe6c169&userId=-1

复制代码

接下来,我们利用找到的关键词,利用sublime text工具的“在文件中查看”功能在smali文件夹中查找该关键词出现的地方。

  1. E:\反编译\apktool\123\smali\com\b\a\k.smali:
  2. 7  .method public static a(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
  3. 8      .locals 6
  4. 9:     .parameter "userName"
  5. 10      .parameter "password"

复制代码

到这,我们基本上就可以定位到关键代码位置了。那先说到这里吧,哈哈,未完待续。

本文转至农夫安全

原文地址:http://www.farmsec.org/forum.php?mod=viewthread&tid=343

APP反编译第一课《如何找到核心代码》的更多相关文章

  1. App反编译二次打包常见问题处理

    1.二次打包时报错:Error retrieving parent for item: No resource found that matches the given name 如: D:\用户文件 ...

  2. uniapp解决测评有组件导出风险,解决APP反编译,回编译后app无法打开的问题

    1.APP反编译 使用hbx云打包,打包出apk 拿到apk后,先下载反编译工具 https://pan.baidu.com/s/1A5D8x_pdSELlHYl-Wl6Xnw 提取码 6vzd 使用 ...

  3. 记一些安卓app反编译修改的记录

    2017-12-2209:00:40 好几天没有写过博客了,因为马上要期末考试,只能暂且放下我的小玩物,专心复习我的期末考试. 今天突然想设置一个安卓的栏目,记录下自己从高中就爱玩的一些东西,像刷机呀 ...

  4. android app反编译

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

  5. iOS app反编译

    对于APP store 上的应用都是加密的了,反编译起来有难度. 对于自己用xcode 编译的ipa 或者是其他渠道下载的ipa包都可以使用反编译工具进行反编译. https://cnbin.gith ...

  6. dll反编译(修改引用文件、修改代码)再生成dll

    问题描述 我们在日常开发中经常会遇到,想要对dll文件做修改的操作,但苦于没有源代码,只能想想其他办法 解决问题 办法就是通过几个工具来反编译.正向编译.修改属性 反编译.正编译 参考https:// ...

  7. app反编译遇到360加固,傻瓜式脱壳

    转载https://blog.kieng.cn/2051.html 第一步 电脑安装安卓模拟器,我使用的是雷电模拟器(推荐). 第二步 打开模拟器,准备安装软件: 1.需要脱壳的软件 2.XP 框架. ...

  8. APP反编译Xposed-Fdex2脱壳

    1.首先手机安装Xposed(app) 2.安装Fdex2(app) 3.打开Fdex2 4.点击要脱壳的app 5.adb pull (点击脱壳app时候弹出的来的路径) 保存本地路径 6.完结-. ...

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

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

随机推荐

  1. PowerDesigner建模应用(一)逆向工程,配置数据源并导出PDM文件

    物理数据模型(Physical Data Model)PDM,提供了系统初始设计所需要的基础元素,以及相关元素之间的关系:数据库的物理设计阶段必须在此基础上进行详细的后台设计,包括数据库的存储过程.操 ...

  2. Android在未来对 Java 8 特性的支持

    在谷歌, 我们总是努力做正确的事. 这意味着有时候我们会调整自己的计划. 我们深切地知道开发者社区是多少地关注 Android 能够对 Java 8 良好的支持, 并且我们正在改变自己对 Java 8 ...

  3. iOS网络编程笔记——GCDAsyncSocket使用

    CocoaAsyncSocket为Mac和iOS提供了易于使用且强大的异步通信库. 简单的Socket通信包括了建连.断开连接.发送socket业务请求.重连这四个基本功能. 1.建立连接:GCDAs ...

  4. Java线程池使用和分析(一)

    线程池是可以控制线程创建.释放,并通过某种策略尝试复用线程去执行任务的一种管理框架,从而实现线程资源与任务之间的一种平衡. 以下分析基于 JDK1.7 以下是本文的目录大纲: 一.线程池架构 二.Th ...

  5. 防火墙之netfailt、iptables详解

    [TOC] Iptables入门 # 1.iptables介绍 linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成. netfilter 组件也称为 ...

  6. windows phone 8.1开发:锁屏提醒

    原文出自:http://www.bcmeng.com/lockscreen/ 之前小梦和大家分享了toast通知,磁铁更新,今天小梦和大家分享windows phone 8.1开发中的锁屏提醒.相比t ...

  7. JSON与JAVA的数据转换

    http://developer.51cto.com/art/200906/129090.htm java.lang.ClassNotFoundException: net.sf.json.JSONA ...

  8. java集合体系

    Collection接口: 1.单列集合类的根接口. 2.定义了可用于操作List.Set的方法--增删改查: 3.继承自Iterable<E>接口,该接口中提供了iterator() 方 ...

  9. JDBC调用存储过程的例子

    下面是我学到了Oracle存储过程,在这里跟大家简单的分享一下利用JDBC调用存储过程的例子: 废话就不啰嗦,现在就直接上机代码. 首先我利用的是Oracle中默认的 scott 数据库里的 emp员 ...

  10. 查找及修改日程管理系统中的bug

    1.Java没有分包都糅合在一起 2.在登录界面,没有输入账号密码,点击登录按钮时程序会崩溃,需要给给用户名和密码添加Toast (注:由于程序没有运行出来,所以是搭档孙刘兰的截图) 3.Regist ...