Android逆向重置版(1)——关键的第一步
本帖最后由 BubblePig 于 2019-9-2 18:52 编辑# 0x00 前言
首先感谢老婆王嘟嘟的鼓励,其次感谢52平台的支持。以下是正文
导航篇地址:https://www.52pojie.cn/thread-1016567-1-1.html
之后所有的文章链接会放在导航篇中。
这次不准备一遍文章里包含很多东西了,就一篇文章一个点,慢慢学,慢慢走,目的也明确起来,这样可能更利于学习。
想法是,先弄一个简单的demo来增加学习兴趣,然后围绕一个demo来讲解相关的知识点。并且将文章进行分割,在不同阶段推荐查看不同内容。
有什么需要改进的地方,请一定要提出来,因为是个人想法,没有得到印证,有的时候回走的很偏。
## 啰嗦部分
看到我的这篇文章大概其实可以分为以下这样几类人
### 1.初学者
**必学部分**
- 0x0.1
- 0x1.1
**推荐部分(看看,或者实践都可以)**
-0x02
**不推荐部分**
这部分。。。先不看,后面都会涉及到,不急。
-0x1.2
-0x1.3
-0x1.2
### 2.有一些基础但是相关知识不完善,查漏补缺
-0x1.2
-0x1.3
-0x1.2
### 3.大佬 or 准大佬
看看戏就好,笑一笑,或者吐吐槽
## 0x0.1.你的主要目标:
- 逆向你的第一个Android App。这里我们以成功的看到代码里的flag为完成目标。flag格式为:flag{xxx}。
**完成目标将会收获:**
- 成功的逆向了一个App,你也是逆向过App的人了。
- 至少比之前的你是进步了的,并且是有方向的进步了。
- 学会了Androidkiller工具的使用。
- Android逆向技能值+1。
## 0x0.2.额外任务(不影响主线学习):
- 完成App demo的编写
## 0x0.3.App demo下载地址
可能对于大部分人来说,这个过于简单,所以先提供下载地址,不用接着往下看,可能有一小部分人需要往下看。
链接:https://pan.baidu.com/s/1KrVzY0xiFGDr_cY46sq57Q
提取码:a7pv
复制这段内容后打开百度网盘手机App,操作更方便哦
## 本篇内容总结
主要是后面怕自己忘记了,可以没必要看懂
- Androidkiller的简单使用
- jadx
- jeb
- apktool
- app demo编写
# 0x01 逆向你的第一个Android App
## 0x1.1.方法一
这个思路适合没有逆向过任何东西,甚至java都不需要懂的都可以顺利进行。
###1.1 首先,拿到App的第一步,先进行安装查看(知道是病毒就别安装了哈)。
![](https://attach.52pojie.cn//forum/201909/02/172454o1uk555ie0a95mq0.jpg?l)
### 1.2 安装了之后发现并没有flag字样。所以我们需要对App进行逆向分析。
对于初学来说,可能都是接触Android killer,我们就用Android killer进行逆向。
Android killer使用极其方便,把Apk拖进去就可以了。
**如果出现了是否进行分析,点击否**
![](https://attach.52pojie.cn/album/201909/02/172740k62qezqo7vt6t66q.png)
### 1.3 找到关键点
在Android killer中提供了全局搜索的功能。如下图所示:
![](https://attach.52pojie.cn/album/201909/02/172816fm5tyl5zil64lklw.png)
需要注意的是:这里设置为当前整个项目
![](https://attach.52pojie.cn/album/201909/02/173019bh11pr4rc1cpik4p.png)
搜索关键字:flag{,如下图所示,成功拿到flag。
![](https://attach.52pojie.cn/album/201909/02/173114hsw62ohzm2727okw.png)
### 1.4 总结
- 安装查看apk
- 拖到Androidkiller中
- 搜索关键字
- 成功
### 1.5思考部分
思考的部分会在之后的文章里进行解答以及分析。
- 为什么flag会出现在MainActivity.smali中。
- MainActivity.smali是什么。
![](https://attach.52pojie.cn/album/201909/02/173327sqwq9qbazbvbiavi.png)
## 0x1.2 方法二
由于这里并没有推荐初学时学习,所以过程会比较简单,仅仅当做复习过程,之后如果有必要的话,会推荐初学者回头重新复习的,所以这部分没必要看懂,或者可以直接不看。
### 1.使用jadx直接打开
找到主MainActivity,相当于程序开始的地方(注意这里是相当,实际上严格的说它并不是)。
![](https://attach.52pojie.cn/album/201909/02/175851b7hohzwrr79dcrku.png)
这里涉及到如何找MainActivity。
- 最简单的方法就是,直接看。。。一般命名是MainActivity的就是主Activity。
其他的方法。。等之后再说。
## 0x1.3 方法三
### 1.使用jeb直接打开
将apk拖进去
![](https://attach.52pojie.cn/album/201909/02/180556sv81j1eejjv7rnmn.png)
然后选中MainActivity,用快捷键Q进行java转换
![](https://attach.52pojie.cn/album/201909/02/180714xqa2qhhnq8x2tzh2.png)
并没有什么难度。
## 0x01.4 方法四
### 1.解压apk
![](https://attach.52pojie.cn/album/201909/02/181028iu4dr5wuub4be94s.png)
### 2.反编译dex文件
简单的说下,这里的dex实际上就是代码集合的地方,也是反编译的重点,这里使用的工具是apktool。
然后将反编译好的文件夹直接拖入Sublime or 其他,你们随意。
![](https://attach.52pojie.cn/album/201909/02/181245mf3fmtku5yu2t7of.png)
可以看到有这些文件夹以及一些.smali文件。
smali文件就是class文件的汇编,实际上是一种伪汇编,是运行在java虚拟机上的代码。
同理找到MainActivity,可得flag。
![](https://attach.52pojie.cn/album/201909/02/181443qqfc662v65nhsfsw.png)
# 0x02 编写一个App demo
编写App demo,首先要具备一个Android studio,这个安装就行,搜索一下教程会有很多。
## 1.New -New Project
创建一个New Project
![](https://attach.52pojie.cn/album/201909/02/173400m68df0lug66fgddb.png)
## 2.命名
![](https://attach.52pojie.cn/album/201909/02/173654ka0jj86wxe1jjx1f.png)
## 3.选择默认next
![](https://attach.52pojie.cn/album/201909/02/173735n14y20plf6mo4y20.png)
## 4.选择Empty Activity,然后next
![](https://attach.52pojie.cn/album/201909/02/173941z1uqwzqj21u0910z.png)
## 5.选择finish
![](https://attach.52pojie.cn/album/201909/02/174008acm5rmcb6wjibib5.png)
## 6.进去之后选定MainActivity
![](https://attach.52pojie.cn/album/201909/02/174052w22ssx3sos1878s3.png)
## 7. 然后输入以下代码
System.out.print("flag{GoodLook_bywangdudu}");
这里就是输出一串字符串。
![](https://attach.52pojie.cn/album/201909/02/174355qez6enajhg9bsnvh.png)
## 8.Build APK
这里直接Build APK即可。
![](https://attach.52pojie.cn/album/201909/02/174431oh2sssx40d5rwi2y.png)
## 9.成品
![](https://attach.52pojie.cn/album/201909/02/174458crizasa7nf4nfafi.png)
# 以上,谢谢大家,要是有空的话,有免费热心值来一下鸭
Sergio666 发表于 2019-9-7 00:02
我之前有幸转存了18篇您的文章,图片都是本地存储,虽然还是喜欢看新教程,但是有些图片需要复用的话,我倒是可 ...
能分享下转存的文章吗 额微粒波地 发表于 2019-9-2 18:34
防止网盘过期,但是更占吾爱的服务器空间你以为我会告诉你是币的事吗?
我可以默认你这个回复是偷偷赚了一个币吗{:1_918:} 防止网盘过期,但是更占吾爱的服务器空间{:1_907:}{:1_907:}你以为我会告诉你是币的事吗? 先马。。。 边学习,边CB 支持楼主的教程 鉴定完毕,第一步肯定为了赚币来的 楼主能教教怎么回编译和签名嘛?我一直都没成功过{:301_972:} 边学习,边CB 学习了 期待大佬更新flag是什么意思?