buuctf reverse 学习报告

Buuctf学习报告1-10

  1. Easyre:

文件拖入ida即可看到答案

  1. 2.Reverse1

首先DIE查壳,发现64位无壳,拖入ida

汇编语言晦涩难懂,shift+f12查看文件字符串,发现关键字符串,点击进入该字符串所在位置

Ctrl+x查看该字符串所在函数,依旧f5查看其伪c代码

sub_140011D1S是printf语句,不难发现,sub_14001128F是scanf,而strncmp表示比较str1和str2,如果括号内为真,则得到正确flag,即str1和str2相等时为真,返回0,想到str2的值是多少很关键,双击str2查看其所在位置,再次发现关键语句

但是代码真的分析完了吗?返回去继续向上分析代码

数字想到ascii码表,R可直接转换,发现str2中的o要替换成0

那么最终答案就是

flag{hell0_w0rld}

3. reverse2

查壳无壳拖入64位IDA,汇编语言晦涩难懂f5转化成伪c代码,找到关键语句

不难发现strcmp是对flag和s2进行了比较,追踪flag,发现flag

但测试不通过,答案没那么简单,返回重新分析代码

发现flag仍需进行转换,Rascii码转换之后得到,flag中的i和r需要转化成1

最终得到flag{hack1ng_fo1_fun}

4.内涵的软件

查壳无壳拖入64位IDA,汇编语言晦涩难懂,shift+f12查看字符串

发现关键含flag语句

双击进一步查看,继续ctrl+x查看语句所在位置

发现没有找到什么有用信息,返回重新查看main函数,查看main0函数

发现这一串很可疑,尝试发现就是flag

所以flag {49d3c93df25caad81232130f3d2ebfad}

5.新年快乐

查壳发现有upx壳,需要进行脱壳处理,将文件拖进upx文件里,位置栏输入cmd,调出命令窗口,输入upx -d 新年快乐.exe

脱壳成功

重新拖入ida

容易发现,str1和str2进行比较,如果相等即为正确flag

Str2已经确定

因此最终flag{HappyNewYear!}

6.xor

看到xor联想到异或运算,查壳无壳,拖入ida,f5查看伪c代码

分析代码可知,先是将__b清空为0,再输入其值

当__b的长度不是33是错误,因此__b的长度是33,当__b异或运算之后和globle相等,可以得到Success

点击globle跟进,继续跟进点击aFKWOXZUPFVMDGH,得到一个古怪可能是flag的一串字符

提取出字符

fkw&O.@xZ;UpFv"M#DghG2O

编写代码

a=[102,10,107,12,119,38,79,46,64,17,120,13,90,59,85,17,112,25,70,31,118,34,77,35,68,14,103,6,104,15,71,50,79,0]
q="f"
for i in range(1,33):
    q+=chr(a[i]^a[i - 1])
print(q)

得到结果flag{QianQiuWanDai_YiTongJiangHu}

7.reverse3

查壳无壳拖入ida,进一步查看main0函数,找到主函数

Destination和str2进行比较,相等即为right flag

点击str2,发现一串特殊字符类似flag

很明显这并不是flag,猜测可能是经过某种加密之后的结果

返回main0函数继续分析代码

由下往上分析,v5是Des的字符长度,在往上是对Des做了个循环,如果Des长度是3,那么Des[0]=Des[0]+0

以此类推

再往上发现最初输入的v4的值赋给了Des,之后第24行进行了某种运算得到了后来的Des

因此关键就是进行了什么运算,点击sub_4110BE,继续跟进

又是/3,又是4*,那么猜测可能是base64加密,借助工具解码

得到结果

 flag{i_l0ve_you}

8.helloword

查壳无壳拖入ida,直接shift+f12查看字符串

ctrl+f搜索flag,发现flag

得到结果

flag{7631a988259a00816deda84afb29430a}

9.不一样的flag

查壳无壳拖入ida,f5查看伪代码

找到关键语句,翻译得到我输入的顺序就是flag,往上看发现数字,自然将其ascii转换,得到

49转换成1,35转换成#

发现这串字符可以分为5行5列:

*1111
01000
01010
00010
1111#

很明显这是一个迷宫题,要求不走1,从*走到#

而行走的顺序就是flag

所以我们的顺序是:222441144222

得到flag:
flag{222441144222}

10.SimpleRev

查壳无壳拖入ida,f5查看伪代码

发现v4不等于d且不等于D的时候会执行Decry函数,进去看看函数里有什么

函数中发现关键语句,text和str2进行比较,点进text和str2发现没有什么有用信息,继续向上分析代码

将src 和 v9 的数据转为十六进制,快捷键H。快捷键R 将其转为字符

了解题目意思知道,大端序和小端序知识点

因此这里src = NDCLS ,v9 = hadow,key进行大小写转换

所以text=killshadow

key=adsfkndcls

发现求出str2的关键是 str2[v2] = (v1 - 39 - key[v3 % v5] + 97) % 26 + 97;

编写代码求出str2

#include<stdio.h> 
int main()
{
    char key[] = "adsfkndcls";
    char text[] = "killshadow";
    int i;
    int v3=10;//长度 
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 128; j++)
        {
            if (j < 'A' || j > 'z' || j > 'Z' && j < 'a')
            {
                continue;
            }
            if ((j - 39 - key[v3 % 10] + 97) % 26 + 97 == text[i])
            {
                printf("%c",j);
                v3++;
                break;
            }
        }
    }
}

得到flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值