首页 > 代码库 > 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"
复制代码



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

本文转至农夫安全

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

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