Android逆向重置版(2)—起源
本帖最后由 BubblePig 于 2019-9-18 18:06 编辑# 0x00 前言
首先感谢老婆王嘟嘟的鼓励,其次感谢52平台的支持。以下是正文
导航篇地址:https://www.52pojie.cn/thread-1016567-1-1.html
之后所有的文章链接会放在导航篇中。
上一篇内容有一个非常简单的题目,主要目的是为了引导走进第一步。
那么这一篇主要是为了详细讲解一下上一篇的一些疑问,还有一些基础知识的学习&复习。
# 0x01 第一个Android App Demo详解
上次留下来两个疑问
- 为什么flag会出现在MainActivity.smali中。
- MainActivity.smali是什么。
先来解决这两个。
## 1.MainActivity.smali
### 1.1 smali
首先来说这个后缀.smali。
smali的意识是编译器,.smali就是一个反编译之后的文件格式。
### 1.2 Activity
啰嗦一下,要弄Android逆向你不可能只单出的学逆向而抛弃Android本身,所以Android的知识会贯穿在你整个学习Android逆向的系统中。
Android中有四大组件。
- activity
- Service
- Broadcast Receive
- Content Provider
Activity就是一个可视化界面。再简单的说就是一个界面,每一个界面都是一个Activity(这里先不涉及Fragment)。
其他的三个组件目前还没有涉及到,你现在需要记住的知识如下:
- Android 有四大组件
- Activity是四大组件之一
- Activity其实就是一个界面
### 1.3 MainActivity
如果是有编程基础的话,那么就对Main这个东西很敏感,当然没有也关系,我们现在说。
MainActivity一般情况下就是显示的第一个页面。也可以理解为是一个函数的开始位置。
在我们肉眼能看到的运行状态下的,呈现出来的第一个东西,就是它了。
我可能越解释越难懂,总结一下:
- 一般情况下,MainActivity就是一切开始的地方
PS:在Android Studio中,创建一个默认的app的时候,MainActivity就是一切开始的地方。
下图为创建时默认生成的MainActivity
好了,问题来了,那么这里的名字明显是可以自定义的,**那么Android系统里到底是以什么方式来进行判断谁是最先启动的Activity呢**
这里谁是最先启动的,主要是和一个名为Androidmanifest.xml的文件有关。在这里文件里,有这样的几行。
```
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
```
系统规定:**哪个Activity下面有这样的属性,那么谁就是最先启动的Activity。**
那么实际上你就会发现,有可能有的app挂着Mainactivy的样式,但是却不是最先启动的,所以上面的我都用的是一般情况下。
这里又要思考了。
那么如果我改变这里的Activity下面的属性,比如我将这个属性放在了另外一个Activity下,那么启动的方式是否也可以同样进行改变。
这里给大家思考的空间。
### 1.4 总结
综上所述,为什么flag会出现在了Mainactivity下,主要原因是因为Mainactivity作为唯一的Activity也是最先启动的Activity,所以flag出现在了这里。
MainActivity.smali 上面也解释了。
# 0x02 其它疑问点:
## 1.改变Androidmanifest.xml下的属性是否可以更改启动顺序?
答案是:肯定会改变启动顺序。
这里来简单的演示一下,之后会有一个简单地demo来给大家练习。
### 1.1 创建一个Activity
这里我们查看一下Androidmanifest.xml文件
可以看到是在MainActivity下的。
并且我们将MainActivity显示的字符串设置为“第一个Activity”。(这里怎么设置的需不需要啰嗦一下啊,可能不用吧,有需要可以给我说)
![](https://attach.52pojie.cn/album/201909/11/215324allyeiprtyg3ndgi.png)
### 1.2 再创建一个Activity
在创建一个Activity,并且将其显示的字符串设置为“第二个Activity”。
这个时候查看一下Androidmanifest.xml文件。
![](https://attach.52pojie.cn/album/201909/11/215632duutngf7fbms7q2r.png)
### 1.3 运行一下程序
运行一下可以看到,启动的是MainActivity。
### 1.4 更换一个属性
### 1.5 再次运行
可以看成显示的内容变成了第二个Activity了。
### 1.6 结论
最后可以看到,我们可以通过改变LAUNCHER属性,可以更改Activity启动的顺序,那么...我们就可以做很多事情了。
### 1.7 最常见的用途
比如说你需要找一个App的入口Activity,那么你就可以根据LAUNCHER属性去判断,到底哪一个是入口Activity。
## 2.为什么flag会出现在onCreate方法中?
之前我们有一个问题是,为什么会出现在MainActivity中,现在问题又来了,为什么会出现在MainActivity中的onCreate中呢
机智的你们一定会想到,这里可能也和执行顺序有关系。
这里涉及的问题是,Activity的执行顺序的问题,准确的说,是Activity的声明周期的问题。这里不需要对生命周期研究的多透彻,之后有的是机会。
我去盗一张图。
就是这个图,看不懂?没关系。
你只需要知道,最开始执行的一个函数就是onCreate,在这里会做很多事情。就和main函数一样,就算是要对变量进行跟踪也是从这个onCreate开始的。
知识点:
- Activity中onCreate是最先执行的一个函数。
这里就可以解释为什么flag会出现onCreate方法中,在准确一点就是flag最大概率出现的地方。
上面的生命周期有兴趣的可以去研究一下。
# 0x03 Android killer当前可能用到的功能点简述
## 1. 判断入口Activity
点击工程信息即可看到。
## 2.工程管理器
工程管理器这里可以列出文件夹下的所有文件。
## 3.工程搜索
这个上次说了,请查看
https://www.52pojie.cn/thread-1018128-1-1.html
## 4.回编译
当一个apk修改了之后,那么需要做的就是进行回编译。保存之后,直接点这里就ok了。
# 0x04 逆向修改第一个Android App Demo
之前我们做了的是逆向,那么在这一片文章里要做的就是逆向修改App。
## 1. 反编译
和之前的步骤一样,先反编译apk,需要apk的要去
https://www.52pojie.cn/thread-1018128-1-1.html 下载了。
## 2.修改字符串
## 3.回编译
保存之后进行回编译
## 4.运行
顺利运行了,但是略显尴尬的就是没有办法正面显示。
查一下log
这里我只是显示一下是成功修改了,你们改完之后,只要能够正常运行就可以了。如何查log之后我们再来说。
# 0x05 习题
## 1.习题1,尝试修改Androidmanifest.xml获取flag
下载地址:
## 2.逆向修改第一个Android AppDemo
下载地址:https://www.52pojie.cn/thread-1018128-1-1.html
可以说对新手很友好了,我就是在新手道路上慢慢摸索,撞了很多壁。
其中最困扰我的还是动态调试这一块了,网上方法不一,也很笼统,细节没有讲到,具体跟着操作的时候会出现很多问题。
非常希望楼楼能有关于动态调试这一块的讲解 534590526 发表于 2019-9-19 00:03
可以说对新手很友好了,我就是在新手道路上慢慢摸索,撞了很多壁。
其中最困扰我的还是动态调试这一块了, ...
肯定还是要先静态,然后动态 支持一下,希望楼主做的更好,加油! 本帖最后由 丶咖啡猫丶 于 2019-9-18 17:11 编辑
支持大佬啊啊啊,楼主生命周期的图不见了 TwilightZ 发表于 2019-9-18 17:08
支持一下,希望楼主做的更好,加油!
我的心在滴血。。。。哈哈哈,设置错了,直接20cb了 丶咖啡猫丶 发表于 2019-9-18 17:08
支持大佬啊啊啊
初学初学。。。大佬不敢 本帖最后由 丶咖啡猫丶 于 2019-9-18 17:14 编辑
BubblePig 发表于 2019-9-18 17:11
初学初学。。。大佬不敢
大佬 我从你最开始的每一篇文章开始看的,看你后来在成都找到工作就再也没更了 我应该是沙发的, 谢谢分享,值得学习 感谢老铁 ,回去测试 技术我不懂,排版用心。