跟着大佬学RE(四)

2024-06-06 00:44
文章标签 re 大佬 跟着

本文主要是介绍跟着大佬学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,感觉还是按题型来刷比较好

这篇关于跟着大佬学RE(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1034634

相关文章

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

下划线跟着走的导航效果

效果图: css部分: <style type="text/css">         .navCon{             min-width: 1200px;             height: 43px;             margin: 0 auto;             position: relative;         }         .navCon

推荐一个大佬们都在用的IDE主题-Dracula Theme

Dracula主题 对于颜色的主题,每个人的喜欢都有所区别,我喜欢Dracula主题,基本IDE编辑器能配置的都会配置这个主题颜色。然后偶然有一天我发现这个网站:https://draculatheme.com/。才发现Dracula不再仅仅只是个主题了,而是已经发展成为了一个备受欢迎的跨平台开源项目,支持超过300+的编辑器。 Dracula主题的故事 开发Dracula的作者在一次参加

文件扫描工具都有哪些?职场大佬都在用的文本提取工具大盘点~

回想起刚毕业初入职场那阵子,领导让帮忙把纸质文件扫描提取为文本时,还只会傻乎乎地一点点操作,属实是费劲得很! 好在后面受朋友安利,找到了4个能够快速实现文件扫描文字提取的方法,这才让我的办公效率蹭蹭地往上涨~ 趁着毕业季,刚好一并整理出来分享给即将步入职场的新人小白,尽量让你们少走弯路、少踩坑。 方法一:借助专用的扫描工具 →翻译相机 集成了文字识别和全能翻译的这一免费手机应用程序你

大佬们,救救可怜的孩子吧

特发性震颤 本地post上传就没任何问题,部署到服务器后,前端post上传数据,小数据就没问题,数据一大点就报这个错 Java代码 ? 1个 2 3 4 5 6 7 8 9 10 11 12 13 14 2020-06-14 00:35:28.783  INFO 11996 --- [nio-9090-exec-1] o

跟着刘二大人学pytorch(第---12---节课之RNN基础篇)

文章目录 0 前言0.1 课程视频链接:0.2 课件下载地址: 1 Basic RNN1.1 复习DNN和CNN1.2 直观认识RNN1.3 RNN Cell的内部计算方式 2 具体什么是一个RNN?3 使用pytorch构造一个RNN3.1 手动构造一个RNN Cell来实现RNN3.2 直接使用torch中现有的RNN模块来实现RNNinput维度h0维度output维度hn维度numL

关于物联网安全 NXP、ST、英飞凌等大佬怎么说?

2016年度慕尼黑电子展CEO论坛邀请了多家欧洲半导体大厂的执行长,共同讨论如何确保物联网安全性的话题…   每年德国慕尼黑电子展(Electronica)都会举行的CEO论坛,从两年前就持续谈同一个主题:物联网(IoT),但是今年终于尝试阐明如何确保其安全性。   论坛主持人Kilian Reichert在开场时指出,不久前曾发生一场全球性的分布式阻断服务(distributed denia

跟着刘二大人学pytorch(第---10---节课之卷积神经网络)

文章目录 0 前言0.1 课程链接:0.2 课件下载地址: 回忆卷积卷积过程(以输入为单通道、1个卷积核为例)卷积过程(以输入为3通道、1个卷积核为例)卷积过程(以输入为N通道、1个卷积核为例)卷积过程(以输入为N通道、M个卷积核为例)PaddingPadding(padding=1)步长stride(stride=2)下采样(Max Pooling Layer)一个简单的例子如果有GPU的

python文件操作(Windows路径,内置os库)+ 正则表达式(语法与re库)

文章目录 前言1 Windows路径(1)绝对路径 (Absolute Path)(2)相对路径 (Relative Path) 一、python文件的读写操作1 读写(1)打开文件file = open('test1.txt','r',encoding='utf-8') --- 打开文件 (2)读取文件内容content = file.read() --- 读取全部内容,返回字符串lin

【python】python指南(三):使用正则表达式re提取文本中的http链接

一、引言  对于算法工程师来说,语言从来都不是关键,关键是快速学习以及解决问题的能力。大学的时候参加ACM/ICPC一直使用的是C语言,实习的时候做一个算法策略后台用的是php,毕业后做策略算法开发,因为要用spark,所以写了scala,后来用基于storm开发实时策略,用的java。至于python,从日常用hive做数据策略用python写udf,到基于tensorflow深度