BUUCTF-reverse-reverse1(面向新手超详细)

这篇具有很好参考价值的文章主要介绍了BUUCTF-reverse-reverse1(面向新手超详细)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

拿到题目先查下壳(这里用的DIE,网上可以搜到下载)

BUUCTF-reverse-reverse1(面向新手超详细)

 64位,没有壳(壳是对代码的加密,起混淆保护的作用,一般用来阻止逆向)

然后拖进IDA(64位)进行反汇编

一般来说,先查看一下字符串,简单的题目会有flag或者敏感数据字符等信息,方便我们定位函数查看字符串的方法为shift+F12

BUUCTF-reverse-reverse1(面向新手超详细)

找到了关于flag的信息,双击点进去找到这段字符串的位置

BUUCTF-reverse-reverse1(面向新手超详细)ctrl+x(交叉引用)查看是哪段函数调用了该字符串

BUUCTF-reverse-reverse1(面向新手超详细)

点击“OK”进入该段程序,查看汇编代码

BUUCTF-reverse-reverse1(面向新手超详细)

汇编代码对于初学者来说读懂比较困难,可以按“F5”查看伪C代码

代码界面如图

BUUCTF-reverse-reverse1(面向新手超详细)

下面是详细解读:

第一步,定位 

一是定位加密后的flag字符串,而是准确定位加密的函数(如何加密的flag)

一般来说,是先去找引用"flag"的代码段,然后一步步定位到关键部分,找到真正把flag加密的函数,然后手工逆向或者写解密脚本得到真正的flag

第二步,手搓或者写脚本逆向(有些简单的加密方式可以直接手算,节省时间)

大部分题目逆向脚本建议用python写,语法比较简单,写起来比较快

回归正题:

先定位"this is the right flag"代码段

BUUCTF-reverse-reverse1(面向新手超详细)

不难猜测 "sub_1400111D1"是"printf"之类的输出函数。

strncmp(str1,str2,v3)是把str1与str2两字符串的前v3位数做一个比较,若str1=str2,返回0;大于返回正数,小于返回负数

if(!strncmp(str1,str2,v3))是一个判断语句,if()括号里面的内容如果为真,则输出

"this is the right flag",这时我们只需要知道什么情况为真。

然后看括号里面的内容 !( strncmp(str1,str2,v3) )为真的情况

!为非,所以只要( strncmp(str1,str2,v3) )为0, !( strncmp(str1,str2,v3) )即为真;为0的情况已经在上面对strncmp函数的讲解说过了,str1,str2两个字符串相等返回值即为0。

继续往上分析

 BUUCTF-reverse-reverse1(面向新手超详细)

前面已经讲过sub_1400111D1是print函数,不难猜测sub_14001128F是scanf函数,所以字符串str1为我们输入的内容。接下来看字符串str2.

随便找一个str2,双击点进去之后就找到了str2 '{hello_world}'

BUUCTF-reverse-reverse1(面向新手超详细)

别忘了我们的程序还没有分析完,继续往上分析

 BUUCTF-reverse-reverse1(面向新手超详细)

 for循环是对str2做了一个转换的处理,str2里面ascii码为111的字符会被转换为ascii码为48的字符,在IDA中,选中数字按"R"键可以将数字转换为字符。

BUUCTF-reverse-reverse1(面向新手超详细)

即str2中所有的"o"都被转换成了"0" 

所以flag为 flag{hell0_w0rld}

此题写的非常详细,初衷是最近想起了刚刚入门时候找遍wp都没有详细的,基础也很差,废了很大功夫才做出来一道题。于是就写了这样一篇面对基础的wp,以后也会持续更新buuctf及各平台的wp,不过没有这篇这么详细了。

点赞评论多的话后期会出一篇针对汇编代码的分析。文章来源地址https://www.toymoban.com/news/detail-401132.html

到了这里,关于BUUCTF-reverse-reverse1(面向新手超详细)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 注册Github账号详细教程【超详细篇--适合新手入门】

    目录 一、GitHub的简介 二、如何注册自己的GitHub账户 1、进入github的官网 2、点击右上角注册按钮sign up,来到注册页面  4、点击Continue,继续在光标处创建密码,继续创建用户名

    2024年02月10日
    浏览(57)
  • Linux常用指令(超详细)新手必备

    语法 :ls [选项][目录或文件] 功能 :对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息 -a 列出隐藏文件[ 在linux下隐藏文件以.开头 ] -l 列出文件的详细信息[ ls -l==ll ] 语法 :pwd 功能 :显示用户当前所在的目录 语法 :cd 目录名 功能 :

    2024年02月01日
    浏览(49)
  • wireshark抓包新手使用教程(超详细)

    Wireshark是一款非常流行的网络封包分析软件,可以截取各种网络数据包,并显示数据包详细信息。 为了安全考虑,wireshark只能查看封包,而 不能修改封包的内容 ,或者发送封包。 wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以 wireshark看不懂HTTPS中的内容 2.1、安装

    2024年02月15日
    浏览(46)
  • 创建Hadoop单机模式(新手专用 超详细!)

    首先需要一个Linux系统的Centos7 具体配置放在下面 下一步就是配置网络 首先查看一下自己的虚拟网络编辑器  看一下ip地址(注意一下起始和终止IP) 进入虚拟机之后,登录root用户,然后配置网络(配置网络方式多种,适合自己才是最香的哦~) 然后就会进入编辑页面(小t

    2024年02月08日
    浏览(38)
  • uniapp - [最新] 超详细实现支付宝小程序获取手机号、个人信息,支付宝弹框授权拿到用户手机号与昵称头像等信息完整流程(详细示例源码与注释,一键复制快速应用到项目中)

    网上的文章乱七八糟的都不行,新手小白很难看懂,本篇文章通俗易懂。 本博客实现了在uniapp 支付宝小程序项目中,从 0-1 描述了如何授权获取用户的手机号和头像昵称信息,一看就能懂 你可以跟着教程一步步走,从支付宝后台配置再到详细的示例,稍微改改参数就能快速

    2024年02月06日
    浏览(136)
  • Java集合,超详细整理,适合新手入门

    指的是在集合里面放的是单个的对象 Collection 接口有两个重要的子接口 List、Set Collection提供了size()方法,List提供了get()方法 Collection接口的实现子类可以存放多个元素,每个元素可以是Object; Collection的实现类,有些可以存放重复的元素,有些不可以; Collection的实现类,有些

    2024年02月14日
    浏览(58)
  • 【教程】Github环境配置新手指南(超详细)

    写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! Github 是一个基于Git版本控制系统的代码托管平台,旨在帮助开发者协作、管理和追踪其软件项目的变化。 在这个平台,你可以找到各种代码资源,几乎所有程序员都在Githu

    2024年03月23日
    浏览(46)
  • RabbitMq整合springboot超详细,超适合新手

    1、引入springboot整合amqp的依赖 2、application.yml 配置 3、RabbitConfig.java (自定义Rabbitmq配置类) 配置详细解释都写在注解上了 4、在程序中创建交换机,队列,并且绑定 DirectRabbitConfig.java(创建direct类型的交换机) PS:一定要在该类上加@Configuration该注解,使得程序启动的时候运

    2024年02月09日
    浏览(32)
  • 超详细FPGA新手小白入门点亮LED灯

    其实之前早已用过Vivado进行FPGA的开发学习,但由于每次都是浅尝辄止地学了一些时间,加上Vivado软件和FPGA开发流程的复杂性,长时间不用就会遗忘。因此今天还是简单地写个笔记记录一下Vivado软件的一些基本操作,实现一个“hello world工程”:控制LED灯的闪烁。 实验基于的

    2024年02月04日
    浏览(52)
  • Git的使用(易懂+巨无比详细+新手必看)

    Git是用来干什么的呢? 是用来管理代码文件的,具体是啥自行百度就行,其实你点进来你多少会对他有点了解,知道他是干嘛的~ 提示: 照着本文,敲一下指令就能掌握,底层原理了解即可,主要是会用! 软件官网 Git官网进口 下载好了可以输入 git --version 这里可以看到gi

    2024年02月09日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包