您现在的位置是:网站首页>文章详情文章详情
安卓逆向从HelloWord开始
inlike2019-09-09【 原创文章 】 浏览(1358) 评论(0) 喜欢(27)
简介本篇将从第一个Android程序HelloWord来运用之前所说的smali语法《安卓虚拟机及基础逆向的核心》,同时对安卓逆向与Python爬虫方面的关系讲一下个人见解。
本篇将从第一个Android程序HelloWord来运用之前所说的smali语法《安卓虚拟机及基础逆向的核心》,同时对安卓逆向与Python爬虫方面的关系讲一下个人见解。
通过对Android逆向初步的学习和了解,发现Android逆向是非常大的一个体系,其难度是远高于网络爬虫的;Android逆向涉及了java语言、c++、arm汇编语言、smali语法的综合运用,要做逆向之事,必然会一点正向开发才行,这也是难度的一部分。
Android逆向最有价值的地方在于外挂,而不在于网络爬虫;之前接触过太多破解软件,他们可以让用户不付费而使用付费的功能、可以开发外挂产生更大的利益,如果说安卓逆向为了方便爬虫那就是大材小用了。
而在安全防御方面,安卓逆向的防御级别是比网络爬虫更高的,网络大多数是为了获取信息,产生的影响较小;而安卓逆向的目的是为了获得直接利益,因此大型app都具有安卓逆向的安全团队来防御逆向攻击。
安卓逆向能力对于爬虫开发者而言是一个鸡肋,一方面是容易逆向的app价值不大,有价值的app不容易逆向;另一方面是安卓逆向是更高级的应用领域,他的价值不在于做个爬虫。不管难度如何,本专题的分享将继续,形成一个完整的安卓逆向知识体系。
言归正传,下面来时说本篇内容的主题内容,第一个逆向程序HelloWord,主要讲述逆向的基本过程。
在电脑安装AndroidStudio之后,新建一个项目,这个项目就是以HelloWord开始的,如图:
安卓项目中有基本的res(静态资源目录)、AndroidManifest.xml(权限申请、apk系统属性文件)、java源码文件,将这个初始的、最简单的apk打包后用Androidkiller反编译后的目录如下:
基本上是对应apk项目文件的,其中apk反编译后java源码文件中的类对应smali文件,一个类就是一个smali文件。
我们再通过一个功能来分析smali和java源码的对应关系,HelloWord有个简单的功能,就是单击页面上的email图标会弹出一行提示文本。
该功能对应的java源码是:
fab.setOnClickListener { view ->
Snackbar.make(view, "你点击了这个图标", Snackbar.LENGTH_LONG)
.setAction("Action", null).show()
}
给控件fab绑定了一个点击事件,该事件会弹出一个提示框,提示内容是“你点击了这个图标”
我们在看apk逆向后的smali源码文件:
# virtual methods
.method public final onClick(Landroid/view/View;)V
.locals 3
.param p1, "view" # Landroid/view/View;
.line 19
nop
.line 20
nop
.line 19
nop
.line 20
nop
.line 19
const-string v0, "\u4f60\u70b9\u51fb\u4e86\u8fd9\u4e2a\u56fe\u6807"
check-cast v0, Ljava/lang/CharSequence;
const/4 v1, 0x0
invoke-static {p1, v0, v1}, Lcom/google/android/material/snackbar/Snackbar;->make(Landroid/view/View;Ljava/lang/CharSequence;I)Lcom/google/android/material/snackbar/Snackbar;
move-result-object v0
.line 20
const-string v1, "Action"
check-cast v1, Ljava/lang/CharSequence;
const/4 v2, 0x0
invoke-virtual {v0, v1, v2}, Lcom/google/android/material/snackbar/Snackbar;->setAction(Ljava/lang/CharSequence;Landroid/view/View$OnClickListener;)Lcom/google/android/material/snackbar/Snackbar;
move-result-object v0
invoke-virtual {v0}, Lcom/google/android/material/snackbar/Snackbar;->show()V
.line 21
return-void
.end method
那么如何从smali中找到我们需要的那段源码?重要的一个方法就是搜索关键字,在Androidkiller中搜索转为Unicode的中文字符来确定对应源码的位置.
本篇从安卓正反两方面来说明逆向的过程,及其逆向后的文件结构与apk工程的对应关系,逆向的基本步骤是先查壳在反编译,其中还是涉及到混淆等加固的破解,将在后面逐步完善该专题内容。
相关文章
本栏推荐
标签云
猜你喜欢
站点信息
- 建站时间:2019-5-24
- 网站程序:like in love
- 主题模板:《今夕何夕》
- 文章统计:104条
- 文章评论:***条
- 微信公众号:扫描二维码,关注我们