当前位置: 首页 > news >正文

BUU usualCrypt1

查壳,32bit,丢进ida32中进行反编译,简单的不多说,直接进main分析

简单分析,打上注释,没啥好看的,就一个加密函数,加密完后和一个字符串进行比较,由此可以逆推出加密前的字符串,也就是flag了,直接进入加密函数进行查看

小小base64加密,但其中还有两个加密函数,第一个函数是对码表进行了变化,第二个则是将大小写转换了一下,第二个我相信在看的各位都能看懂,我着重讲一下第一个加密函数(我也是理解了好一会儿)

这边看着似乎很简单,就是简单的换值,将字符串a开头的第六位往后九位和字符串k开头的第六位往后九位字符进行交换,这边有一个点,这两个字符串其实就是一个地址连在一块儿的大字符串也就是字符串ABCDEF GHIJKLMNO PQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

这边看似是两个字符串的相互操作,其实就是这个字符串的内部操作,可以写如下代码


/*
#include<iostream>
using namespace std;
int main()
{char str2[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";char v1;for (int result = 6; result < 15; result++){v1 = str2[result + 10];str2[result + 10] = str2[result];str2[result] = v1;}puts(str2);return 0;
}*/

运行出的结果就是变化后的码表,这是第一种理解方式,还有第二种理解方式,但是这个较为麻烦,但应该很多人第一时间都会以第二种方式去理解,所以我详细讲一下,你们可能会写出如下代码


/*
#include<iostream>
using namespace std;
int main()
{char v1;char str1[] = "ABCDEF GHIJKLMNO PQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";char str2[] = "KLMNOP QRSTUVWXY Zabcdefghijklmnopqrstuvwxyz0123456789+/";for (int result = 6; result < 15; result++){v1 = str2[result ];str2[result ] = str1[result];str1[result] = v1;}puts(str1);return 0;
}*/

但是这么写就错了,因为此处虽然是两个字符串在操作,实际上确是对一个字符串进行操作,因为str2是str1的一部分,但这样硬写也能写出来,如下图

我们将两个数组单拿出来,首先是前六位不变,这个没有异议吧,接下来从第七位开始,往后九个字符被替换成了QRSTUVWXY,这个也没有问题吧,但接下来问题来了,我们看到数组2,是以字符k为开头的,在数组中KLMNO已经被替换成了UVWXY,但是还有个p没有被替换,那就把p加上去,这边直接看数组2,不看数组1了,为什么呢?因为,第一点,数组2本身就是数组1的一部分,第二点,数组2已经被改变了,但是数组1中的数组2部分并没有被改变,所以看数组1就没有意义了,看数组2即可,数组2的P后面九位被替换成了GHIJKLMNO,剩余的照抄,你就会发现,和代码1运行的结果是一样的,这个确实难理解,我也想了好一会儿,建议反复斟酌斟酌,最后嘛,也就没什么操作了,这边已经得到了变码表,然后把要比对的那个字符串,如下图

给他大小写转换一下,最后找个变码base64在线解密的网站,输入,即可得到flag

这道题,看似简单,实则简单,就当是多学了个知识点,若是两个相邻的字符串在互相操作,直接把他变成一个大字符串,然后在他的内部操作就行,注意偏移量即可,其他没啥了

http://www.lryc.cn/news/473458.html

相关文章:

  • 第十七章 标准库特殊设施
  • 【格言分享】程序员的经典名言解读
  • SpringBoot接收LocalDateTime参数
  • Typora配置GitHub图床--结合PicGo
  • 【书生.浦语实战营】——入门岛
  • WPF+MVVM案例实战(十四)- 封装一个自定义消息弹窗控件(下)
  • 嵌入式——STM32外设应用
  • HCIA(ACL)
  • react基础之reactHooks
  • Java基础0-Java概览
  • SW绘制曲面
  • css知识点梳理2
  • 攻防世界 MISC miao~详解
  • 使用 `tracert [options] <目标地址>` 命令的详细介绍
  • 闲一品交易平台:SpringBoot技术的新境界
  • 【深入浅出】深入浅出transformer(附面试题)
  • 苹果重大更新,macOS与iOS同时推出更新!功能真好用
  • 刘艳兵-DBA016-在您的数据库中,SALES表存在于SH用户中,并且启用了统一审计。作为DBA,您成功执行了以下指令:
  • 力扣题目解析--整数反转
  • 净水前置需要安装吗?
  • 在深度学习研究方向有哪些创新点
  • YOLOv11改进策略【卷积层】| 2024最新轻量级自适应提取模块 LAE 即插即用 保留局部信息和全局信息
  • 工作转型与个人突破提升:如何在社会浪潮中激流勇进
  • mongodb:增删改查和特殊查询符号手册
  • 你的Mac book多久没有清洁键盘屏幕了,Mac清洁好帮手来了
  • ANA基因组数据库(ANAgdb)
  • leetcode 704 二分查找
  • Vue学习笔记(十一)
  • ABAP进阶学习1:动态内表1-通过系统表LVC_T_FCAT类型定义内表
  • 【Vispy库】一个用于高性能交互式2D/3D数据可视化库 Python库