23柏鹭杯-misc

news/2025/3/17 14:47:37/文章来源:https://www.cnblogs.com/WXjzc/p/18233590

我记得比赛的时候,misc都是0解。

怎么不算另类的1血呢?

help_me实在不会,arm看不了一点

消失的钥匙

先看验证逻辑,能够看到generateZipPassworddecryptFlag这两个方法内容不见了

截图

通过在apk中寻找半年,找到一个时间不对的classes3.dex,查看hex发现是gz压缩

截图

截图

导出解压一下,拿到了一半的dex

截图

再根据时间线索,找到另一个文件

截图

截图

将两个文件合并,得到完整的dex

截图

getPackageSignature这个方法hook一下,拿到了返回值748124a9239a8f2d79a0de294fbba042

Java.perform(function () {Java.choose('com.example.test.MainActivity',{onMatch: function(instance){console.log(instance.getPackageSignature())},onComplete: function(){}})
})

截图

这里可以确定748124a9239a8f2d79a0de294fbba042是key,com.example.test的MD5取前16位是iv

截图

截图

最后密码是对包名后16位进行aes加密,取16-48位,即231287ee4876a3fed4a34bac962d513e

截图

之后解密

截图

采用fridahook的方式,来直接模拟执行其中的方法

Java.perform(function () {Java.choose('com.example.test.MainActivity', {onMatch: function (instance) {var pwd = '231287ee4876a3fed4a34bac962d513e'var zipContent = instance.zipDecrypt(pwd)let Flag = Java.use("com.example.test.FlagOuterClass$Flag").$new();let flagContent = Flag.parseFrom(zipContent)var key = flagContent.getKey()var iv = flagContent.getIv()var keyString = Java.use('java.lang.String').$new(key) //转成Java中的String,来获得getBytes方法var ivString = Java.use('java.lang.String').$new(iv)let AESUitls = Java.use('com.example.test.AESUtils').$new(keyString.getBytes(),ivString.getBytes())console.log(AESUitls.decrypt(flagContent.getFlag(),true))},onComplete: function () { }})
})

截图

最后的flag为flag{ISEC-C4n_U_f1nd_th3_10st_2Ip_p455Word}

截图

代码吞噬者(寻找病毒进化的密码)

这题好像是当时平台答案不对,导致0解

通过反射加载decode.dex,执行代码

截图

loadKey中再次反射

截图

在patch目录下处理dxdiff,但是该文件不会被保留

截图

截图

考虑到dxdiff已经加载到内存,因此直接dump

截图

拿到了代码

截图

根据对password的判断,拿到了输入的明文

_dict = "9>AG3OCP1N2-4L5K6M7+BQD&EVF=0@8$"
password = '+>M=+K-@MN+-MK-@MN++MK+OM=M&MK'
for i in range(len(_dict)-1,-1,-2):c2 = _dict[i]c1 = _dict[i-1]password = password.replace(c2,c1)
print(bytes.fromhex(password))
# you are awesome

截图


读取了DIFF_HEX,又进行了一次更新

截图

截图

但是在更新之前,将update_1_.dex删除了

截图

因此对delete进行hook,直接阻止删除

Java.perform(function () {let File = Java.use("java.io.File");File["delete"].implementation = function () {return 0};
});

截图

本质上就是对解密后的dict和diff进行md5计算

截图

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云原生时代:从 Jenkins 到 Argo Workflows,构建高效 CI Pipeline

ACK One Serverless Argo 工作流作为全托管的 Argo 工作流服务,可以帮助您实现更大规模、具有更快的运行速度、及更低成本的 CI Pipeline,与 ACK One GitOps[8](Argo CD)、Argo Event 等事件驱动架构可以构建完整的自动化 CI/CD Pipeline。作者:蔡靖 Argo Workflows Argo …

智慧城市的规划与实施:科技引领城市运行效率新飞跃

随着信息技术的飞速发展,智慧城市的构想正逐步成为现实。作为地理信息与遥感领域的研究者,我深知在这一转型过程中,技术的创新与应用是提升城市运行效率的关键。本文旨在探讨如何利用地理信息系统(GIS)、遥感技术、大数据、物联网(IoT)等前沿科技,推动智慧城市的规划与…

WebLogic启动报Could not get the server file lock

报错信息如下:解决: 方法一: 引用:https://blog.51cto.com/hifon/2796939 方法二: 1. 出现问题可能是上次没有正确关闭Weblogic,可到如下目录,执行stopWebLogic.cmd(Windows),或stopWebLogic.sh(Linux) C:\Weblogic14.1.1.0\user_projects\domains\staubli\bin

(数据科学学习手札161)高性能数据分析利器DuckDB在Python中的使用

本文完整代码及附件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes1 简介大家好我是费老师,就在几天前,经过六年多的持续开发迭代,著名的开源高性能分析型数据库DuckDB发布了其1.0.0正式版本。DuckDB具有极强的单机数据分析性能表现,功能丰富,…

ApsaraMQ Copilot for RocketMQ:消息数据集成链路的健康管家

为了帮助用户更高效地使用 RocketMQ,阿里云消息队列 ApsaraMQ 提供了一套名为 RocketMQ Copilot 的辅助工具集。它将专家的实践经验产品化,使得即便是缺乏经验的用户也能迅速掌握 RocketMQ 客户端的正确用法,利用云消息队列 RocketMQ 版的可观测性工具进行监控、并高效地排查…

无缝融合:使用 Python 和 PyFFmpeg 合并视频的完整指南

前言 在当今数字化时代,视频内容无处不在。从社交媒体到在线教育,视频已经成为我们生活中不可或缺的一部分。但是,有时候我们可能需要将多个视频片段合并成一个,创造出更丰富、更有吸引力的内容。而今天,我们将向您展示如何使用 Python 和 PyFFmpeg 工具实现这一目标。 准…

音频剪裁大师:使用 Python 和 ffmpeg 分割音频的完整指南

前言 在音频处理中,有时候我们需要对音频文件进行分割,提取其中的部分内容以满足特定需求。而 Python 提供了许多强大的工具和库来实现这一目标,其中 ffmpeg 是一个功能强大的工具,它不仅支持音频分割,还能进行音频转码、合并、提取等操作。本文将介绍如何使用 Python 和 …

正则 .*? 和 .* 的区别是什么

在正则表达式中,.* 和 .*? 的区别在于它们的贪婪程度: .* 是贪婪的,意味着它会尽可能多地匹配字符,直到没有更多字符可匹配。 .*? 是非贪婪的(或懒惰的),意味着它会尽可能少地匹配字符,一旦找到满足整体模式的最小匹配,就会停止。 举例说明: 对于字符串 123456 和模…

钉钉机器人远程重启系统服务

from flask import Flask, request import subprocessapp = Flask(__name__)@app.route(/send_message, methods=[GET]) def send_message():webhook_url = https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN    # YOUR_TOKEN是钉钉机器人的hookmessage = {&…

kalman fiter

卡尔曼滤波是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。 组成以及步骤 1.预测状态方程 目的:由系统状态变量k-1时刻的最优值和系统输入计算出k时刻的…

计算机英文教材太难啃?Higress 和通义千问帮你!

本文将介绍基于 AI 大语言模型进行英文技术内容翻译,并基于又免费又好用的翻译软件进行内容呈现,帮助大家轻松学习计算机英文原版教材。作者:张添翼(澄潭) 计算机相关英文教材的中译本质量堪忧,对于计算机专业的学生来说,应该深有体会。因为大部分教材的译者本人可能未必…

合工大毕业论文LaTeX模板使用指南

本文是在笔者为班级同学编写的指南的基础上修改而来的。 前言 LaTeX 是目前主流的计算机排版系统之一。目前社区维护了一份合工大毕业论文的 LaTeX 模板(以下简称“模板”):https://github.com/HFUTTUG/HFUT_Thesis 考虑到大部分同学对 Word 都谈不上精通,使用 LaTeX 排版毕…