一、题目来源

    来源:XCTF社区安卓题目easy_apk


二、破解思路

    1、首先运行一下给的apk,发现就一个输入框和一个按钮,随便点击一下,发现弹出Toast验证失败。如下图所示:

    2、将该APK直接拖进AndroidKiller中反编译,搜索关键字验证失败,如下图所示:

    3、关键代码就在MainCtivity.java处,使用jeb直接查看Java代码(偷懒不看smali汇编了,看到脑壳痛),发现代码逻辑为将用户输入的字符串使用Base64New类中的Base64Encode()函数加密后和一个字符串相比较,若相等,则验证通过,否则验证失败,点击跳转到Base64New类中,发现Base64Encode()函数首先将用户输入得到的字符串转为字节数组作为参数,然后每3个字节为一组,扩展为4个字节,最后查表即可(感觉很眼熟的样子,emmmm就是base64编码,只是对照表跟base64对照表不同,可惜我在写完解密脚本之后才发现是这东西),那么解密过程也很简单了,直接对字符串4个字节一组分组,缩减为3个字节一组(语文水平感觉很差的样子写道这里。。。。),然后转为字符拼接成字符串即可。



    4、将解码过程写出python脚本跑出flag,填入验证通过!!!




三、总结

    总结:很基础的一道题,唯一的难点就在必须写base64解码脚本了吧,emmmm要是像我一样木有认出来是base64,那一开始就有点难受了!!!下面附上Base64编码解码原理以及相关脚本!!!

    Base64编码原理:

    1、将字符串转为字节数组,然后每3个字节一组,一个24个比特,不足3个字节直接补0

    2、在每一组3个字节24bit中,以6个bit构成一个字节(高两位补0),形成4个字节为一组

    3、根据编码后的字节查找对照表,拼接成字符串,自此,Base64编码完成!!!

    Base64解码原理:

    1、将编码后的字符串查找对照表后的字节以4个字节为一组,出现=直接去掉即可

    2、将这4个字节每个字节的高两位去掉,有32bit变为24bit,将这24bit以8个bit构成三个字节

    3、将第二步得到的字节数组转为字符串即可!!!

    附上python脚本(ps:由于markdown问题,所以有需要的主机更改一下某些地方的缩进):

def Base64Decode(str_list):
list_base = []
a = str_list[0] << 2
c = str_list[1] & 15
b = str_list[1] >> 4
a = a | b
list_base.append(a)
c = c << 4
a = str_list[2] & 3
b = str_list[2] >> 2
c = c | b
list_base.append(c)
a = a << 6
a = a | str_list[3]
list_base.append(a)
return list_base CodingTable = 'vwxrstuopq34567ABCDEFGHIJyz012PQRSTKLMNOZabcdUVWXYefghijklmn89+/'
Ciphertext = '5rFf7E2K6rqN7Hpiyush7E6S5fJg6rsi5NBf6NGT5rs=' i = 0
flag = 'flag{' while i <= (len(Ciphertext) - 1):
list1 = []
n = 0
for k in range(4):
if Ciphertext[i + k] == '=':
list1.append(0)
n = n + 1
else:
list1.append(CodingTable.index(Ciphertext[i + k]))
ba = Base64Decode(list1)
for j in range(3 - n):
ch = chr(ba[j])
flag = flag + str(ch)
i = i + 4 flag = flag + '}'
print(flag)

日常破解--XCTF easy_apk的更多相关文章

  1. 日常破解---XCTF_APP1获取flag记录

    日常破解---XCTF_APP1获取flag记录 一.题目来源   来源:XCTF社区安卓题目app1 二.解题记录     1.首先安装到模拟器中运行一下,如下图所示,点击一下按钮,弹出提示年轻人不 ...

  2. 日常破解--从XCTF的app3题目简单了解安卓备份文件以及sqliteCipher加密数据库

    一.题目来源     题目来源:XCTF app3题目 二.解题过程     1.下载好题目,下载完后发现是.ab后缀名的文件,如下图所示:     2.什么是.ab文件?.ab后缀名的文件是Andr ...

  3. 开发神器之phpstorm破解与日常使用

    PhpStorm 是 JetBrains 公司开发的一款商业的 PHP 集成开发工具,旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查. PhpStorm可随时帮助用 ...

  4. 【CentOS】Linux日常管理

    /////////////////////////目录///////////////////////////////////////// 一.日常监控指标相关 1.监控系统状态命令 2.查看系统进程 ...

  5. 如何破解Excel文档的编辑密码

    对于Excel文档我们不仅可以设置打开密码,还可以设置几天几种密码,比如编辑密码.编辑密码又称写保护密码,是一种可以限制编辑权限的密码.如果我们在日常工作中发现自己忘记了excel编辑密码的话,那就需 ...

  6. 【.net程序破解】实战之标志位破解绕过注册法

    今天有时间玩了下一个不错的软件Advanced System Cleaner,可惜要注册 于是想办法给破解了,这是跟之前不同的地方,属于.NET破解教程: 软件地址 - http://www.crsk ...

  7. Windows server 2008 R2远程桌面终端连接数的破解

    Windows server 2008 R2远程桌面终端连接数的破解 日常工作中,经常需要远程连接到服务器上,然而在公司里,老总.同事都需要连接到服务器上,而默认的服务器系统同时连接的最大连接数只有2 ...

  8. 怎样破解邮箱password

    破解邮箱password怎样破解邮箱password邮箱在我们的生活中日益成为一个不可或缺的角色.公司与公司之间的商贸往来,学生与老师间的学习交流,以及占非常大部分的私人信件的往来等等非常难离开它.但 ...

  9. 破解密码那些事儿(Hacking Secret Ciphers with Python)

    作者:Al Sweigart   我们在电视和电影里头经常能够看到黑客们兴奋的快速敲击键盘,接着毫无意义的数字就在屏幕上飞奔(比如黑客帝国).然后让大家产生了一种奇妙的错觉,做黑客是一件高大上的事情, ...

随机推荐

  1. Tricks of Android's GUI

    Tricks of Android's GUI */--> Tricks of Android's GUI 1 layoutweight In LinearLayout, the default ...

  2. [LC] 47. Permutations II

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

  3. Android下的鉴权实现方案

    软件原理 不赘述,参考: 软件License认证方案的设计思路 License文件离线鉴权 机械指纹,不可逆的加密算法,如MD5 功能鉴权,可逆的不对称加密算法,服务端公钥加密,app端私钥解密,如R ...

  4. labview状态机

    状态机主要由3部分组成,包括一个while循环,一个条件结构,以及while循环的移位寄存器,其中while循环用于保证程序的持续运行,条件结构用于处理不同状态的执行,移位寄存器用于实现从一个状态跳转 ...

  5. highcharts series几种写法

    一.数据列 数据列是一组数据集合,例如一条线,一组柱形等.图表中所有点的数据都来自数据列对象,数据列的基本构造是: series : [{ name : '', data : [] }] 提示:数据列 ...

  6. “冰桶挑战”之外:微软科技助力ALS患者

    编者按:"直到ALS出现治疗方法,科技就是我的解药."ALS患者,前美国橄榄球联盟(NFL)球员Steve Gleason如是说.最近,一支微软首届黑客马拉松(Hackathon) ...

  7. ionic3懒加载IonicPage使用报错

    ionic3.X版本有不少亮点.作为从angular1到ionic1.ionic2一直用它们开发单页面应用的使用者来说,一直存在的一个痛点就是,将整个项目作为网页不打包成app的话,第一次加载时间太长 ...

  8. drf分页组件补充

    drf偏移分页组件 pahenations.py from rest_framework.pagination import LimitOffsetPagination class MyLimitOf ...

  9. php 克隆 clone

    php 克隆 clone 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值, ...

  10. Docker For Mac 下安装 Rancher

    https://www.jianshu.com/p/5fb3e1a998d6 Docker For Mac 下安装 Rancher 原文:如何在 OS X 上安装 Rancher Rancher 是 ...