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

宝剑锋从磨砺出,梅花香自苦寒来。这篇文章主要讲述APP反编译第一课《如何找到核心代码》相关的知识,希望能为你提供帮助。
相信很多人都应该会去接触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"
复制代码

到这,我们基本上就可以定位到关键代码位置了。那先说到这里吧,哈哈,未完待续。
【APP反编译第一课《如何找到核心代码》】本文转至农夫安全
原文地址:http://www.farmsec.org/forum.php?mod=viewthread& tid=343





























    推荐阅读