吾爱破解2023安卓中级题

news2024/9/24 19:20:55

先来看看APP界面

image.png

拖到jadx,see see java 源码

image.png

关键是要让代码跳转到这里,我这里主要是修改smali,然后重新签名打包,当然,你也可以用frida或者objection hook 传参

image.png

模仿下面的两行代码,在位置1插入

:cond_63
:goto_63

然后,修改上面的两个if判断,重新打包,跳转成功

image.png

过了这个,但还是啥都没有,只跳出一句话,再看源码,注意到两处可疑的地方

image.png

image.png

将apk改成压缩包,在里面找到 aes.pnglib52pj.so 两个文件

先以文本形式打开 aes.png,得到一大段意义不明的文本

image.png

有点像是base64编码,decode一下

image.png

还是不明所以,先放一边……💀💀💀

再来分析so,拖到 IDA Pro 分析

image.png

进入 Java_com_zj_wuaipojie2023_12_MainActivity_decrypt 函数内部

image.png

image.png

这里可以确定加密算法是AES,模式是ECB,填充是PKCS7,|wfkuqokj4548366 刚好16位长度,疑似密钥

到**CyberChef**试试就知道了,显示参数出错,果然没那么简单 😥

image.png

到这里没什么头绪,看沐阳大佬说可以用unidbg下断点,但我一直找不到那个点,逛论坛发现有佬把get_RealKey扣了出来(好吧,我是菜🐶 )

int main() {
    char key[] = "|wfkuqokj4548366";
    char add_mask[] = { 0xFB, 0xFE };
    for (int i = 0; i < sizeof(key) - 1; i ++)
        key[i] += add_mask[i & 1];
    printf("key = '%s'\n", key);
}

运行拿到真实的key wuaipojie2023114

image.png

拿到 cyber 上面,再增加一个 From Hex,得到结果如下:

image.png

把结果保存成图片,得到表情包一枚 😂

image.png

按理说flag应该就藏在这张图里面了,Cyber 再加一个 To Hexdump,观察到有两个PNG的标志

image.png

也就是上面那张表情包,其实是两张图片拼凑而成,大佬们推荐的是用 010editor 拆分图片,我没用过这软件,也懒得去下 😂

仔细想想,图片就是二进制数据,也就是 byte,能不能用python来拆呢?答案是肯定的

data = open("download.png", "rb").read()

先获取字节,然后观察到有两个 \x89PNG

image.png

拿第二个PNG,因为第一个其实就是上面那张表情包,第二个才是隐藏的图片,相当于被覆盖了

\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00d\x00\x00\x00d\x08\x06\x00\x00\x00p\xe2\x95T\x00\x00\x00\x01sRGB\x00\xae\xce\x1c\xe9\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x03\x8cIDATx\x9c\xed\x9c\xdbn\xc30\x0cC\x9ba\xff\xff\xcb\xddS\x80\xcd\xa8JQ\x92\x1b"\xe3y[\x93\xd8.d\xce\xba5\xc7\xf3\xf9|>\x8c\x0c_W/\xc0\xfc\xc5\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xe3\xbb\xf2\xd0q\x1c\xa5\xc9\xd6<\xe69\x0e\xcao\xa2\xf9\xce\xe7\xd7\xfb\xb2\xe3\xa2uM}\xdf\x0cV\x88\x18%\x85\x9cdw\xc0\xba\xc3\xd0\x0e\x8c\xc6\x8d>G;=\x82\x9d\xa7\xfa}\x19\xac\x101Z\n9\x89v\x04\xdaih\'E\xd7\x91\xa2\xb2\xeb\xc9\x9ea\xd9uM\xd4\xfa\xac\x101F\x14R\x05\x9d\t\xd9\xe7\xa3\x9d\x8e\x94\x88\x94uEu\xdb\n\x11\xe3R\x85\xb0;7\xf2\xd6\x10YoN\xa1\xdf\xc3\n\x11cD!U/\xa5\x1a7DqLVAl<\x93}~\x02+D\x8c\x96B:\x11\xe9\xabq\x90\xd7\x84@\n\xaa\xfe\xbd\xaes\'V\x88\x18%\x85L\xfd\x0fe\xb3\xaa\xdd\xackU\x19\x9f\xf4\xbe\xac\x101\xb6\xc4!\xd5,\xebz\x1d)(\xab\xb0\xec}\xd9y\xbb^\xda;\xac\x101Z\x15\xc3\xe9\n`u\x87f\xe3\x92h\x9e\xf5\xf9n=\xa4\x83\x15"\xc61\xf9\x83\x1d\xd6\x7f\xcfzW\xac\xe2X\xaf\xaa:\xdf\x0e\xc5X!b\x8c(\x84\x8dt\xab\x111;>Zgt\xbd\x8a+\x867d\xcb\x19r\xc2F\xc4\xd1x\xec}S5\xf7\xec\xf8\x11\xee\xcb\xba\x01\xa3\x9d\x8b\xbb:\x00\xa3\xf9\xb3\xf1\xc2\x94\x17\xb6\xfb\x0cz<\xac\x109F:\x17Qd\xcc~>\xe5%e\xb3\xb6\xec\x19\xb7\xb3;\xc5\n\x11c\xb4\x1e\x82\xbc\x9cj\x165\x02\xcd\xc3\x9e5\xd1\xe7\xec<\xee\xed\xbd\x11\xad8d\xeaw\x1b\xdd\xec/\x9a\x7f\x9d\'\xab\xe4\xeez\x1c\x87\xdc\x80\x91z\x08\xaaGT\xe3\x02\x96\xee\xfc\xeczvt\xa7X!b\x94\xce\x90\xe9\\Q\x95\xe9\x9cTv}S}d\xaf\xb0B\xc4\xd8\x9a\xed=\x99\xea\x08\xac\xc6)\xd5\x9d\xbf~\x8e\xd61\x11\xc1[!b\x8c\xc4!\xd5.\x93\x93\xa9\xec\xe9\xae\xca\xe3\xce\xfa\xc7\x8a\x15"\xc6\xe8\xef\xd4\xab^O\xf4\xbfwz\xe7f\xb3\xd2l\x8e\xcb\xd9\xde\x1b3R1\xccf\x7f\xab\xf5\x86\xea\xfc\xd9\xf5D\xe3\xb0\xdd-\xee\xed\xbd!\x1f\xc9\xf6f\xefg\x9fc\x15\xd8\xdd\xd9\xdd~\xb3\x0cV\x88\x18[\xdf\x06\xd4\xcd\xeaf\xbb@\xd0\xba\xd8\x9a>\xba\xcf5\xf5\x7f\xc4h=\xe4\x04\xd5\x17\xb2d\xeb\x14\xa8\xfe\xc1\xe6\xa6\xaa\xf5\x0c{Y7dk\xd7\t[\xbb\xae\xee\xe4\xee\x0e\xcf*\x0ba/\xeb\x86l\xfd\x05\xd5t\x1fVv\xfe\x95n|\xb2\x8e\xb3\x13+D\x8c\xad\xb9\xac\xf5\xfe\xa9\x9a5{Fe\xb3\xc4l\x0e-\x9ao\xfd\x9c\xc1\n\x11c\x8b\x97\x85\xeecw\x12\x9b\xa5\x9d\x82\xcdFW\xe3\xad\xdfX!b\\\xfa\xee\xf7h\xbcl\x9c\x83\xae\xb3\xf1\t\xca\x99M\x9f\x95\xaf\xb0B\xc4\xb8\xe4\xdd\xef\xd18\xd9\xacj\xf5\xcc\xa9V(\xa7+\xa2\xef\xb0B\xc4\xb8\xe4\xdd\xef\xd5\xebl\xd7\tR\x04:c\xaa9\xb1\x0eV\x88\x18\x97\xbc\xd9\xba\x1a\xb1O\xf5\xf6\xb2Y\xe8\xe8z\xb5O\xec\x1dV\x88\x18\x12\xef~_\x15\xc0z)\xdd\xfe(6\xeeA\x9d\x90\x8eCn\xc4%\xef~_\x9f\xfbt\x8d\x1b\xc5\r\xd5\x8e\xc6\xec\xf5wX!b\\\xfa\xee\xf7\xae\x97\x92\xf5\x8a\xd6\xf9\xd0z\xd0|\xecs\x0cV\x88\x18\xa35u\xd3\xc7\n\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xc3\x06\x11\xe3\x07\x00\xbc\xbf\xd9\x88\x91.k\x00\x00\x00\x00IEND\xaeB`\x82

另存到一张图片

with open("code2.png", "wb") as p:
	p.write(png_1)

结果是一张二维码,扫码就能得到 flag{Happy_New_Year_Wuaipojie2023} 了

image.png

第一次玩这种比较有难度的CTF,感觉这玩意太考经验和综合能力了 🤐🤐🤐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/340668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

循环队列来了解一下!!

笔者在之前的一篇文章&#xff0c;详细的介绍了&#xff1a;队列之单向链表与双向链表的模拟实现&#xff1a;https://blog.csdn.net/weixin_64308540/article/details/128742090?spm1001.2014.3001.5502 感兴趣的各位老铁&#xff0c;可以参考一下啦&#xff01;下面进入循环…

基于Java+SpringBoot+Vue前后端分离酒店管理系统设计与实现

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建、毕业项目实战、项目定制✌ 博主作品&#xff1a;《微服务实战》专栏是本人的实战经验总结&#xff0c;《S…

linux系统常用命令

目录 一、系统介绍 二、Linux常用命令 1、Linux命令格式 2、文件目录操作命令&#xff1a;ls 3、文件目录操作命令&#xff1a;cd 4、文件目录操作命令&#xff1a;cat 5、文件目录操作命令&#xff1a;more 6、文件目录操作命令&#xff1a;tail 7、创建文件命令&…

【三维点云】01-激光雷达原理与应用

文章目录内容概要1 激光雷达原理1.1 什么是激光雷达&#xff1f;1.2 激光雷达原理1.3 激光雷达分类三角法TOF法脉冲间隔测量法幅度调制的相位测量法相干法激光雷达用途2 激光雷达安装、标定与同步2.1 激光雷达安装方式考虑因素2.2 激光雷达点云用途2.3 数据融合多激光雷达数据融…

Rust学习入门--【7】Rust 数据类型

类型系统 对于任何一门语言都是重中之重&#xff0c;因为它体现了语言所支持的不同类型的值。 类型系统 也是 IT 初学者最难啃的三座大山之一&#xff0c;而类型系统之所以难以理解&#xff0c;主要是没有合适的现成的参考体系。 我们说类型系统 存在的目的&#xff0c;就是 …

【代码随想录】-动态规划专题

文章目录理论基础斐波拉契数列爬楼梯使用最小花费爬楼梯不同路径不同路径 II整数拆分不同的二叉搜索树背包问题——理论基础01背包二维dp数组01背包一维数组&#xff08;滚动数组&#xff09;装满背包分割等和子集最后一块石头的重量 II目标和一和零完全背包零钱兑换 II组合总和…

JVM学习03:垃圾回收

JVM学习03&#xff1a;垃圾回收 1、如何判断对象可以回收 1.1、引用计数法 记录当前对象被引用的次数&#xff0c;当引用次数为0时则进行垃圾回收。缺点&#xff1a;当两个对象互相引用但并没有其他对象再引用它们时&#xff0c;他们的引用次数都为1&#xff0c;无法对其进行…

Spring Security in Action 第三章 SpringSecurity管理用户

本专栏将从基础开始&#xff0c;循序渐进&#xff0c;以实战为线索&#xff0c;逐步深入SpringSecurity相关知识相关知识&#xff0c;打造完整的SpringSecurity学习步骤&#xff0c;提升工程化编码能力和思维能力&#xff0c;写出高质量代码。希望大家都能够从中有所收获&#…

牛客寒假集训营6 E 阿宁的生成树

E-阿宁的生成树_2023牛客寒假算法基础集训营6 (nowcoder.com)开始慢慢补牛牛的题题意&#xff1a;最小生成树质数距离思路&#xff1a;最小生成树一共就两种算法&#xff0c;我们考虑Prim的过程初始连通块是1&#xff0c;然后考虑拿1和其他的结点连边当j-i<k时边权是gcd&…

【JavaSE】方法的使用

方法的使用BIT-5-方法的使用绪论1. 方法概念及使用1.1什么是方法1.2 方法定义1.3 实参和形参的关系&#xff08;重要&#xff09;1.4 没有返回值的方法2. 方法重载2.1 为什么需要方法重载2.2 方法重载概念3. 递归3.1 生活中的故事3.2 递归的概念3.2 递归执行过程分析3.3 递归练…

C++之异常处理

异常异常是面向对象语言处理错误的一种方式。当一个函数出现自己无法处理的错误时&#xff0c;可以抛出异常&#xff0c;然后输的直接或者间接调用者处理这个错误。语法捕获全部的异常try {//可能抛出异常的代码//throw异常对象 } catch(...) {//不管什么异常&#xff0c;都在这…

Java之动态规划之子序列问题

目录 0.动态规划问题 一.最长递增子序列 1.题目描述 2.问题分析 3.代码实现 二.最长递增子序列 1.题目描述 2.问题分析 3.代码实现 三.最长重复子数组 1.题目描述 2.问题分析 3.代码实现 4.代码的优化(滚动数组) 四.最长公共子序列 1.题目描述 2.问题分析 3.代…

C语言学习笔记(五):数组的使用

数组的定义 数组是一组有序数据的集合。数组中各数据的排列是有一定规律的&#xff0c;下标代表数据在数组中的序号。 用数组名和下标即可唯一地确定数组中的元素。 数组中的每一个元素都属于同一个数据类型。 一维数组 定义与引用 int a[10] {0,1,2,3,4,5,6,7,8&#xf…

Matlab绘制隐函数总结-二维和三维

1.二维隐函数 二维隐函数满足f(x,y)0f(x,y)0f(x,y)0&#xff0c;这里无法得到yf(x)yf(x)yf(x)的形式。不能通过普通函数绘制。 我们要关注的是使用fplot函数和fimplicit函数。 第1种情况&#xff1a;基本隐函数 基本的隐函数形式形如&#xff1a; x2y22x2(x2y2)12x^{2}y^{…

【Qt】Qt 隐式共享

文章目录一、导读二、隐式共享简介三、源码角度分析隐式共享四、隐式共享在开发中的使用五、隐式共享迭代器问题六、隐式共享类和线程一、导读 在实际开发中&#xff0c;Qt中很多类可以直接作为函数参数传递&#xff0c;这样做是为了什么&#xff1f;其背后的实现机制又是什么…

进程,线程

进程是操作系统分配资源的基本单位&#xff0c;线程是CPU调度的基本单位。 PCB&#xff1a;进程控制块&#xff0c;操作系统描述程序的运行状态&#xff0c;通过结构体task,struct{…}&#xff0c;统称为PCB&#xff08;process control block&#xff09;。是进程管理和控制的…

#电子电气架构——Vector工具常见问题解决三板斧

我是穿拖鞋的汉子,魔都中一位坚持长期主义的工科男。 今天在与母亲聊天时,得到老家隔壁邻居一位大姐年初去世的消息,挺让自己感到伤感!岁月如流水,想抓都抓不住。想起平时自己加班的那个程度,可能后续也要自己注意身体啦。 老规矩,分享一段喜欢的文字,避免自己成为高知…

千锋教育嵌入式物联网教程之系统编程篇学习-03

目录 进程的终止 exit函数 _exit函数 进程退出清理 进程间的替换 进程间通信 常见通信机制 进程间通信的实质 信号 产生信号的方式 信号的默认处理方式 进程对信号的处理方式 kill函数 进程的终止 使用exit函数对进程进行终止&#xff0c;而return只是结束函数&a…

电子技术——共模抑制

电子技术——共模抑制 我们在之前学习过&#xff0c;无论是MOS还是BJT的差分输入对&#xff0c;共模信号并不会改变漏极电流的大小&#xff0c;因此我们说差分输入对共模信号无响应。但是实际上由于各种客观非理想因素&#xff0c;例如电流源有限阻抗等&#xff0c;此时共模是影…

LINUX提权入门手册

前言 发点存货 LINUX权限简介 在学习提权之前我们先了解一下linux里面的权限我们使用命令: ls -al即可查看列出文件所属的权限&#xff1a; 文件头前面都有一段类似的字符&#xff0c;下面我们仔细分析一下里面符号分别代表什么。 -rw-r--r-- 1 root root 第一个符号-的…