吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10566|回复: 59
收起左侧

[Android 原创] Android逆向重置版(2)—起源

  [复制链接]
BubblePig 发表于 2019-9-18 16:59
本帖最后由 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
1.png

好了,问题来了,那么这里的名字明显是可以自定义的,那么Android系统里到底是以什么方式来进行判断谁是最先启动的Activity呢

这里谁是最先启动的,主要是和一个名为Androidmanifest.xml的文件有关。在这里文件里,有这样的几行。

            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>

2.png
系统规定:哪个Activity下面有这样的属性,那么谁就是最先启动的Activity。

那么实际上你就会发现,有可能有的app挂着Mainactivy的样式,但是却不是最先启动的,所以上面的我都用的是一般情况下。

这里又要思考了。
那么如果我改变这里的Activity下面的属性,比如我将这个属性放在了另外一个Activity下,那么启动的方式是否也可以同样进行改变。
这里给大家思考的空间。

1.4 总结

综上所述,为什么flag会出现在了Mainactivity下,主要原因是因为Mainactivity作为唯一的Activity也是最先启动的Activity,所以flag出现在了这里。
MainActivity.smali 上面也解释了。

0x02 其它疑问点:

1.改变Androidmanifest.xml下的属性是否可以更改启动顺序?

答案是:肯定会改变启动顺序。
这里来简单的演示一下,之后会有一个简单地demo来给大家练习。

1.1 创建一个Activity

3.png
这里我们查看一下Androidmanifest.xml文件
4.png
可以看到是在MainActivity下的。
并且我们将MainActivity显示的字符串设置为“第一个Activity”。(这里怎么设置的需不需要啰嗦一下啊,可能不用吧,有需要可以给我说)

1.2 再创建一个Activity

在创建一个Activity,并且将其显示的字符串设置为“第二个Activity”。
6.png
这个时候查看一下Androidmanifest.xml文件。

1.3 运行一下程序

运行一下可以看到,启动的是MainActivity。
ORJH~U$}8AR{MXF86EBTOS3.png

1.4 更换一个属性

_ZV)ZCYQ_CJK9UPRQJ9N396.png

1.5 再次运行

8.png
可以看成显示的内容变成了第二个Activity了。

1.6 结论

最后可以看到,我们可以通过改变LAUNCHER属性,可以更改Activity启动的顺序,那么...我们就可以做很多事情了。

1.7 最常见的用途

比如说你需要找一个App的入口Activity,那么你就可以根据LAUNCHER属性去判断,到底哪一个是入口Activity。

2.为什么flag会出现在onCreate方法中?

之前我们有一个问题是,为什么会出现在MainActivity中,现在问题又来了,为什么会出现在MainActivity中的onCreate中呢
3OU_MC~{40BCN$}BWRCR10U.png

机智的你们一定会想到,这里可能也和执行顺序有关系。

这里涉及的问题是,Activity的执行顺序的问题,准确的说,是Activity的声明周期的问题。这里不需要对生命周期研究的多透彻,之后有的是机会。
我去盗一张图。

OR2WXU6BIF]F_4Z}10[6Z10.png
就是这个图,看不懂?没关系。
你只需要知道,最开始执行的一个函数就是onCreate,在这里会做很多事情。就和main函数一样,就算是要对变量进行跟踪也是从这个onCreate开始的。

知识点:

  • Activity中onCreate是最先执行的一个函数。

这里就可以解释为什么flag会出现onCreate方法中,在准确一点就是flag最大概率出现的地方。
上面的生命周期有兴趣的可以去研究一下。

0x03 Android killer当前可能用到的功能点简述

1. 判断入口Activity

点击工程信息即可看到。
9.png

2.工程管理器

工程管理器这里可以列出文件夹下的所有文件。
9RD@P)`Z(B9NT3](MHERCHH.png

3.工程搜索

这个上次说了,请查看
https://www.52pojie.cn/thread-1018128-1-1.html

4.回编译

当一个apk修改了之后,那么需要做的就是进行回编译。保存之后,直接点这里就ok了。

未上传2.png

0x04 逆向修改第一个Android App Demo

之前我们做了的是逆向,那么在这一片文章里要做的就是逆向修改App。

1. 反编译

和之前的步骤一样,先反编译apk,需要apk的要去
https://www.52pojie.cn/thread-1018128-1-1.html 下载了。

未上传3.png

2.修改字符串

未上传4.png

3.回编译

保存之后进行回编译

未上传5.png

4.运行

顺利运行了,但是略显尴尬的就是没有办法正面显示。
查一下log

未上传6.png

这里我只是显示一下是成功修改了,你们改完之后,只要能够正常运行就可以了。如何查log之后我们再来说。

0x05 习题

1.习题1,尝试修改Androidmanifest.xml获取flag

下载地址: zhuzhu2.zip (1.03 MB, 下载次数: 1)

2.逆向修改第一个Android AppDemo

下载地址:https://www.52pojie.cn/thread-1018128-1-1.html

免费评分

参与人数 20威望 +1 吾爱币 +25 热心值 +20 收起 理由
蔡徐坤大摆纱裙 + 1 + 1 用心讨论,共获提升!
18个春秋 + 1 + 1 谢谢@Thanks!
小小哥哥 + 1 谢谢@Thanks!
ljw0371 + 1 + 1 我很赞同!
多幸运遇见baby + 1 + 1 用心讨论,共获提升!
daguaishenq + 1 用心讨论,共获提升!
qtfreet00 + 1 + 9 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ljm115 + 1 + 1 谢谢@Thanks!
sli33 + 1 + 1 我很赞同!
xiaoxi2011 + 1 + 1 谢谢@Thanks!
天上飞来一只 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
vLove0 + 1 + 1 谢谢@Thanks!
cxp521 + 1 + 1 谢谢@Thanks!
老Nian + 1 + 1 谢谢@Thanks!
老司车开机 + 1 + 1 热心回复!
xisa + 1 + 1 我很赞同!
fengbolee + 1 + 1 谢谢@Thanks!
TwilightZ + 1 + 1 谢谢@Thanks!
LeiSir + 1 + 1 热心回复!
test_for_jiao + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

534590526 发表于 2019-9-19 00:03
可以说对新手很友好了,我就是在新手道路上慢慢摸索,撞了很多壁。
其中最困扰我的还是动态调试这一块了,网上方法不一,也很笼统,细节没有讲到,具体跟着操作的时候会出现很多问题。
非常希望楼楼能有关于动态调试这一块的讲解
 楼主| BubblePig 发表于 2019-9-19 01:08
534590526 发表于 2019-9-19 00:03
可以说对新手很友好了,我就是在新手道路上慢慢摸索,撞了很多壁。
其中最困扰我的还是动态调试这一块了, ...

肯定还是要先静态,然后动态
TwilightZ 发表于 2019-9-18 17:08

回帖奖励 +20 CB吾爱币

支持一下,希望楼主做的更好,加油!
丶咖啡猫丶 发表于 2019-9-18 17:08
本帖最后由 丶咖啡猫丶 于 2019-9-18 17:11 编辑

支持大佬啊啊啊,楼主生命周期的图不见了
 楼主| BubblePig 发表于 2019-9-18 17:11
TwilightZ 发表于 2019-9-18 17:08
支持一下,希望楼主做的更好,加油!

我的心在滴血。。。。哈哈哈,设置错了,直接20cb了
 楼主| BubblePig 发表于 2019-9-18 17:11

初学初学。。。大佬不敢
丶咖啡猫丶 发表于 2019-9-18 17:12
本帖最后由 丶咖啡猫丶 于 2019-9-18 17:14 编辑
BubblePig 发表于 2019-9-18 17:11
初学初学。。。大佬不敢

大佬 我从你最开始的每一篇文章开始看的,看你后来在成都找到工作就再也没更了
LeiSir 发表于 2019-9-18 17:19
我应该是沙发的,
gaosld 发表于 2019-9-18 17:22
谢谢分享,值得学习
刘样andholiday 发表于 2019-9-18 17:24
感谢老铁 ,回去测试
fengbolee 发表于 2019-9-18 17:49
技术我不懂,排版用心。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表