Android逆向题解 攻防世界难度4- Android2.0
Jeb打开apk
关键代码在Native函数getResult

IDA 打开 so
发现代码比较简单,可以直接静态分析。
输出字符串也就是flag 长度是15,然后分成三段,第一段是可以整除3,第二段是除3取余=1,第三段是除3取余等于2;
bool __fastcall Java_com_example_test_ctf03_JNI_getResult(JNIEnv *a1, int a2, int a3)
{int v3; // r4const char *v4; // r8char *v5; // r6char *v6; // r4char *v7; // r5int i; // r0int j; // r0v3 = 0;v4 = (*a1)->GetStringUTFChars(a1, a3, 0); //输入字符串if ( strlen(v4) == 15 ) //判断输入字符串长度==15{v5 = malloc(1u);v6 = malloc(1u);v7 = malloc(1u);Init(v5, v6, v7, v4, 15); //输入字符串分成三段if ( !First(v5) ) //第一部分比较return 0;for ( i = 0; i != 4; ++i )v6[i] ^= v5[i];if ( !strcmp(v6, " 5-\x16a") ) //第二部分比较{for ( j = 0; j != 4; ++j )v7[j] ^= v6[j];return strcmp(v7, "AFBo}") == 0; //第三部分比较}else{return 0;}}return v3;
}Init 字符串分成三段
int __fastcall Init(int result, char *a2, char *a3, const char *a4, int a5)
{int v5; // r5int v6; // r10int v7; // r6if ( a5 < 1 ){v6 = 0;}else{v5 = 0;v6 = 0;do{v7 = v5 % 3;if ( v5 % 3 == 2 ) //除3取余 == 2 是第3段{a3[v5 / 3u] = a4[v5];}else if ( v7 == 1 ) //除3取余 == 1 是第2段{a2[v5 / 3u] = a4[v5];}else if ( !v7 ){++v6;*(result + v5 / 3u) = a4[v5]; //除3是第1段}++v5;}while ( a5 != v5 );}*(result + v6) = 0;a2[v6] = 0;a3[v6] = 0;return result;
}
计算第一段
就是一个异或运算,注意这里只计算了4位,第5位不用算就是“l”;
First处理第一段
bool __fastcall First(char *a1)
{int i; // r1for ( i = 0; i != 4; ++i )a1[i] = (2 * a1[i]) ^ 0x80; //经过运算后判断是否== LN^dl ,先乘以2再异或0x80, 反推就是用 LN^dl先异或0x80再除以2return strcmp(a1, "LN^dl") == 0;
}
可以算出第一段的值是 fgorl
char[] chars = new char[]{'L','N','^','d','l'};char[] res = new char[5];for (int i = 0; i < 4; i++) {res[i] = (char) ((chars[i] ^ 0x80)/2);}res[4] = 'l';System.out.println(res);
计算第二段
第二段也是一个异或,同样也只算4位,第5位不用异或计算。注意这里的v5 不是上面计算出来的第一段的值,是上面异或之后的也就是“LN^dl” ,
for ( i = 0; i != 4; ++i )v6[i] ^= v5[i];if ( !strcmp(v6, a5A) )
可以算出第二段的值 是 l{sra
char[] c2 = new char[]{0x20,0x35,0x2D,0x16,0x61}; //a5Achar[] r2 = new char[5];for (int i = 0; i < 4; i++) {r2[i] = (char) (chars[i]^c2[i]); //chars 是上面的 LN^dl}r2[4] = 0x61;System.out.println(r2);
计算第三段
一样的套路,还是异或计算4位,第5位直接照搬是“}”
for ( j = 0; j != 4; ++j )v7[j] ^= v6[j];return strcmp(v7, "AFBo}") == 0;
可以计算出第三段 是 asoy}
char[] c3 = new char[]{0x41, 0x46, 0x42, 0x6F, 0x7D}; // "AFBo}"char[] r3 = new char[5];for (int i = 0; i < 4; i++) {r3[i] = (char) (c2[i] ^ c3[i]);}r3[4] = 0x7D;System.out.println(r3);
组合起来就是flag
三段数据组合起来就是flag了
第一段:fgorl -------------整除3,对应的下标就是0,3,6,9,12
第二段:l{sra -------------除3余1,对应下标就是1,4,7,10,13
第三段:asoy} -------------除3余2,对应下标就是2,5,8,11,14
组合结果就是:flag{sosorryla}
完整计算代码:
public static void main(String[] args) {char[] chars = new char[]{'L','N','^','d','l'};char[] res = new char[5];for (int i = 0; i < 4; i++) {res[i] = (char) ((chars[i] ^ 0x80)/2);}res[4] = 'l';System.out.println(res);//第二段char[] c2 = new char[]{0x20,0x35,0x2D,0x16,0x61};char[] r2 = new char[5];for (int i = 0; i < 4; i++) {r2[i] = (char) (chars[i]^c2[i]);}r2[4] = 0x61;System.out.println(r2);//第三段char[] c3 = new char[]{0x41, 0x46, 0x42, 0x6F, 0x7D};char[] r3 = new char[5];for (int i = 0; i < 4; i++) {r3[i] = (char) (c2[i] ^ c3[i]);}r3[4] = 0x7D;System.out.println(r3);//还原StringBuilder stringBuilder = new StringBuilder();for (int i = 0; i < 5; i++) {stringBuilder.append(res[i]);stringBuilder.append(r2[i]);stringBuilder.append(r3[i]);}System.out.println(stringBuilder);}
相关文章:
Android逆向题解 攻防世界难度4- Android2.0
Jeb打开apk 关键代码在Native函数getResult IDA 打开 so 发现代码比较简单,可以直接静态分析。 输出字符串也就是flag 长度是15,然后分成三段,第一段是可以整除3,第二段是除3取余1,第三段是除3取余等于2࿱…...
P4155 [SCOI2015] 计划
[SCOI2015] 计划 - 洛谷 核心思路 注意到, 可推出, 表示 战士 走 步到达战士位置。 若可以走到且 r < 终点 则答案 然后再加上自己这个哨兵,和走回自己的一个哨兵即可。 AC 代码 #include<bits/stdc.h> using namespace std…...
今日(2024年8月12日)科技新闻
国内: 航空航天领域 我国成功发射卫星互联网高轨卫星。我国试验性冰川保护项目取得积极成效,被形容为“为冰川盖棉被”。2024西太平洋国际航次科考队起航,开启探秘深海海山之旅。我国首架固定翼海上专业搜救航空器正式列编。“祥云”as700载…...
CP AUTOSAR标准之ECUStateManager(AUTOSAR_SWS_ECUStateManager)(更新中……)
1 简介和功能概述 ECU管理器模块(如本文档中所述)是一个基本软件模块(参见[1]),用于管理ECU状态的常见方面。具体来说,ECU管理器模块: 初始化和取消初始化OS、SchM和BswM以及一些基本软件驱动模块。根据请求配置ECU进入休眠和关机状态。管理ECU上的所有唤醒事件ECU管理器模块…...
Java中的中介者模式:解耦复杂系统的有效策略
Java中的中介者模式:解耦复杂系统的有效策略 在软件开发中,随着系统规模的扩大和复杂度的增加,各组件之间的直接交互会导致代码的耦合性增高,从而影响系统的可维护性和可扩展性。为了应对这种复杂性,中介者模式&#…...
transformer(李宏毅老师系列)
自学参考: Transformer:Attention Is All You Need Transformer论文逐段精读 视频课 课件资料 笔记 一、引入 seq2seq:输入一个序列的向量作为input,output的长度由机器自己决定seq2seq model应用: 语音辨识 输入是声音讯号的一串vector 输出…...
XCode15.4真机运行调试
更新Xcode后,没有模拟器内容,而且真机也不显示,编译按钮无法点击,设备在管理运行目标中可见,但无法选中解决方案:下载iOS17.5模拟器,但最坑的是直接点击“Get”下载总是中断,且无法断…...
Google Mock 和 Google Test编写单元测试入门(环境配置、简单执行)
文章目录 环境的配置方法1:从源代码构建第一步:克隆库的源代码第二步:构建库 方法 2:使用 CMake 的 FetchContent示例 CMakeLists.txt 项目的创建项目结构CMakeLists.txt (根目录)main.cpp (示例程序)tests/CMakeLists.txt (测试部…...
shell外壳与Linux权限
🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 文章目录 1.shell命令以及运行原理2. Linux权限的概念3.Linux权限管理3.1 文件访问者的分类…...
越混越好的项目经理做对了哪些事?现在知道还不晚
作为一名项目经理,你最害怕的是什么? 是做不完的项目?延迟的进度条?还是团队人心涣散? 很多人都知道,得人心者得天下,一个成功的领导者,一定是能做到让人心服口服的。如果失去了团…...
haproxy是什么?以及haproxy基础实验
目录 一、什么是负载均衡? 二、为什么要用haproxy? 三、haproxy的基本部署实验: 3.1 基本配置实验 环境准备: 详细步骤: 3.2 haproxy-多进程与多线程实验: 多进程: 多线程:…...
【向量数据库】向量数据库的构建和检索
1、使用 sentence-transformers 将文本编码为向量 安装 sentence-transformers: pip install -U sentence-transformers在 huggingface 下载 all-MiniLM-L6-v2 模型权重(1_Pooling 是文件夹,里面包含一个 config.json 文件)&…...
Mysql基础篇之DQL语言
Mysql基础篇之DQL语言 1. 基础查询特点语法格式闲言碎语 2. 条件查询语法格式条件表达式逻辑表达式模糊查询 3. 排序查询4. 常见函数单行函数1. 字符函数2. 数学函数3. 日期函数4. 流程控制函数5. 其他函数 分组函数 5. 分组查询分组函数语法格式特点 6. 多表连接查询分类SQL 七…...
python async
要使用 Python 的 async 特性编写一个代码,以交替使用两个 AI API 处理数据,您可以按照以下步骤进行。假设这两个 AI API 的调用是异步的,并且我们需要在两个 API 之间轮流处理一组数据。 import asyncio import aiohttp async def call_ap…...
利用QT和FFmpeg实现一个简单的视频播放器
在当今的多媒体世界中,视频播放已成为不可或缺的一部分。从简单的媒体播放器到复杂的视频编辑软件,视频解码和显示技术无处不在。本示例使用Qt和FFmpeg构建一个简单的视频播放器。利用ffmpeg解码视频,通过QWidget渲染解码后的图像,…...
怎么用云手机进行TikTok矩阵运营
TikTok作为炙手可热的社交媒体巨头,已经吸引了亿万用户的目光。随着科技的飞速发展,云手机的出现为TikTok矩阵运营注入了新的活力。本文将深入探讨云手机在TikTok矩阵运营中的实际应用,并分享一系列高效策略与技巧。 (1࿰…...
TCP/IP 协议及其协议号
协议号十六进制协议号协议介绍10x1ICMP (Internet Control Message Protocol)20x2IGMP (Internet Group Management Protocol) 30x3GGP (Gateway-to-Gateway Protocol) 40x4IPv4 (encapsulation) 50x5ST (Stream Protocol) 60x6TCP (Transm…...
【传知代码】机器情绪及抑郁症算法 四(论文复现)
在现代心理健康研究中,抑郁症一直是一个备受关注的课题。随着科学的进步,研究人员逐渐认识到,抑郁症的成因远不止单一因素,而是由复杂的生物学、心理学和社会环境因素交织而成的。最近,MSA(综合性综合性模型…...
C#开启和关闭UAC功能
在开发软件或制作安装包时,有时会需要管理员权限 ,但是又不想弹出UAC对话框。 可以编写一个小工具,检测UAC是否关闭。如果没有关闭,就自动关闭UAC。 实现比较简单, 找到注册表 计算机\HKEY_LOCAL_MACHINE\SOFTWARE…...
LVS的简单配置及对Mysql主从复制的补充
Day 22 LVS的配置 环境准备 DSN() 用来解析各主机的域名和ip地址,配置域名解析huajuan,负责管理其他主机 web1--->web1.tangpin.huajuan web2--->web2.tangpin.huajuan dns--->dns.tangpin.huajuan web1(192.168.2.200) 用nginx…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
