首页 > 代码库 > APP反编译第一课《如何找到核心代码》
APP反编译第一课《如何找到核心代码》
相信很多人都应该会去接触APP反编译,本小七给大家带来入门级别套路,自己也在慢慢摸索学习,一起成长吧。
第一步,反编译
需要的工具有:
一.java环境,其实这里你只要安装了burp就不用管这个的
二.apktool工具
三.dex2jar工具
四.sublime工具:Sublime Text 是一款流行的代码编辑器软件,也是HTML和散文先进的文本编辑器,可运行在Linux,Windows和Mac OS X。
五.jd-gui.exe工具
首先我们来看看 Apk 文件的结构:
- META-INF:签名文件(这个是如何生成的后面会提到)
- res:资源文件,里面的 xml 格式文件在编译过程中由文本格式转化为二进制的 AXML 文件格式
- AndroidManifest.xml:android 配置文件,编译过程依然被转换为 AXML 格式
- classes.dex:Java 代码编译后产生的类似字节码的文件(dalvik 字节码)
- resources.arsc:具有 id 值资源的索引表(asserts 文件夹中的资源不会生成索引)
- 其他文件:可由开发者自己添加,诸如 assets 等,或者 lib(native so 代码)等目录
之后我们下载一个网站的app包,这里就不用细说了,大家随便找一个APP下载到电脑即可。
现在开始反编译:
打开cmd,定位到apktool,然后执行下面命令,123.apk是刚刚下载的APP名称,后面的123是反编译的文件名。
- E:\反编译\apktool>java -jar apktool.jar d -f 123.apk 123
执行命令会提示:
- E:\反编译\apktool>java -jar apktool.jar d -f 123.apk 123
- I: Baksmaling...
- I: Loading resource table...
- Exception in thread "main" brut.androlib.AndrolibException: Could not decode ars
- c file
- at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:55)
- at brut.androlib.res.AndrolibResources.getResPackagesFromApk(AndrolibRes
- ources.java:315)
- at brut.androlib.res.AndrolibResources.loadMainPkg(AndrolibResources.jav
- a:50)
- at brut.androlib.res.AndrolibResources.getResTable(AndrolibResources.jav
- a:43)
- at brut.androlib.Androlib.getResTable(Androlib.java:44)
- at brut.androlib.ApkDecoder.getResTable(ApkDecoder.java:148)
- at brut.androlib.ApkDecoder.decode(ApkDecoder.java:98)
- at brut.apktool.Main.cmdDecode(Main.java:120)
- at brut.apktool.Main.main(Main.java:57)
- Caused by: java.io.IOException: Expected: 0x001c0001, got: 0x00000000
- at brut.util.ExtDataInput.skipCheckInt(ExtDataInput.java:48)
- at brut.androlib.res.decoder.StringBlock.read(StringBlock.java:45)
- at brut.androlib.res.decoder.ARSCDecoder.readPackage(ARSCDecoder.java:97
- )
- at brut.androlib.res.decoder.ARSCDecoder.readTable(ARSCDecoder.java:82)
- at brut.androlib.res.decoder.ARSCDecoder.decode(ARSCDecoder.java:48)
- ... 8 more
这个说明app做了反编译措施。不过没事,我们继续。你会发现多了一个123文件,打开这个文件会显示smail文件。那么什么是 smali 文件呢?
- Smali 是 Android 的 Dalvik 虚拟机所使用的一种 dex 格式的中间语言
- 可以理解为,C 语言和汇编语言的编译与反编译,把 smali 理解为一种汇编语言
第二步就是把这个123文件拖到sublime工具中,就可以看到APP代码做了混淆,我们要找到核心代码才行。那么如何找到核心代码?
主要用到两种方法,一是,利用burp或者wireshark抓包的关键字符串,结合sublime text工具在smali文件夹中使用“find in folder”功能找到关键字符串所在位置,然后再顺藤摸瓜。
二是直接通过jd-gui查看其代码,并找到登录界面的点击事件,并定位到其关键代码。
我这里使用还是推荐第一种,第二种比较累。
登录APP的时候,打开burp拦截数据包或者使用wireshark工具,关键参数为userName
- https://www.xx.com/app/checkRegister.do?userName=18888888888&channelCode=af9rU2Tq&platForm=5&uKey=2f9d65cf-94c9-457b-9e6c-593ecbe6c169&userId=-1
接下来,我们利用找到的关键词,利用sublime text工具的“在文件中查看”功能在smali文件夹中查找该关键词出现的地方。
- E:\反编译\apktool\123\smali\com\b\a\k.smali:
- 7 .method public static a(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
- 8 .locals 6
- 9: .parameter "userName"
- 10 .parameter "password"
到这,我们基本上就可以定位到关键代码位置了。那先说到这里吧,哈哈,未完待续。
本文转至农夫安全
原文地址:http://www.farmsec.org/forum.php?mod=viewthread&tid=343
APP反编译第一课《如何找到核心代码》