re学习(35)攻防世界-no-strings-attached(动调)
参考文章:
re学习笔记(28)攻防世界-re-no-strings-attached_Forgo7ten的博客-CSDN博客
攻防世界逆向入门题之no-strings-attached_攻防世界 no-strings-attached_沐一 · 林的博客-CSDN博客 本人题解:
扔入Exepeinfo中查壳和其他信息:
如图所示,32位ELF的linux文件,照例扔如IDA32位中查看代码信息,跟进Main函数:
跟进authenticate()函数
这里有个decrypt函数,中文名是加密,不在导入表中说明不是系统函数,后面的if判断条件是输入,还有个比较的wcscmp函数,后面两个wprintf分别是success 和access这些成功和拒绝的字符串地址。
fgetws函数是从输入流stdin中获取0x2000个字符给ws,也就是说s2是关键了,s2由decrypt函数得出,decrypt是用户自定义函数,在这里学到了非系统函数的英文名会是题目给的暗示,所以这里是加密操作后与输入的比较,只要输入后与加密后的s2一样就会打印success或access这些字符串,那flag自然也在加密函数中了。
然后开始动调:
这里有一个问题卡了我许久,就是在Ubuntu中无法打开32位调试文件,需要安装一些配置才可以参考文章:
【BUG】Linux目录下明明有可执行文件却提示找不到,“No such file or directory”,解决:为64位Ubuntu安装32位程序的运行架构_linux文件存在 但报错说找不到_shandianchengzi的博客-CSDN博客
可以解决
程序在08048720执行完call,并将返回值存储在eax里。
然后通过eax赋值给[ebp+s2],也就是字符串s2,
F8单步执行到08048725
然后跳转到eax存储的地址上
其实在这里也是可以看到flag的,一个一个写出来就可以了,但是也可以提取数据,一块弄出来
参考别人写的脚本:
数据提取:
unsigned int data[38] = {0x00000039, 0x00000034, 0x00000034, 0x00000037, 0x0000007B, 0x00000079, 0x0000006F, 0x00000075,0x0000005F, 0x00000061, 0x00000072, 0x00000065, 0x0000005F, 0x00000061, 0x0000006E, 0x0000005F,0x00000069, 0x0000006E, 0x00000074, 0x00000065, 0x00000072, 0x0000006E, 0x00000061, 0x00000074,0x00000069, 0x0000006F, 0x0000006E, 0x00000061, 0x0000006C, 0x0000005F, 0x0000006D, 0x00000079,0x00000073, 0x00000074, 0x00000065, 0x00000072, 0x00000079, 0x0000007D};
然后将其转换为字符即为flag
#include <stdio.h>
int main()
{unsigned int data[38] = {0x00000039, 0x00000034, 0x00000034, 0x00000037, 0x0000007B, 0x00000079, 0x0000006F, 0x00000075,0x0000005F, 0x00000061, 0x00000072, 0x00000065, 0x0000005F, 0x00000061, 0x0000006E, 0x0000005F,0x00000069, 0x0000006E, 0x00000074, 0x00000065, 0x00000072, 0x0000006E, 0x00000061, 0x00000074,0x00000069, 0x0000006F, 0x0000006E, 0x00000061, 0x0000006C, 0x0000005F, 0x0000006D, 0x00000079,0x00000073, 0x00000074, 0x00000065, 0x00000072, 0x00000079, 0x0000007D};for(int i=0;i<38;i++)printf("%c",data[i]);return 0;
}
flag为
9447{you_are_an_international_mystery}
总结:
不在导入表(import)中说明不是系统函数,非系统函数的英文名会是题目给的暗示
1.2.动态调试类似内存调试,在内存中找数据,寻找中间变量
3.IDA是根据自己的规则给无法解析变量名赋值的,也就是说在IDA里变量是s2这个名字,但是实际上程序里并没有s2这个变量名,所以只能查看寄存器了,毕竟函数是先返回到eax寄存器中再移动到变量中的。
相关文章:

re学习(35)攻防世界-no-strings-attached(动调)
参考文章:re学习笔记(28)攻防世界-re-no-strings-attached_Forgo7ten的博客-CSDN博客 攻防世界逆向入门题之no-strings-attached_攻防世界 no-strings-attached_沐一 林的博客-CSDN博客 本人题解: 扔入Exepeinfo中查壳和其他信息…...

STM32 F103C8T6学习笔记8:0.96寸单色OLED显示屏显示字符
使用STM32F103 C8T6 驱动0.96寸单色OLED显示屏: OLED显示屏的驱动,在设计开发中OLED显示屏十分常见,因此今日学习一下。一篇文章从程序到显示都讲通。 文章提供源码、原理解释、测试工程下载,测试效果图展示。 目录 OLED驱动原理—IIC通信…...

vscode的配置和使用
1.侧边栏调整大小 放大:View -> Appearance -> Zoom in(快捷键Ctrl ) 缩小:View -> Appearance -> Zoom out(快捷键Ctrl -) 侧边栏字体调整到合适大小后,可以按下一步调整代码区…...

SpringBoot统⼀功能处理
前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 本章是讲Spring Boot 统⼀功能处理模块,也是 AOP 的实战环节&…...
LeetCode 每日一题 2023/8/14-2023/8/20
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 8/14 617. 合并二叉树8/15 833. 字符串中的查找与替换8/16 2682. 找出转圈游戏输家8/17 1444. 切披萨的方案数8/18 1388. 3n 块披萨8/19 2235. 两整数相加8/20 8/14 617. 合…...
进入微服务阶段后的学习方法
微服务SpringCloud学习的特点 陌生,多,复杂。 技术陌生,技术栈多,实现复杂。 学习方式 对于每一个组件: 1.知道是什么、有什么用 2.知道操作步骤(跟着讲义操作即可),包括&#…...
C/C++中const关键字详解
为什么使用const?采用符号常量写出的代码更容易维护;指针常常是边读边移动,而不是边写边移动;许多函数参数是只读不写的。const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替),分类如下:…...
【2023新教程】树莓派4B开机启动-树莓派第一次启动-树莓派不使用显示器启动-树莓派从购买到启动一步一步完全版!
背景 闲来无事,在咸鱼上买了一个树莓派4B。买来配件都十分齐全,于是就想着启动来测试一下。下面是树莓派无显示器第一次启动的全过程,包含安装系统。 网上的教程大多需要额外使用显示器、鼠标、键盘之类的外设。然而,树莓派本身就…...
LA@2@1@线性方程组和简单矩阵方程有解判定定理
文章目录 矩阵方程有解判定定理线性方程组有解判定特化:齐次线性方程组有解判定推广:矩阵方程 A X B AXB AXB有解判定证明推论 矩阵方程有解判定定理 线性方程组有解判定 线性方程组 A x b A\bold{x}\bold{b} Axb有解的充分必要条件是它的系数矩阵A和增广矩阵 ( A , b ) (A,…...

如何使用ChatGPT创作一个小说式的虚构的世界
世界构建也许是小说写作中最重要的一环,但也可能非常耗时。让ChatGPT加快这一过程吧。 写小说最棒的一点就是有机会从零开始创造一个新世界。你可以创造超凡脱俗的景观,赋予人物魔法。神话故事可以存在于你小说中的现实世界,而传统可以帮助你…...

用于量子通信和互联网的光量子芯片
近年来,新兴的光量子芯片在量子通信和量子互联网领域取得了重大进展。光量子芯片芯片具有可扩展、稳定和低成本等特点,为微型化应用开辟了新的可能性。 7月14日,一篇发表在《light: science & applications》的文章概述了用于量子通信的光…...

11. Vuepress2.x 关闭夜间模式
修改 docs/.vuepress/config.ts 配置文件 设置 themeConfig.darkMode属性详见 官网 module.exports {host: localhost, // ipport: 8099, //端口号title: 我的技术站, // 设置网站标题description: 描述:我的技术站,base: /, //默认路径head: [// 设置 favor.ico&a…...
netty实现websocket通信
调用注意: 1、端口一定要是可以访问的。 2、依赖必须注意和其他版本冲突,比如redis的springboot starter包,会与5.0版本冲突。 <netty.version>4.1.74.Final</netty.version> <dependency><groupId>io…...
两个list如何根据一个list中的属性去过滤掉另一个list中不包含这部分的属性,用流实现
你可以使用Java 8的流来实现这个功能。假设你有两个包含对象的List,每个对象有一个属性,你想根据一个List中的属性值来过滤掉另一个List中不包含这个属性值的对象。下面是一种使用流的方式来实现这个功能 import java.util.ArrayList; import java.util…...

Blender 混合现实3D模型制作指南【XR】
本教程分步展示如何: 减少 3D 模型的多边形数量,使其满足 Microsoft Dynamics 365 Guides 和使用 Microsoft Power Apps 创建的应用程序中包含的混合现实组件的特定性能目标的性能需求。将 3D 模型的多种材质(颜色)组合成可应用于…...
kubeasz在线安装K8S集群单master集群(kubeasz安装之二)
一、介绍 Kubeasz 是一个基于 Ansible 自动化工具,用于快速部署和管理 Kubernetes 集群的工具。它支持快速部署高可用的 Kubernetes 集群,支持容器化部署,可以方便地扩展集群规模,支持多租户,提供了强大的监控和日志分…...

『C语言』数据在内存中的存储规则
前言 小羊近期已经将C语言初阶学习内容与铁汁们分享完成,接下来小羊会继续追更C语言进阶相关知识,小伙伴们坐好板凳,拿起笔开始上课啦~ 一、数据类型的介绍 我们目前已经学了基本的内置类型: char //字符数据类型 short …...

基于ssm+vue的新能源汽车在线租赁管理系统源码和论文PPT
基于ssmvue的新能源汽车在线租赁管理系统源码和论文PPT010 开发环境: 开发工具:idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具:navcat,小海豚等 开发技术:java ssm tomcat8.5 摘 要 随着科学技术的飞速发展࿰…...
深入解析IDS/IPS与SSL/TLS和网络安全
目录 防火墙 IDS IPS DMZ VPN VPS SSL/TLS 动态IP 静态IP 防火墙 防火墙是一种网络安全设备,用于监控和控制网络流量,保护网络免受未经授权的访问、恶意攻击和威胁。防火墙可以基于规则进行数据包过滤,允许或阻止特定类型的流量通过…...

在Visual Studio上,使用OpenCV实现人脸识别
1. 环境与说明 本文介绍了如何在Visual Studio上,使用OpenCV来实现人脸识别的功能 环境说明 : 操作系统 : windows 10 64位Visual Studio版本 : Visual Studio Community 2022 (社区版)OpenCV版本 : OpenCV-4.8.0 (2023年7月最新版) 实现效果如图所示࿰…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...