跟着大佬学RE(四)

几个API函数

[ACTF新生赛2020]Universe_final_answer

一个很多方程组的函数,还有一个嗯,对input进行一些操作的函数

嗯,确实方程解出来得到 key 直接运行就可以得到 flag 了,不过还是去分析了一下。

v22 = __readfsqword(0x28u);                   // 获取栈保护值memset(space, 0, sizeof(space));v21 = 0LL;inputlen = strlen(input);index = 0;enc = 9;while ( index < inputlen ){v7 = input[index++];enc ^= v7;                                  // 计算校验值}if ( enc ){place = 0LL;space_pointer = space;while ( 1 ){space_pointer = (__int128 *)((char *)space_pointer + 4);// read a intv10 = place + 1;v11 = enc / 10;v12 = enc % 10;*((_DWORD *)space_pointer - 1) = v12;LOBYTE(v13) = v12;enc = v11;if ( !v11 )break;place = v10;}v14 = place - 1;v15 = a2;v16 = &a2[v10];v17 = &a2[place];for ( i = (int *)space + v14; ; --i ){*v15 = v13 + 48;if ( v17 == v15 )break;v13 = *i;++v15;}}else{v16 = a2;}result = __readfsqword(0x28u) ^ v22;          // 读取栈保护值并与初始值 v22 进行异或操作// 检查栈是否被破坏*v16 = 0;                                     // 将输出缓冲区的最后一个字符设置为0// 作为字符串结束符return result;
}

是计算输入字符串的一个校验值,并将这个校验值转换为字符串形式存储在 a2指向的缓冲区。

最开始是硬解的 , 嗯,看了别人wp,意识到也可以用 angr 来解。

angr 脚本还是要搞些优化,不然半天跑不出来。

import angr
base_addr=0x400000
p=angr.Project('./universe',main_opts={"base_addr":base_addr},auto_load_libs=False)init_state=p.factory.entry_state(add_options={angr.options.LAZY_SOLVES})sm=p.factory.simgr(init_state)
sm.explore(find=base_addr+0x71A,avoid=base_addr+0x6ef)
if sm.found:found_state=sm.found[0]flag=found_state.posix.dumps(0)print(flag[:10])
else:print('no success')

那个 10 是自己算出来的长度,不然就是:

b'F0uRTy_7w@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\xeca@\x80\x02(\x91\x01' 

还有就是:在你当前的 angr 脚本中,输出结果中包含了很多非预期的字符,这是因为模拟过程中程序的输入没有正确处理,导致了缓冲区中存在未初始化的或多余的数据。这通常发生在模拟器没有严格控制输入长度或格式时。

1.缓冲区没有正确截断  2.输入数据没有被正确初始化

这是GPT给的脚本:

import angr
import claripy# Initialize project
base_addr = 0x400000
p = angr.Project('./universe', main_opts={"base_addr": base_addr}, auto_load_libs=False)# Create initial state
input_size = 100  # Adjust the size according to the expected input length
input_chars = [claripy.BVS(f'input_{i}', 8) for i in range(input_size)]
input_str = claripy.Concat(*input_chars + [claripy.BVV(b'\n')])  # Add a newline at the end# Create initial state with symbolic input
init_state = p.factory.entry_state(stdin=input_str, add_options={angr.options.LAZY_SOLVES})# Simulate the execution
sm = p.factory.simgr(init_state)
sm.explore(find=base_addr + 0x71A, avoid=base_addr + 0x6EF)# Check if the solution is found
if sm.found:found_state = sm.found[0]# Extract the symbolic input from the statesolution = found_state.solver.eval(input_str, cast_to=bytes)flag = solution.split(b'\x00')[0]  # Split to remove trailing null bytesprint(flag.decode('utf-8', errors='ignore'))  # Decode to string and ignore errors
else:print('no success')

en,感觉还是按题型来刷比较好

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

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

相关文章

Java 基础面试300题 (261-290)

Java 基础面试300题 &#xff08;261-290&#xff09; 261.CompletableFuture.runAsync和CompletableFuture.supplyAsync方法有什么区别&#xff1f; 这两个方法都可用于异步运行代码。但两者之间有一些区别如下 &#xff1a; runAsync不返回结果&#xff0c;返回的是一个Com…

【深度学习】安全帽检测,目标检测,Faster RCNN训练

文章目录 资料环境尝试训练安全帽数据训练测试预测全部数据、代码、训练完的权重等资料见&#xff1a; 资料 依据这个进行训练&#xff1a; https://github.com/WZMIAOMIAO/deep-learning-for-image-processing/tree/master/pytorch_object_detection/faster_rcnn ├── bac…

【加密与解密】【04】Java安全架构

JAVA安全模块划分 JCA&#xff0c;Java Cryptography Architecture&#xff0c;Java加密体系结构JCE&#xff0c;Java Cryptography Extension&#xff0c;Java加密扩展包JSSE&#xff0c;Java Secure Sockets Extension&#xff0c;Java安全套接字扩展包JAAS&#xff0c;Java…

nt9856_sensor_driver camera i2c无响应

前言 最新更换了不同的平台进行开发&#xff0c;所以一心在研究和学习中&#xff0c;没有太多的时间发布文章&#xff0c;最近开开始上手了&#xff0c;抽空把之前的工作记录进行总结和发布。从原来的高通和瑞芯微转到了国科和海思联咏&#xff0c;整体的架构不太一致&#xff…

【JVM】已验鼎真,鉴定为:妈妈加载的(双亲委派模型)

【JVM】已验鼎真&#xff0c;鉴定为&#xff1a;妈妈加载的&#xff08;双亲委派模型&#xff09; 在Java的世界中&#xff0c;类加载器&#xff08;ClassLoader&#xff09;是Java虚拟机&#xff08;JVM&#xff09;用来动态加载类的基础组件。双亲委派模型&#xff08;Paren…

安装和使用conda

Conda 是一个开源的软件包管理系统和环境管理系统&#xff0c;用于安装多个版本的软件包及其依赖关系&#xff0c;并在它们之间轻松切换。可以创建多个环境&#xff0c;并在环境中使用不同的python版本&#xff0c;并安装环境专属的python依赖包&#xff0c;可以用来避免python…

MySQL中:cmd下输入命令mysql -uroot -p 连接数据库错误

目录 问题cmd下输入命令mysql -uroot -p错误 待续、更新中 问题 cmd下输入命令mysql -uroot -p错误 解决 配置环境变量&#xff1a;高级系统设置——环境变量——系统变量——path编辑——新建——MySQL.exe文件路径&#xff08;如下图所示&#xff09; phpstudy2018软件下&am…

王学岗鸿蒙开发(北向)——————(二)TS基本语法详解

1&#xff0c;Ts(TypeScript)语法相当于JAVAScript类型&#xff0c;鸿蒙arkTs是基于TS语言的,当然artTs也融合了其它的语言。 2&#xff0c;本篇文章是基于n9版本。注意,有些语法是已经不能用的。 3&#xff0c; 4&#xff0c;变量:用来存储数据,数字字母组成&#xff0c;数字不…

泛微开发修炼之旅--07通过后端代码实现创建并发送待办、源码及示例

文章链接&#xff1a;泛微开发修炼之旅--07通过后端代码实现创建并发送待办、源码及示例

解决找不到api-ms-win-crt-runtime-l1-1-0.dll问题的5种方法

电脑已经成为我们生活和工作中不可或缺的工具&#xff0c;然而&#xff0c;由于各种原因&#xff0c;我们可能会遇到一些常见的问题&#xff0c;其中之一就是电脑缺失api-ms-win-crt-runtime-l1-1-0.dll文件。这个问题可能会导致电脑出现错误提示、程序无法正常运行等困扰。为了…

[Redis]Zset类型

Zset有序集合相对于字符串、列表、哈希、集合来说会有一些陌生。 它保留了集合不能有重复成员的特点&#xff0c;但与集合不同的是&#xff0c;有序集合中的每个元素都有一个唯一的浮点类型的分数&#xff08;score&#xff09;与之关联&#xff0c;着使得有序集合中的元素是可…

Python04:python代码设置作者/创建时间/文件名称

我们新建一个py文件时&#xff0c;如果希望文件开头有固定的内容&#xff0c;怎么设置呢&#xff1f; 比如代码作者、文件创建时间等。。。 1、点击左上角【Python】–>【Settings】设置 2、在弹出的新窗口找到【File and Code Templates】–>【Python Script】–>在右…

LeetCode70-爬楼梯

题目 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1 阶 1 阶2 阶 示例 2&#x…

6_5 test

Lucene 存储引擎 https://www.cnblogs.com/tech-lee/p/15225276.html\ 规范 问问题的技巧 提问者&#xff1a;要实现怎样的目标&#xff1f;自己计划是如何实现这个目标的&#xff1f;问题出现在哪个环节&#xff1f;自己为了解决这个问题&#xff0c;已经做了哪些尝试和工…

【ubuntu软件版本管理】利用update-alternatives管理ubuntu软件

​ 我们有的时候希望在安装了新软件之后保留旧版本的软件&#xff0c;比如希望保留旧版本的gcc&#xff0c;以防以前写的C编译出问题&#xff0c;这时候就需要版本管理软件update-alternatives。 ​ 在此之前我们需要先弄清楚&#xff0c;什么是ubuntu的软件&#xff1f;拿C源…

mysql中的笛卡尔积

在MySQL中,笛卡尔积(Cartesian Product)是指在进行多表连接时,如果没有指定连接条件,所有表中的每一行都会与其他表中的每一行进行组合,从而产生的结果集。笛卡尔积通常由交叉连接(CROSS JOIN)或者在缺少连接条件的普通连接产生。 生成笛卡尔积的示例 假设有两张表 t…

推荐系统学习 一

参考&#xff1a;一文看懂推荐系统&#xff1a;召回08&#xff1a;双塔模型——线上服务需要离线存物品向量、模型更新分为全量更新和增量更新_数据库全量更新和增量更新流程图-CSDN博客 一文看懂推荐系统&#xff1a;概要01&#xff1a;推荐系统的基本概念_王树森 小红书-CSD…

Python 全栈体系【四阶】(五十七)

第五章 深度学习 十三、自然语言处理&#xff08;NLP&#xff09; 2. 传统NLP处理技术 2.4 关键词提取 关键词提取是提取出代表文章重要内容的一组词&#xff0c;对文本聚类、分类、自动摘要起到重要作用。此外&#xff0c;关键词提取还能使人们便捷地浏览和获取信息。现实…

Centos7.9实现多台机器ssh免密登录

1.本机&#xff08;172.16.10.228&#xff09;先生成密钥对 ssh-keygen -t rsa 2.执行命令&#xff0c;把本机公钥拷贝到远程机器 ssh-copy-id rootdistinctIp 3.查看一下远程机器 、/root/.ssh/authorized_keys文件 cat /root/.ssh/authorized_keys 会看到里边多了个公钥…

Java 线程安全问题再深入

线程安全问题深入 线程安全问题 Java Singleton单例设计模式 单例设计模式的线程安全问题 所谓类的单例设计模式&#xff0c;就是采取一定的方法保证在整个的软件系统中&#xff0c;对某个类只能存在一个对象实例&#xff0c;并且该类只提供一个取得其对象实例的方法。 //使用懒…