buuctf-re题解(新手复盘wp)

声明:re新手 定时更新wp

再声明:感觉一题一题来效率好低,我写wp的目的是为了查漏补缺,所以以后就写曾经卡了我很久的题吧

day 5

九、不一样的flag

无壳32丢到ida

看关键段

1上2下3左4右,很像控制人物移动的标志

看不懂,先不管,从后往前看

exit(0)是正常结束程序,而exit(非零值)表示程序出现了异常情况,所以我们不能执行到exit(非零值)

上面漏了一串代码

可以看到这是一串字符串,而49和35转成字符后是’1‘和’#‘,那么!!

注意看字符串中,包含了’1‘和’#‘,只有判断到’#‘才能正常结束程序,配合上文获得的信息,我们的人物不能移动到‘1’上,且‘#’是终点,所以这个字符串表示的是———一个迷宫!!!

*11110100001010000101111# 的长度是25,25只能被5整除,所以这是一个5*5的迷宫,我们将迷宫正确输出出来

*1111

01000

01010

00010

1111#

*是起点,#是迷宫出口

那么我们只要走到#,那路径就是flag了

222441144222

包上flag{222441144222}

十、SimpleRev

ELF64,丢ida里

main函数无从下手,shift+f12看字符串

老规矩看比较

join函数是将v9接到key3后面(strcat)

按r将v9数值转化成字符串

注意:因为涉及了内存存储的问题,所以我们要考虑字节序,下面用一个简单的程序测试是小端序还是大端序

#include <stdio.h>

int main() {
    int num = 1;
    char *ptr = (char *)&num;

    if (*ptr == 1) {
        printf("小端字节序 (Little Endian)\n");
    } else {
        printf("大端字节序 (Big Endian)\n");
    }

    return 0;
}

测试出来是小端序,所以字符串wodah实际是hadow、字符串SLCDN实际是NDCLS

而str2是由key进行变换得到的

key中的字符一开始是ADSFKNDCLS

这里的其实就是将大写字母转成小写字母了

变为adsfkndcls

这里输入的v1其实就是明文flag,经过循环key加密到了str2里面去了

str2到最后其实就是text,因为这俩得相等

直接用爆破脚本(网上找的)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
    char key[] = "adsfkndcls";
    char text[] = "killshadow";
    char flag[100] = "";
    int keyLen = strlen(key);
    int textLen = strlen(text);
    for (int i = 0; i < textLen; i++) {
        for (int x = 65; x < 123; x++) {
            if (text[i] == (char)((x - 39 - key[i % keyLen] + 97) % 26 + 97)) {
                strncat(flag, (char *)&x, 1);
                break;
            }
        }
    }
    printf("flag{%s}\n", flag);
    return 0;
}

得flag{KLDQCUDFZO}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值