攻防世界逆向刷题笔记(新手模式6-?)

6.1000clicks

看题目名字似乎是让咱们点击1000次之后才会出flag。本来打算用CE看能不能搜索出来数值,技术不到家,最后没有搜索到,还导致永劫无间打不了了。所以还是拿出IDA老实分析。

直接搜索flag字符,出来一大堆。张紫涵大佬说是Text对的这个,一看果然是。但是不能局限于此,还要分析为啥是这个。

发现除了text,其他的都没有交叉引用。那就差不多可以判断这个就是flag了。而且目标字符串的引用意思是弹窗提示此消息,更落实我们的猜想。

软件还有一个输入框,会根据输入的信息提示正确或者错误。使用OD修改后发现并没有什么用处,可能是在下才疏学浅,等有机会,看看是不是方法出了问题

补充:原来OD调试的时候,success代码附近就会显示flag!

7.crypt (暂时没解决)

看名字,估计是个算法相关的,进入IDA看看吧。

首先粗粗看一下代码,给函数改个名字,便于分析。

malloc()找到可用内存中一个大小适合的块。
内存是匿名的;

也就是说,malloc()分配了内存,但没有为它指定名字。
然而,它却可以返回那块内存第一个字节的地址

看图片得知,str是一串疑似编码表的字符串,而v3表示了它的长度。估计memset函数把str后面的改成0了。v10数组则全是为0. v9是一块内存的首地址。

先来看sub_140001120函数。

a1就是v9,v9是一快内存的首地址的指针变量。前几行首先给v9这块内存进行赋值,然后给v6赋值。LOBYTE代表16位数的低八位,所以result和v7也被赋值。鉴于result会被返回,所以可以先不管result。

for循环中,v8等于v9的某个值。v7 = (unsigned __int8)(*(_BYTE *)(a2 + v6) + v8 + v7);这行代码从之前介绍的内存地址(基于a2和偏移量v6)处取出一个字节的数据,与v8和当前的v7值相加,然后将结果强制转换为 8 位无符号整数类型后赋值给v7。

但是说了这么多,result却是直接返回j+1,不太清楚这个函数主要实现什么。

再来看这个函数。

8.happyctf 

这个题目还给了PBD文件,查阅PDB文件:每个开发人员都必须知道的 - iTech - 博客园​​​​​​

发现,PBD其实是一种帮助我们逆向分析的文件,IDA启动的时候可以加载这个文件。

 不加载PBD文件,可读性就会变差,需要分析好多函数!但是一旦引入PBD文件,则会带来许多便利之处,可读性则会大大增强。

可以看到,刚开始用了一个cout函数,意思是输出,这里就不再多说了。 if语句检查输入的是不是长度为24。如果等于24,则会继续向下。vector意思是容器,可以装一些东西进去。

这句代码意思是把这两个的地址绑定在一起。为什么? 我推测是因为函数内的语句  this->v = <v>。

Python 之 lambda 函数完整详解 & 巧妙运用_lamda函数python-CSDN博客

可以看这个博客,了解一下lambda的用法。它本质上是一种匿名函数.所以我们按照正常处理函数去处理它就行了。再看while循环里面的lamabda函数:

 首先看参数,我们已经知道bytee就是一个字符,也就是输入的字符的开头部分。接下来将它和0x14(也就是20)异或。将结果传入val,也就是v,也就是add(因为二者指针绑定了)。

这个函数应该也是实现指针的绑定 !↑

-----------------

关键函数如上,if语句见下,这是关键代码。 

 我们需要让它返回1,函数内if语句实现的应该是v9和key的对比。v9恰恰是异或后的数组。所以我们就可编写解题的exp:

a='rxusoCqxw{yqK`{KZqag{r`i'
b=''
for i in range(0,24):b+=chr(ord(a[i])^20)
print(b)

总结一下,这道题之所以没写出来,是因为我没理解lambda要当成函数看,以及指针的绑定我不懂。这道题算法总结下来就是输入一串字符串,异或之后和key对比,算法还是比较简单的。

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

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

相关文章

Coding Caprice - dynamic programming10

300. 最长递增子序列 class Solution { public:int lengthOfLIS(vector<int>& nums) {int len nums.size();map<int, int> record;int out(1);for(int &i: nums){int max_len 0;for(auto &[x, y]: record){if(x<i){max_len max(max_len, record…

文本编辑器与正则表达式

1. VIM 编辑器 1.1 VIM 基本概念 VIM 是一个高度可定制的文本编辑器&#xff0c;广泛用于程序员的日常开发中。与传统的文本编辑器不同&#xff0c;VIM 基于模式操作&#xff0c;具有以下几个主要特点&#xff1a; 普通模式&#xff1a;用于浏览和修改文本。插入模式&#x…

lc146LRU缓存——模仿LinkedHashMap

146. LRU 缓存 - 力扣&#xff08;LeetCode&#xff09; 法1&#xff1a; 调用java现有的LinkedHashMap的方法&#xff0c;但不太理解反正都不需要扩容&#xff0c;super(capacity, 1F, true);不行吗&#xff0c;干嘛还弄个装载因子0.75还中途扩容一次浪费时间。 class LRUC…

Tomcat(76)如何在Tomcat中配置集群会话状态同步?

在Tomcat中配置集群会话状态同步是确保应用程序高可用性和冗余的重要步骤。以下是详细的配置步骤和代码示例&#xff0c;以确保在Tomcat集群中实现会话状态同步。 1. 配置Tomcat Cluster 首先&#xff0c;需要修改Tomcat的server.xml文件来配置集群和会话复制。 a. 编辑 ser…

CentOS 上如何查看 SSH 服务使用的端口号?

我们知道&#xff0c;linux操作系统中的SSH默认情况下&#xff0c;端口是使用22&#xff0c;但是有些线上服务器并不是使用的默认端口&#xff0c;那么这个时候&#xff0c;我们应该如何快速知道SSH使用的哪个端口呢&#xff1f; 1、通过配置文件查看 cat /etc/ssh/sshd_confi…

IoTDB Allocate WAL Buffer Fail Because out of memory

问题及现象 时序数据库 IoTDB 集群报错&#xff1a; The write is rejected because the wal directory size has reached the threshold 53687091200 bytes. You may need to adjust the flush policy of the storage storageengine or the IoTConsensus synchronization pa…

定时/延时任务-Kafka时间轮源码分析

文章目录 1. 概要2. TimingWheel2.1 核心参数2.2 添加任务2.3 推进时间 3. TimerTaskList3.1 添加节点3.2 删除节点3.3 刷新链表3.4 队列相关 4. 时间轮链表节点-TimerTaskEntry5. TimerTask6. Timer 和 SystemTimer - 设计降级逻辑7. 上层调用8. 小结 1. 概要 时间轮的文章&a…

厦门凯酷全科技有限公司深耕抖音电商运营

在数字经济飞速发展的今天&#xff0c;抖音电商平台以其独特的社交属性和庞大的用户基础&#xff0c;迅速成为众多品牌和商家的新战场。在这个充满机遇与挑战的市场中&#xff0c;厦门凯酷全科技有限公司凭借其专业的服务、创新的理念和卓越的执行力&#xff0c;成为了抖音电商…

探秘多AI Agent模式:机遇、应用与未来展望(5/30)

摘要&#xff1a;多 AI Agent 模式是一种强大的人工智能架构&#xff0c;它利用多个智能体&#xff08;Agent&#xff09;之间的协作与交互来解决复杂问题、执行多样化任务并模拟复杂系统行为。在这种模式中&#xff0c;每个 Agent 都具备独立的感知、决策和行动能力&#xff0…

java之集合(详细-Map,Set,List)

1集合体系概述 1.1集合的概念 集合是一种容器&#xff0c;用来装数据的&#xff0c;类似于数组&#xff0c;但集合的大小可变&#xff0c;开发中也非常常用。 1.2集合分类 集合分为单列集合和多列集合 Collection代表单列集合&#xff0c;每个元素&#xff08;数据&#xff…

UDS自动化测试-Service 0x27(CAPL调用dll实现key计算)

文章目录 关联文章一、CANoe加载诊断数据库cdd、dll文件二、CAPLdiagGenerateKeyFromSeed关联文章 UDS - 深论Security Access Service 27服务-安全访问状态转换 CDD文件——CANdelaStudio Vector——CAPL语言设计 CANoe诊断测试 相信读者基于Diagnostic/ISO TP Confighratio…

uni-app多环境配置动态修改

前言 这篇文章主要介绍uniapp在Hbuilderx 中&#xff0c;通过工程化&#xff0c;区分不同环境、动态修改小程序appid以及自定义条件编译&#xff0c;解决代码发布和运行时手动切换问题。 背景 当我们使用uniapp开发同一个项目发布不同的环境二级路径不同时&#xff0c;这时候…

继电器控制与C++编程:实现安全开关控制的技术分享

在现代生活中,继电器作为一种重要的电气控制元件,在电气设备的安全控制中起到了至关重要的作用。通过低电流控制高电流,继电器能够有效地隔离控制电路与被控设备,从而保障使用者的安全。本项目将介绍如何通过树莓派Pico与继电器模块结合,使用C++编程实现继电器的控制。 一…

C++ 【衔接篇】

大名鼎鼎的c实际上是由c语言扩展而来的&#xff0c;它最初是由本贾尼在20世纪80年代开发。目的是支持面向对象编程&#xff0c;同时保持c语言高效和可移植等优点。c是c的扩展&#xff0c;在一定程度上解决了c语言在特殊场景下的使用局限。 1、命名空间 在详细说明命名空间之前…

JAVA8、Steam、list运用合集

Steam运用 Java Stream API为开发人员提供了一种函数式和声明式的方式来表达复杂的数据转换和操作,使代码更加简洁和富有表现力。 1、使用原始流以获得更好的性能【示例:求和】 使用 int、long 和 double 等基本类型时,请使用IntStream、LongStream 和 DoubleStream 等基本流…

软考中级-软件设计师通过心路经验分享

执念&#xff0c;第四次终于通过了 没买书&#xff0c;下班后每天2小时&#xff0c;四个2个月终于过了 学习经验&#xff1a; 1.下班后学习真的靠毅力&#xff0c;和上学的时候考证不是一个状态&#xff0c;大家要及时调整&#xff0c;否则过程很痛苦 2.失败三次的经验&#xf…

分布式 Raft算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & Raft算法 & 总结》《分布式 & Raft算法 & 问题》 参考文献 《Raft一致性算法论文译文》《深入剖析共识性算法 Raft》 简介 Raft 木筏是一种基于日志复制实现的分布式容错&一致性算法。在Raft算法…

仿iOS日历、飞书日历、Google日历的日模式

仿iOS日历、飞书日历、Google日历的日模式&#xff0c;24H内事件可自由上下拖动、自由拉伸。 以下是效果图&#xff1a; 具体实现比较简单&#xff0c;代码如下&#xff1a; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color;…

朗致面试---IOS/安卓/Java/架构师

朗致面试---IOS/安卓/Java/架构师 一、面试概况二、总结三、算法题目参考答案 一、面试概况 一共三轮面试&#xff1a; 第一轮是逻辑行测&#xff0c;25道题目&#xff0c;类似于公务员考试题目&#xff0c;要求90分钟内完成。第二轮是技术面试&#xff0c;主要是做一些数据结…

浅谈I-STARIS国际演艺集团为融合中国市场,开办的各类中式训练营

I-STARIS国际演艺集团给旗下各国演员们开办针对性的训练营&#xff0c;有针对中文基础的&#xff0c;有针对中国戏曲的&#xff0c;有针对中国武术的&#xff0c;不由让我们想到了老版《红楼梦》拍摄之前&#xff0c;演员们足足训练了三个月&#xff0c;才开始进入拍摄。1984年…