当前位置: 首页 > news >正文

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 发现代码比较简单&#xff0c;可以直接静态分析。 输出字符串也就是flag 长度是15&#xff0c;然后分成三段&#xff0c;第一段是可以整除3&#xff0c;第二段是除3取余1&#xff0c;第三段是除3取余等于2&#xff1…...

P4155 [SCOI2015] 计划

[SCOI2015] 计划 - 洛谷 核心思路 注意到&#xff0c; 可推出&#xff0c; 表示 战士 走 步到达战士位置。 若可以走到且 r < 终点 则答案 然后再加上自己这个哨兵&#xff0c;和走回自己的一个哨兵即可。 AC 代码 #include<bits/stdc.h> using namespace std…...

今日(2024年8月12日)科技新闻

国内&#xff1a; 航空航天领域 我国成功发射卫星互联网高轨卫星。我国试验性冰川保护项目取得积极成效&#xff0c;被形容为“为冰川盖棉被”。2024西太平洋国际航次科考队起航&#xff0c;开启探秘深海海山之旅。我国首架固定翼海上专业搜救航空器正式列编。“祥云”as700载…...

CP AUTOSAR标准之ECUStateManager(AUTOSAR_SWS_ECUStateManager)(更新中……)

1 简介和功能概述 ECU管理器模块(如本文档中所述)是一个基本软件模块(参见[1]),用于管理ECU状态的常见方面。具体来说,ECU管理器模块: 初始化和取消初始化OS、SchM和BswM以及一些基本软件驱动模块。根据请求配置ECU进入休眠和关机状态。管理ECU上的所有唤醒事件ECU管理器模块…...

Java中的中介者模式:解耦复杂系统的有效策略

Java中的中介者模式&#xff1a;解耦复杂系统的有效策略 在软件开发中&#xff0c;随着系统规模的扩大和复杂度的增加&#xff0c;各组件之间的直接交互会导致代码的耦合性增高&#xff0c;从而影响系统的可维护性和可扩展性。为了应对这种复杂性&#xff0c;中介者模式&#…...

transformer(李宏毅老师系列)

自学参考&#xff1a; Transformer:Attention Is All You Need Transformer论文逐段精读 视频课 课件资料 笔记 一、引入 seq2seq&#xff1a;输入一个序列的向量作为input&#xff0c;output的长度由机器自己决定seq2seq model应用: 语音辨识 输入是声音讯号的一串vector 输出…...

XCode15.4真机运行调试

更新Xcode后&#xff0c;没有模拟器内容&#xff0c;而且真机也不显示&#xff0c;编译按钮无法点击&#xff0c;设备在管理运行目标中可见&#xff0c;但无法选中解决方案&#xff1a;下载iOS17.5模拟器&#xff0c;但最坑的是直接点击“Get”下载总是中断&#xff0c;且无法断…...

Google Mock 和 Google Test编写单元测试入门(环境配置、简单执行)

文章目录 环境的配置方法1&#xff1a;从源代码构建第一步&#xff1a;克隆库的源代码第二步&#xff1a;构建库 方法 2&#xff1a;使用 CMake 的 FetchContent示例 CMakeLists.txt 项目的创建项目结构CMakeLists.txt (根目录)main.cpp (示例程序)tests/CMakeLists.txt (测试部…...

shell外壳与Linux权限

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 文章目录 1.shell命令以及运行原理2. Linux权限的概念3.Linux权限管理3.1 文件访问者的分类…...

越混越好的项目经理做对了哪些事?现在知道还不晚

作为一名项目经理&#xff0c;你最害怕的是什么&#xff1f; 是做不完的项目&#xff1f;延迟的进度条&#xff1f;还是团队人心涣散&#xff1f; 很多人都知道&#xff0c;得人心者得天下&#xff0c;一个成功的领导者&#xff0c;一定是能做到让人心服口服的。如果失去了团…...

haproxy是什么?以及haproxy基础实验

目录 一、什么是负载均衡&#xff1f; 二、为什么要用haproxy&#xff1f; 三、haproxy的基本部署实验&#xff1a; 3.1 基本配置实验 环境准备&#xff1a; 详细步骤&#xff1a; 3.2 haproxy-多进程与多线程实验&#xff1a; 多进程&#xff1a; 多线程&#xff1a;…...

【向量数据库】向量数据库的构建和检索

1、使用 sentence-transformers 将文本编码为向量 安装 sentence-transformers&#xff1a; pip install -U sentence-transformers在 huggingface 下载 all-MiniLM-L6-v2 模型权重&#xff08;1_Pooling 是文件夹&#xff0c;里面包含一个 config.json 文件&#xff09;&…...

Mysql基础篇之DQL语言

Mysql基础篇之DQL语言 1. 基础查询特点语法格式闲言碎语 2. 条件查询语法格式条件表达式逻辑表达式模糊查询 3. 排序查询4. 常见函数单行函数1. 字符函数2. 数学函数3. 日期函数4. 流程控制函数5. 其他函数 分组函数 5. 分组查询分组函数语法格式特点 6. 多表连接查询分类SQL 七…...

python async

要使用 Python 的 async 特性编写一个代码&#xff0c;以交替使用两个 AI API 处理数据&#xff0c;您可以按照以下步骤进行。假设这两个 AI API 的调用是异步的&#xff0c;并且我们需要在两个 API 之间轮流处理一组数据。 import asyncio import aiohttp async def call_ap…...

利用QT和FFmpeg实现一个简单的视频播放器

在当今的多媒体世界中&#xff0c;视频播放已成为不可或缺的一部分。从简单的媒体播放器到复杂的视频编辑软件&#xff0c;视频解码和显示技术无处不在。本示例使用Qt和FFmpeg构建一个简单的视频播放器。利用ffmpeg解码视频&#xff0c;通过QWidget渲染解码后的图像&#xff0c…...

怎么用云手机进行TikTok矩阵运营

TikTok作为炙手可热的社交媒体巨头&#xff0c;已经吸引了亿万用户的目光。随着科技的飞速发展&#xff0c;云手机的出现为TikTok矩阵运营注入了新的活力。本文将深入探讨云手机在TikTok矩阵运营中的实际应用&#xff0c;并分享一系列高效策略与技巧。 &#xff08;1&#xff0…...

TCP/IP 协议及其协议号

协议号十六进制协议号协议介绍10x1ICMP (Internet Control Message Protocol)20x2IGMP (Internet Group Management Protocol) 30x3GGP (Gateway-to-Gateway Protocol) 40x4IPv4 (encapsulation) 50x5ST (Stream Protocol) 60x6TCP (Transm…...

【传知代码】机器情绪及抑郁症算法 四(论文复现)

在现代心理健康研究中&#xff0c;抑郁症一直是一个备受关注的课题。随着科学的进步&#xff0c;研究人员逐渐认识到&#xff0c;抑郁症的成因远不止单一因素&#xff0c;而是由复杂的生物学、心理学和社会环境因素交织而成的。最近&#xff0c;MSA&#xff08;综合性综合性模型…...

C#开启和关闭UAC功能

在开发软件或制作安装包时&#xff0c;有时会需要管理员权限 &#xff0c;但是又不想弹出UAC对话框。 可以编写一个小工具&#xff0c;检测UAC是否关闭。如果没有关闭&#xff0c;就自动关闭UAC。 实现比较简单&#xff0c; 找到注册表 计算机\HKEY_LOCAL_MACHINE\SOFTWARE…...

LVS的简单配置及对Mysql主从复制的补充

Day 22 LVS的配置 环境准备 DSN() 用来解析各主机的域名和ip地址&#xff0c;配置域名解析huajuan&#xff0c;负责管理其他主机 web1--->web1.tangpin.huajuan web2--->web2.tangpin.huajuan dns--->dns.tangpin.huajuan web1(192.168.2.200) 用nginx…...

安卓开发者必看:解决Google Play服务报错的5种实战方法(附工具推荐)

安卓开发者必看&#xff1a;解决Google Play服务报错的5种实战方法&#xff08;附工具推荐&#xff09; 在安卓应用开发过程中&#xff0c;Google Play服务&#xff08;Google Play Services&#xff09;的集成几乎是不可避免的——无论是地图服务、支付功能&#xff0c;还是推…...

VLAN配置避坑指南:为什么你的Trunk接口加了PVID还是不通?

VLAN配置避坑指南&#xff1a;为什么你的Trunk接口加了PVID还是不通&#xff1f; 刚接触企业网络的新手工程师们&#xff0c;是否经常遇到这样的困惑&#xff1a;明明按照文档配置了Trunk接口的PVID&#xff0c;设备间的VLAN通信却依然无法建立&#xff1f;这背后往往隐藏着对P…...

MATLAB代码:基于主从博弈的电热综合能源系统DE算法优化动态定价与能量管理

MATLAB代码&#xff1a;基于主从博弈的电热综合能源系统动态定价与能量管理 关键词&#xff1a;主从博弈 电热综合能源 动态定价 能量管理 仿真平台&#xff1a;MATLAB 平台 优势&#xff1a;代码具有一定的深度和创新性&#xff0c;注释清晰&#xff0c;非烂大街的代码&…...

市电转低压直流这事儿玩过的人都知道,反激式拓扑是性价比首选。最近手头刚做完两个工业电源项目,正好拿6W和12W两个方案来唠唠实战细节

220V转12V成熟设计&#xff0c;做过相关认证。 两种电路。 1&#xff09;6W,包含原理图和pcb&#xff0c;附芯片手册&#xff0c;包含变压器设计. 2) 12W,包含原理图和pcb&#xff0c;附 BOM,变压器参数&#xff0c;芯片手册。 备注&#xff1a;方案一芯片比方案二芯片价格偏低…...

自定义安卓图标样式:手把手教你用overlay修改framework-res,避开常见坑

深度定制安卓系统图标&#xff1a;Overlay技术实战与避坑指南 在安卓系统的深度定制领域&#xff0c;图标样式的修改一直是开发者们热衷探索的方向。不同于简单的主题更换&#xff0c;通过修改framework-res中的config_icon_mask参数&#xff0c;可以实现系统级图标样式的全局统…...

Windows USB开发新范式:使用UsbDk突破系统限制实现设备独占访问

Windows USB开发新范式&#xff1a;使用UsbDk突破系统限制实现设备独占访问 【免费下载链接】UsbDk Usb Drivers Development Kit for Windows 项目地址: https://gitcode.com/gh_mirrors/us/UsbDk 痛点识别&#xff1a;传统USB开发面临的挑战 当你尝试在Windows平台上…...

3个步骤实现Windows直接运行安卓应用:开发者与玩家的跨平台解决方案

3个步骤实现Windows直接运行安卓应用&#xff1a;开发者与玩家的跨平台解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为手机应用无法在电脑上运行而困扰…...

从本体论到落地实践:制造业数字化转型的核心逻辑与工具选择

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

Biliup录制工具终极指南:如何合法合规地进行视频录制与上传

Biliup录制工具终极指南&#xff1a;如何合法合规地进行视频录制与上传 【免费下载链接】biliup 自动直播录制、投稿、twitch、ytb频道搬运工具。命令行投稿(B站)和视频下载工具&#xff0c;提供多种登录方式&#xff0c;支持多p。 项目地址: https://gitcode.com/gh_mirrors…...

电机控制新手必看:半桥栅极驱动芯片选型避坑指南(附英飞凌型号推荐)

电机控制新手必看&#xff1a;半桥栅极驱动芯片选型避坑指南&#xff08;附英飞凌型号推荐&#xff09; 在电机控制系统的设计中&#xff0c;半桥栅极驱动芯片的选择往往成为新手工程师的第一个技术挑战。我曾见过不少项目因为驱动芯片选型不当&#xff0c;导致电机运行不稳定…...