攻防世界-mobile-easy-app详解
序言
这道题网上很多分析,但是分析的都是arm版本的,我选了arm64的来分析,arm64相比arm难度高一些,因为arm64编译器搞了inline优化,看起来略抽象
分析
这道题逻辑很简单,输入flag然后一个check函数验证,check函数是c层的,但是arm32和arm64差别很大,给大家瞄一眼,先32后64
可以看到,32位的逻辑非常清晰,拿到char*之后,弄成std::string,之后sub_9670函数对比是否是flag{开头,往后CheckM函数把flag{xxx}中的xxx的左16和右16组合在一起,形成一个32字节的字符串,之后check1进行一些简单的逻辑运算,再往后的encry是一个tea,之后是一个魔改的base64,就完事,逻辑很简单,但是到了arm64,就很难看了

说说主要的区别吧,首先是内联了很多函数,可以看到sub_9670已经没了,encry函数也没了,代码的复杂度提高了很多,还有就是,函数的返回值不按套路出牌,不放在x0寄存器中,不知道放在哪里,得去动态看才知道,比如check1之后的返回值,arm32中一看就知道是指针接受了返回值,但在arm64中莫名其妙放在了一个其他地方。
string内存结构问题问题
接下来说说,是怎么分析解决arm64的,首先,经过看这个so的代码以及一些搜索,发现string的内存结构为,string的大小为3个dq(8个字节),24字节,如果字符串小于0x17,那么首字节存放字符串长度乘以2,第二个字节开始放字符串内容;如果是长字符串,那么第一个dq放的是容量,并且这个容量会是奇数,也就是&&1会=1;编译器也是通过这个标志位判断是长字符串还是短字符串,第二个dq放的是字符串的真实长度,第三个dq放的是一个char*,指向真实的字符串;另外一个关于string的问题是,string的很多内部细节也被inline出来了,比如动态扩容,这部分的特征是,会出现一个grow_by_函数,这个函数执行扩容的细节,细节不说了,紧跟这个grow_by_函数后,会看到设置字符串长度的代码,根据这两个特征就能知道实在动态扩容了;
参数乱放问题
函数返回值不是放在x0,会放在莫名奇妙的地方,栈上的某个地方,这一块我采用的解决办法是用frida的stalker trace来分析,非常爽,文末会附上trace脚本
题目其他的一些细节
tea的秘钥是so中的init_array的一个函数设置的,base64的表是在jni_onload中设置的
其余并没有什么特别之处了,这里着重想推荐两个好用的技巧
两个技巧
stalker trace
根据yang神首创,经过奋飞小改,之后我在改一点,已经能用了,脚本主要功能是从给定的地址开始trace,trace从这个地址开始后的size长度的代码,会把执行完每一条汇编之后的影响打印出来,寄存器变化,内存的变化,以及内存中的字符串或者u64打印出来,文末也会附上trace check函数后的效果,大体是这样
z3
z3是一个强大的约束求解器,一些琐碎的逻辑用z3比较好求出来,不然的话得人工取反推实现,这里用来解决check1中的逻辑,我们只需要按照正向逻辑按照z3的api写出约束条件,在调用求解器求解,即可得出输入
相关文章:
攻防世界-mobile-easy-app详解
序言 这道题网上很多分析,但是分析的都是arm版本的,我选了arm64的来分析,arm64相比arm难度高一些,因为arm64编译器搞了inline优化,看起来略抽象 分析 这道题逻辑很简单,输入flag然后一个check函数验证&a…...
【简单介绍下爬山算法】
🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…...
Android App启动流程和源码详解
前言 之前看了些App启动流程的文章,但是看得很浅显,隔了没多久就忘了,自己抓耳挠腮的终于看完了,看得头疼哦。因为很多是个人理解,大哥们主打一个7分信,2分思考,1分怀疑哈。 主要看的源码是An…...
SQL的多表联查
这里我先附上两张表的数据: Orders 表: OrderIDCustomerID1321324NULL Customers 表: CustomerIDCustomerName1Alice2Bob3Charlie4David INNER JOIN 🤝 概念: INNER JOIN(内连接)返回两个表中匹配的记录。如果某条…...
瑞芯微RV1126——人脸识别源码分析
本节内容主要分为3部分,第一部分是流程结构图;第二部分为人脸识别代码流程;第三部分为具体的代码分析。 1.流程结构图 2.人脸识别代码流程 1、人脸数据的初始化: init_all_rockx_face_data();init_face_data();2、创建rtsp会话,这里包括发…...
springboot 两个相同类型的Bean使用@Resouce加载
问题描述 有两个相同类型的Bean 使用Service等注解注入或者Bean注入启动以后报错: qualifying bean of type com.fasterxml.jackson.databind.ObjectMapper available: expected single matching bean but found 2提示有相同的类型两个。 解决 * 每个Bean Resour…...
代码随想录算法跟练 | Day3 | 链表Part1
个人博客主页:http://myblog.nxx.nx.cn 代码GitHub地址:https://github.com/nx-xn2002/Data_Structure.git Day3 203.移除链表元素 题目链接: https://leetcode.cn/problems/remove-linked-list-elements/ 题目描述: 给你一个…...
虚拟化技术[1]之服务器虚拟化
文章目录 虚拟化技术简介数据中心虚拟化 服务器虚拟化服务器虚拟化层次寄居虚拟化裸机虚拟化VMM无法直接捕获特权指令解决方案 服务器虚拟化底层实现CPU虚拟化内存虚拟化I/O设备虚拟化 虚拟机迁移虚拟机动态迁移迁移内容:内存迁移迁移内容:网络资源迁移迁…...
WPF之容器标签之Canvas布局标签
Canvas: 定义一个区域,可在其中使用相对于 Canvas 区域的坐标以显式方式来定位子元素。 实例 可以在子标签使用Canvas属性设置定位 <Canvas Width"500" Height"300"><StackPanel Width"100" Height"100"Backgro…...
AIGC绘画设计基础-建筑设计应用
一、AI及AIGC 对于AI大家都不陌生,但是AIGC这个概念好多人其实不大清楚。“AI”是指人工智能技术本身,而“AIGC”是指基于人工智能技术而生成的内容。 生成式人工智能——AIGC(Artificial Intelligence Generated Content)&…...
Pinia:状态管理库
Pinia 为vue设计的一个现代化的状态管理库,vue3生态系统中的一个核心组件, 专为利用Vue3的新特性设计,替代Vuex称为Vue应用的状态管理标准,提供了更简洁的API,更好的类型安全,以及易于调试的功能 状态管理 在前端应用开发中,用来集中管理和协调应用程序状态的一种工具.在这…...
Mokito的一些API
Mockito是一个Java单元测试框架,它允许开发者创建和配置模拟对象(mock objects),以便在隔离的环境中测试代码,尤其是当实际对象难以构造或其行为不确定时。下面是一些核心的Mockito API及其使用场景和代码示例。 基础…...
前端已死? Bootstrap--CSS组件
目录 Bootstrap 下载 Bootstrap--全局CSS样式 栅格系统 栅格参数 正常显示 实例 代码演示: 排版 代码演示 表格 代码演示 表单 代码演示 等等...(文档很清晰了) Bootstrap--组件 结合演示:(页面) Bootstrap Bootstrap v3 中文文档 Bootstrap 是最受欢迎的 HT…...
codewars check_same_case 题解
题目 编写一个函数来检查两个给定的字符是否大小写相同。 如果任何字符不是字母,则返回-1如果两个字符大小写相同,则返回1如果两个字符都是字母且大小写不同,则返回0 例子 a并g返回1A并C返回1b并G返回0B并g返回00并?返回-1题解 1 此题主…...
【Text2SQL 经典模型】X-SQL
论文:X-SQL: reinforce schema representation with context ⭐⭐⭐⭐ Microsoft, arXiv:1908.08113 X-SQL 与 SQLova 类似,使用 BERT style 的 PLM 来获得 representation,只是融合 NL question 和 table schema 的信息的方式不太一样&#…...
蓉耀·时尚双子星------Yestar艺星首家星美学概念院璀璨启航
在医美行业的璀璨星空中,一颗新星于蓉城冉冉升起,点亮了求美者的道路。5月21日,蓉耀•时尚双⼦星--Yestar艺星首家星美学概念院在成都复城国际璀璨启幕,标志着Yestar艺星全球战略布局在蓉城迈出了重要一步,也意味着其在…...
Undet for SketchUp 2023.3 点云建模软件 支持支持草图大师sketchup2021-2022-2023
1.Undet for sketchup 2023.3支持草图大师sketchup2021-2022-2023。支持机载雷达扫描、车载扫描还是地面扫描,对AEC行业用户来说,真正需要的是如何将这些数据快速处理为三维模型,这样才能将这些信息延展到BIM领域发挥效用。因此面对这些海量的…...
CHI dataless 传输——CHI(4)
上篇介绍了read的操作类型,本篇我们来介绍一下dataless 目录 一、dataless操作概览 二、Non-CMO (Non-Cache Maintenance Operation) 1、CleanUnique 2、StashOnce and StashOnceSep 3、Evict 三、CMO (Cache Maintenance Operation) 一、dataless操作概览 名…...
vue3第三十节(vue3 vite中使用sass)
引言:什么是Sass? Sass(Syntactically Awesome Style Sheets)是一种CSS预处理器,它扩展了CSS的功能,提供了更高级的语法和特性,例如变量、嵌套、混合、继承和颜色功能等,这些特性可以帮助开发…...
blender 烘焙渲染图片,已经导出fbx,导出贴图。插件生成图片
1.新建一个模型。选择资产浏览器的材质,并拖动到模型身上,如下图。资产浏览器的材质可以网上找。 2.打开着色器面板。正下方着色器窗口中,点击空白取消选择,然后右击-添加-着色器-原理化BSDF,右击-添加-纹理-图像纹理。…...
Zotero PDF Preview:在文献库中无缝预览PDF的终极指南
Zotero PDF Preview:在文献库中无缝预览PDF的终极指南 【免费下载链接】zotero-pdf-preview Preview Zotero attachments in the library view. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-pdf-preview 在学术研究和文献管理工作中,频繁…...
解放B站缓存:m4s-converter让你的视频资产重获自由
解放B站缓存:m4s-converter让你的视频资产重获自由 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 穿透格式迷雾:解码m4s…...
2026届最火的六大降AI率神器实际效果
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要是针对知网那AI检测系统而言,要想降低文本被识别成是AI生成的概率,…...
终极文档下载神器:一键获取全网免费文档的完整指南
终极文档下载神器:一键获取全网免费文档的完整指南 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决…...
完整B站字幕提取解决方案:三步搞定视频字幕获取与转换
完整B站字幕提取解决方案:三步搞定视频字幕获取与转换 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 你是否曾经在B站看到精彩的教学视频,…...
保姆级教学:FLUX.1文生图+SDXL Prompt风格,从环境准备到图片生成的完整流程
保姆级教学:FLUX.1文生图SDXL Prompt风格,从环境准备到图片生成的完整流程 你是否曾经遇到过这样的困扰:明明输入了详细的描述词,但生成的图片却与预期相差甚远?或者尝试混合多种风格时,结果变得不伦不类&…...
COMSOL 6.1版本皮秒多脉冲激光烧蚀模型:双温变形几何烧蚀模拟系统——电子晶格温度清晰解...
COMSOL 6.1版本 皮秒多脉冲激光烧蚀模型 模型内容:涉及双温模型,变形几何,烧蚀,皮秒脉冲热源,电子、晶格温度 优势:模型注释清晰明了,各个情况都有涉及可参考性极强,可以修改&#x…...
openclaude:模型接入 Code 工具链
作为一名长期关注人工智能工程化落地的开发者,我深知本地大模型在隐私保护和成本控制上的优势,但往往苦于缺乏像 Claude Code 那样强大的工具调用能力。很多时候,我们拥有强大的模型(如 DeepSeek、Ollama 本地部署)&am…...
ArduinoEigen:嵌入式平台轻量级Eigen线性代数库移植
1. ArduinoEigen:面向嵌入式平台的轻量化Eigen线性代数库移植1.1 项目定位与工程价值ArduinoEigen 是一个专为资源受限嵌入式平台定制的 Eigen 线性代数库移植版本,其核心目标并非简单地将桌面级 C 数值计算库“搬上”MCU,而是通过深度裁剪、…...
百川2-13B-4bits量化版API优化:降低OpenClaw任务Token消耗20%
百川2-13B-4bits量化版API优化:降低OpenClaw任务Token消耗20% 1. 问题背景与优化动机 上周在调试OpenClaw自动化流程时,我发现一个奇怪现象:同样的文件整理任务,在不同时段运行时消耗的Token数量差异能达到30%。作为个人开发者&…...
