首页 > 其他分享 >攻防世界逆向-难度1- CatFly

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

时间:2024-04-25 12:47:31浏览次数:33  
标签:count 逆向 攻防 CatFly int pass 密钥 108E0 dword

难度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. 密钥硬编码,动态变化,但可以被预测。

标签:count,逆向,攻防,CatFly,int,pass,密钥,108E0,dword
From: https://www.cnblogs.com/Rainy-Day/p/18157391

相关文章

  • js逆向实战之智通财经网token参数解密
    url:https://www.zhitongcaijing.com/immediately.html分析过程抓流量包,主要关注如下这条数据包。响应数据如下。由于该url中的token参数是经过加密的,所以目的就是找到加密过程。关键字搜索immediately/content-list.html,只有两条记录,第一处是个html代码,肯定不是,所以只......
  • boss直聘__zp_stoken__逆向
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!目标网站aHR0cHM6Ly93d3cuemhpcGluLmNvbS93ZWIvZ2Vlay9qb2I/cXVlcnk9SmF2YSZjaXR5PTEwMTI4MTYwMA== z......
  • js逆向实战之莫莫铺子sign参数解密
    url:http://mmpz.ttzhuijuba.com/?r=/l&cids=1&site=classify&sort=0分析过程抓取流量包。主要关注图中框起来这条流量包,因为这条流量包返回的是当前页面数据。该流量包的url地址有个加密的参数sign,目的就是找到sign参数的加密过程。按照常规思路会去搜索url中的关键......
  • Android逆向与安全——360 dex加固与脱壳
    参考:https://zhuanlan.zhihu.com/p/566412180前言现在市面上对APP的安全合规管控越来越严格了,也就要求了APP在上架之前一定要做合规检测和加固处理。对APP就是加固的好处,可以提高APP的安全性,提高APP被逆向分析破解的门槛,同时通过加固保护可以提高过安全合规的检测。由于APP加......
  • 爬虫js逆向(python调用js学习)
    首先介绍pyexecjs的使用PyExecJs是一个python库,用于在Python环境中执行javaScript代码。它实际上是对Execs库的Python封装,Execls本身是一个通用的JavaScript运行环境的抽象层。使用PyExecJs,你可以在Python中执行JavaScript代码,而无需启动一个完整的JavaScript解释器......
  • 安卓逆向训练
    Simplecheck点开a函数,是一个check函数编写脚本a=[0,0x8BBD6FE,205327308,0x59E0C2D,138810487,408218567,0x4A42485,0x443BE85,0x21929A0A,559010506,449018203,576200653,307283021,0x1BDF218B,314806739,0x1459AAFB,0x1459AAFB,0x1C039BBC,0x18E61B76,......
  • JS逆向
    断点调试的几种办法一、文件流程断点首先以一个登录界面举例说明,抓取登录的数据包.载荷处存在加密的数据 在启动器处可以查看调用堆栈,这个登录请求,大致分析是处在中间位置发生了加密,所以跟一下Login 之后在代码前加入断点,并登录 发现加密数据是在Login处有,匿名处没......
  • js逆向实战之一品威客signature参数解密
    url:https://www.epwk.com/login.html分析过程输入用户名和密码,看触发的流量包。signature参数明显是被加密过的,接下来就是去寻找加密的过程。关键词搜索signature。有两处,第二处是个固定值不需要看,关注点在第一处。点进去看对应的代码,并打断点,重新登录,触发该断点。......
  • js逆向实战之微信公众平台pwd参数解密
    网址:https://mp.weixin.qq.com/分析过程调出开发者工具,切换到network模块,随便输入一个账号和密码,抓包。看到pwd参数被加密了,接下来就是去找到pwd参数的加密过程。但其实这里可以进行加密方法的猜测,密码处输入123456,抓包。相信有经验的人可以很快的反应出是个md5算法。其......
  • Qt 从 QTransform 逆向解出 Translate/Scale/Rotate(平移/缩放/旋转)分析
    QTransform用于图形绘制,它定义了如何平移(translate)、缩放(scale)、切变(shear)、旋转(rotate)或投射(project)坐标系。注意:QTransform是作用于坐标系,不是直接作用于图形。实际运用中我们可以通过QPainter、QGraphicsView、QGraphicsItem实现图形的平移、缩放、旋转等操作,但是需要从......