ez_AndroidRe

简单的Android逆向 出题日期:2024.12.4 1200pts

题目概述

本题目为Android简单逆向题目,目的考察对Android应用的基础了解

Tag:#Android逆向 #Activity #Java #Aes加密 #Random

难度:简单

预期解:0 ~ 1

实际解出:1


题目附件

9MB
archive
Open

官方完整WirteUP

方法一:直接打开Activity,获取Flag(针对题目,简单方法)

首先,安装应用,查看发现拥有4个Activity

其中有用的Activity有两个:

Activity列表

分别为MainHome,其中MainActivityLaucher 即 启动/登录页面

我们如果想绕过登录,也就是绕过MainActivity

所以 我们直接打开HomeActivity

打开HomeActivity

发现我们直接绕过了登录,直接拿到flag


方法二:Hook程序,始终返回True,强制登录(万能简单方法)

首先,打开应用包,反编译Dex文件:

直接定位到MainActivity打开

发现有以下代码有些可疑:

经过分析,发现用户名始终为“admin但是这并不重要

我们直接查看密码判断逻辑 这里就是判断登录的函数

如果正确(True)则直接进入主页面

如果错误(False)则报错,提示不正确

我们先hook主程序,查看一下该函数的返回值:

之后随意输入密码,返回到应用查看日志:

发现为False,并且提示报错,登陆失败

于是我们直接Hook该函数,让该函数始终返回True:

Hook成功后,我们直接随便输入密码,均可成功登录

实现绕过鉴权验证,拿到flag:


方法三:逆向Android应用,分析加密过程,进行解密(正规硬核方法)

首先,我们使用逆向工具打开apk文件,反编译查看源代码

我们直接定位到MainActivity查看源码

发现登陆页面,用户名始终为admin,密码定义了一个函数generatedPassword

查看函数:

函数定义了一个随机函数,其中thisispassword为随机种子(seed

密码长度为16位

这里定义了加密字典:

所以,我们可以直接写一个脚本来生成密码:

由于Android应用是Java/Kotlin写的

所以我们脚本也必须是Java/Kotlin

编译运行,得到密码:

所以,我们使用 admin,3f%Qn5ELCCQtLnl3 即可正确登录系统拿到flag

这就结束了吗?

是的,拿到flag了,但是有没有想过flag是如何加密的呢?

接下来分析一下flag的加密方式

首先我们反编译homeactivity:

我们会发现,flag加密方式非常简单,仅仅使用了AES

放入在线工具,也能直接解密获得flag

flag加密比登录加密简单太多了,不会真的有人去破解登录加密吧


出题人小记

本次也是第一次接触Android开发,出题也遇到了不少问题,挺有意思的

包里面有很多默认的东西都没删除,这让包体变得很大,更不容易解出(?)

预期 0~1 解,还真没想到有人可以做出来,从零开始现学能做出来是真的不容易了,为他点个赞


最后附上程序的源代码,可以供你们参考一下

Activities:

Aes加密脚本:

Last updated

Was this helpful?