跟着大佬学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

相关文章

LabVIEW程序员是怎样成长为大佬

成为一名LabVIEW编程领域的“大佬”需要时间、实践、学习和解决复杂问题的经验。尽管LabVIEW作为一种图形化编程语言在初期可能相对容易上手,但要真正成为精通者,需要在多个层面上深入理解。以下是LabVIEW程序员如何逐步成长为“大佬”的路径: 1. 打好基础 LabVIEW的大佬们通常在初期会打下非常坚实的基础,理解LabVIEW编程的核心概念,包括: 数据流编程模型:Lab

【最新整理】大佬都在用的10款3DMax建筑插件!

在3Dmax建筑领域中,有许多受欢迎的插件能够大大提升设计师的工作效率和创作质量。以下是10款被广泛应用且备受推崇的3Dmax建筑插件: 1.Building(建筑设计插件) 3DMAX参数化建筑建模插件Building,一键生成各种自定义参数的建筑模型,你可以通过调节参数创建自定义风格的建筑,这对创建城市背景很有用。你可以实时更改参数并查看结果,这是一种简单直观的方式。

013.Python爬虫系列_re正则解析

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优

跟着李沐学ai

01 课程安排【动手学深度学习v2】-跟李沐学AI-【完结】动手学深度学习 PyTorch版-哔哩哔哩视频 (bilibili.com)https://www.bilibili.com/list/1567748478?sid=358497&spm_id_from=333.999.0.0&desc=1&oid=714717789&bvid=BV1oX4y137bC 目标 介绍深度学习经典和最新模

Login failed:make sure your username and password are correct and that you’re an admin or moderator

Login failed:make sure your username and password are correct and that you’re an admin or moderator   1.使用MySql查看工具进入数据库,进入表“ofuser”,把字段 plainPassword 改成 123,然后在你的控制台上输入该表的   username跟plainPa

解决Re-download dependencies and sync project

解决Re-download dependencies and sync project 问题描述 新建一个工程,报错 Error:Failed to open zip file.Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)<a hr

认真推荐几个腾讯、滴滴、美团的大佬

技术是立身之本,从2018年末的寒冬,到现在所有企业都在共克时艰,技术人唯有加强自己技术能力,才能在市场中获得一席之地。很多时候大家不是不努力,而是缺乏对应的学习方法,以及高手指点。 读万卷书,不如行万里路,行万里路,不如前辈指路,今天给大家推荐一些行业前辈,他们或多或少指得你们学习,不同方向都有,供大家哪里不会找哪里。这也是我平时关注的优秀号主,分享给大家,助大家学习路上披荆斩棘~能力得到提

面了个 32+ 岁 Java 大佬,一言难尽......

有个朋友去阿里面试,面试总共花费了 20 天左右,包含了 4 轮电话面试、1 轮笔试、1 轮主管视频面试、1 轮 hr 视频面试。   据他所说,70% 的人都会载在第一轮面试,要不是他面试之前做足了准备,估计都坚持不到接下来的面试。   其实,第一轮的电话面试除了一些常规的自我介绍外,问的都是一些基础的专业知识,主要目的就是筛选掉一些基础比较弱的人,以免浪费大家的的时间。问的问题主要涉及几个方

sj大佬笔记

我觉得现代社会处于一种被pua和反pua的中间,人被卡住了,就是我们说的,很清楚知道努力了也难以走到上层,但摆烂的话还总想试试努力后的结果 这种pua实际上不是别人强加给自己的,是自己给自己的,自己决定然后自己不断被pua,又总想从自己给自己设定的pua当中摆脱出来,如果是外力,那还可以反抗,但如果是自己,怎么反抗? 这有点跟福柯讲的还不太一样,因为现代社会会在个体自身内部形成反对自我治理的这种观

正则 re中要转义的特殊字符

如果要查找文件名中有*的文件,则需要对*进行转义,即在其前加一个\。ls \*.txt。正则表达式有以下特殊字符。需要转义  特别字符 说明 $ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n' 或 ‘\r'。要匹配 $ 字符本身,请使用 \$。 ( ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用