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

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

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

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

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

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

ctrl+x(交叉引用)查看是哪段函数调用了该字符串

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

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

代码界面如图

下面是详细解读:

第一步,定位 

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

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

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

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

回归正题:

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

不难猜测 "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。

继续往上分析

 

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

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

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

 

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

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

所以flag为 flag{hell0_w0rld}

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

点赞评论多的话后期会出一篇针对汇编代码的分析。

笔者在22-23年做过的题放在了该仓库,持续更新,需要自取GitHub - SlientRainyDay/Rain_CTF: CTF — 学习笔记&比赛题目&WP

BU reverse 1是一个反向工程题目。我们需要使用IDA来分析给定的程序并找到正确的flag。根据引用,我们可以使用strncmp函数来比较两个字符串的前几位。如果相同,返回0;如果不同,返回正数或负数。根据引用,我们可以得知,正确的flag应该与字符串"this is the right flag!"相同。因此,我们需要在IDA中查看字符串并找到正确的flag。然后,我们可以按照引用中的步骤来进行操作,将ASCII码转为字符。通过这些步骤,我们可以找到正确的flag。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [buuctf 逆向刷题01——reverse1](https://blog.csdn.net/qq_42642222/article/details/127678168)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [BUUCTF--Reverse--easyre,reverse1,新年快乐(面向新手超详细)](https://blog.csdn.net/qq_65165505/article/details/130263889)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SlientRainDay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值