Loading

攻防世界逆向-难度1- CatFly

难度1题目

CatFly


Linux下的elf二进制文件,strings一下没发现什么信息。
参考:
https://xia0ji233.pro/2023/01/01/Nepnep-CatCTF2022/index.html
https://blog.csdn.net/Lynnette177/article/details/132616817

解题思路:遍历正确密钥,解密dword_E120 (flag密文),注意sub_62B5()获取的密钥是根据print返回值动态变化的。
问题

  1. 为什么要做charNum操作?

答:计算dword_108E0的位数,符合程序的print逻辑,这一步是为了更新密钥。

#include<stdio.h>
#include<string.h>
#include <stdbool.h>

int pass = 0x1106;
int encryptFlag[50]={0x27fb, 0x27a4, 0x464e, 0x0e36, 0x7b70, 0x5e7a, 0x1a4a, 0x45c1, 0x2bdf, 0x23bd, 0x3a15, 0x5b83, 0x1e15, 0x5367, 0x50b8, 0x20ca, 0x41f5, 0x57d1, 0x7750, 0x2adf, 0x11f8, 0x09bb, 0x5724, 0x7374, 0x3ce6, 0x646e, 0x010c, 0x6e10, 0x64f4, 0x3263, 0x3137, 0x00b8, 0x229c, 0x7bcd, 0x73bd, 0x480c, 0x14db, 0x68b9, 0x5c8a, 0x1b61, 0x6c59, 0x5707, 0x09e6, 0x1fb9, 0x2ad3, 0x76d4, 0x3113, 0x7c7e, 0x11e0, 0x6c70};
int getPass()
{
    pass = 1103515245 * pass + 12345;
    return (pass >> 10) & 0x7FFF;
}

//不断地将 dword_108E0 除以 10 来计算 dword_108E0 的位数。
//每次除以 10,dword_108E0 的位数就会减少一位,直到 dword_108E0变为 0。函数返回的结果 i 就是 dword_108E0 的位数。
int charNum(int count){
    int i=0;
    while(count){
        count /= 10;
        i++;
    }
    return i;
}

bool isRightFlag(char a1){
    return (a1 & 0x7Fu) <= 0x7E && (a1 & 0x7Fu) > 0x20;
}

int main(){
    int count = 0;
    unsigned char flag[51]={0};
    while(1){
        for(int i = 0; i < 50; i++){    //用第一个密钥0x1106解析内容
            encryptFlag[i]^=getPass();

            if(isRightFlag(encryptFlag[i])){   //判断当前密钥解密的内容是否正确
                flag[i]=encryptFlag[i]&0xff; //正确则写入
            }else{
                flag[i] = 32; //这里可以优化,直接break掉,但是要注意密钥解析内容需要单独循环,以保证程序的原来逻辑
            }
        }

        if(memcmp("CatCTF",flag,6) == 0){
            puts(flag); //等效于printf("%s\n",s)
            break;
        }

        ////更新密钥
        count += 1;
        pass += 41; //dword_E1E8 += printf("\x1B[1;37mYou have nyaned for %d times!\x1B[J\x1B[0m", (unsigned int)++dword_108E0);去掉%d
        pass += charNum(count);
    }
}

总结:

  1. 密文存在代码中。
  2. 密钥硬编码,动态变化,但可以被预测。
posted @ 2024-04-25 12:32  _rainyday  阅读(565)  评论(1)    收藏  举报