宝剑锋从磨砺出,梅花香自苦寒来。这篇文章主要讲述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
- 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
- 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"
到这,我们基本上就可以定位到关键代码位置了。那先说到这里吧,哈哈,未完待续。
【APP反编译第一课《如何找到核心代码》】本文转至农夫安全
原文地址:http://www.farmsec.org/forum.php?mod=viewthread& tid=343
推荐阅读
- Android 四大组件学习之ContentProvider四
- Android攻城狮OptionsMenu
- android 两次调用DatePickerDialog.onDateSet()
- PPT怎样画时间线?PPT画彩色时间线办法_PowerPoint专区
- Excel表格怎样统计数据重复次数?Excel表格统计数据重复次数办法_Excel专区
- Word2017怎样打开标尺?Word2017打开标尺办法_Word专区
- Word中怎样输入化学方程式?Word输入化学方程式办法_Word专区
- WPS怎样设置文章首字悬挂下沉?_WPS office
- PPT怎样给图片自制画册效果?PPT给图片自制画册效果办法_PowerPoint专区