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

re题(27)BUUFCTF-[MRCTF2020]Transform

BUUCTF在线评测 (buuoj.cn)

先到ida,先看一下字符串

找到主函数 

int __cdecl main(int argc, const char **argv, const char **envp)
{char Str[104]; // [rsp+20h] [rbp-70h] BYREFint j; // [rsp+88h] [rbp-8h]int i; // [rsp+8Ch] [rbp-4h]sub_402230(argc, argv, envp);sub_40E640("Give me your code:\n");sub_40E5F0("%s", Str);if ( strlen(Str) != 33 ){sub_40E640("Wrong!\n");system("pause");exit(0);}for ( i = 0; i <= 32; ++i ){byte_414040[i] = Str[dword_40F040[i]];  #把dword_40F040的数据作为str数组的下标,然后赋值给byte_414040,这是一个把str数组打乱顺序的操作,打乱顺序后的数据存在byte_414040里,作为flagbyte_414040[i] ^= LOBYTE(dword_40F040[i]);  # LOBYTE是取16bit数据的低8bit,再用dword_40F040的低8bit对byte_414040进行一个异或赋值给byte_414040,这一步是对byte_414040的一个异或加密#这两步里的dword_40F040只是一个中间变量,str数组是原始数据,byte_414040是加密后的flag}for ( j = 0; j <= 32; ++j ){if ( byte_40F0E0[j] != byte_414040[j] )#一个对比操作,对byte_40F0E0进行逆向即可{sub_40E640("Wrong!\n");system("pause");exit(0);}}sub_40E640("Right!Good Job!\n");sub_40E640("Here is your flag: %s\n", Str);system("pause");return 0;
}

大小端序问题 

这里8dup(0)是存8个0 

汇编: dup伪指令_year db 4 dup('0')-CSDN博客

清楚了逻辑

写个脚本

dword_40F040 = [0x9, 0x0A, 0x0F, 0x17, 0x7, 0x18, 0x0C, 0x6, 0x1, 0x10, 0x3, 0x11, 0x20, 0x1D, 0x0B, 0x1E, 0x1B, 0x16, 0x4, 0x0D, 0x13, 0x14, 0x15, 0x2, 0x19, 0x5, 0x1F, 0x8, 0x12, 0x1A, 0x1C, 0x0E, 0]byte_40F0E0 = [0x67, 0x79, 0x7B, 0x7F, 0x75, 0x2B, 0x3C, 0x52, 0x53, 0x79, 0x57, 0x5E, 0x5D, 0x42, 0x7B, 0x2D, 0x2A, 0x66, 0x42, 0x7E, 0x4C, 0x57, 0x79, 0x41, 0x6B, 0x7E, 0x65, 0x3C, 0x5C, 0x45, 0x6F, 0x62, 0x4D]str1 = [0] * 33flag = ''for i in range(33):byte_40F0E0[i] ^= dword_40F040[i]str1[dword_40F040[i]] = byte_40F0E0[i]for i in range(33):flag += chr(str1[i])
print(flag)#flag{Tr4nsp0sltiON_Clph3r_1s_3z}

本题考察了对数据打乱顺序和异或的加密方法,就是用一个数组作为中间值,数组长度与flag相同,然后对应地进行一位一位地加密


http://www.mrgr.cn/news/29248.html

相关文章:

  • Oracle EBS中AR模块的财务流程概览
  • 天源迪科java实习生面经
  • Python 项目实践:文件批量处理
  • troubles are forgotten.
  • 视频监控平台AS-V1000的场景管理,如何切换不同场景的多画面视频,快速浏览自己需要的实时视频画面
  • 谷歌怎么像图里这样多开贴吧号??
  • 考研数学精解【1】
  • html实现好看的多种风格手风琴折叠菜单效果合集(附源码)
  • 深入理解Python中的时间表示:Unix时间点、毫秒和微秒,以及time模块
  • 编程思想:静态与动态:编译时和运行时
  • LibJPEG库使用_通过LibJPEG将RGB数据保存为JPG图片存储到磁盘
  • 面试突击-多线程和IO专题(至尊典藏版)
  • 20、Python如何读写json数据
  • 应用性能优化实践(三)减少丢帧卡顿
  • Java基础之-多线程
  • MySQL函数:字符串函数
  • Python 项目实践:简单的计算器
  • <<编码>> 第 14 章 反馈与触发器(1)--振荡器 示例电路
  • 蓝卓标杆客户镇洋发展,荣获IDC中国未来企业大奖
  • matplotlib添加字体