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

【BUUCTF逆向题】[WUSTCTF2020]level1、[GUET-CTF2019]re

一.[WUSTCTF2020]level1

打开文件夹一个无后缀文件一个txt输出文档
文件放入WinHex发现是ELF程序,用Exeinfo查看64位无壳
在这里插入图片描述
丢入IDA64,main函数F5反编译后阅读程序
先将flag文件的内容赋值到第三方数组中然后根据数据所在序号是奇数偶数分别使用不同的处理方式输出
补充
& 按位与运算:将数据转换为二进制然后逐位比较,都是1则为1否则为0:,“全真则真,一假则假”;
<< 左移运算符,二进制数据所有向左移一位,右边补0(正数,负数不同),这里数据都是正数,所以**>>** 右移运算符可以作为逆向运算符
在这里插入图片描述
写逆向脚本:

output = [198, 232, 816, 200, 1536, 300, 6144, 984, 51200, 570, 92160, 1200, 565248, 756, 1474560, 800, 6291456, 1782, 65536000]
flag_chars = []

for i in range(1, 20):
    if i % 2 != 0:  # i 为奇数
        ptr_i = output[i - 1] >> i
    else:  # i 为偶数
        ptr_i = output[i - 1] // i
    flag_chars.append(chr(ptr_i))#记得将整数转换为字符

# 尝试将结果转换为字符串
try:
    flag = ''.join(flag_chars)
    print("推测的 flag 内容为:", flag)
except ValueError:
    print("无法将结果转换为有效的字符串,请检查输出或数据。")

得到ctf2020{d9-dE6-20c}

二.[GUET-CTF2019]re

无后缀文件用WinHex打开发现是ELF开头即Linux下可执行程序
Exeinfo发现64位有upx壳
在这里插入图片描述
超级巡警只能脱PE文件(Windows下可执行程序)壳,所以用kali的upx工具脱壳
脱壳完用IDA64打开发现没有main 函数,函数栏好多其他函数,先用Shift+F12查看字符串有没有可疑线索
在这里插入图片描述
发现关键语句直接Ctrl+X交叉定位进入关键函数
就是输入flag然后判断是否正确
注意:这里不是越界输入,因为没有地址,上面的printf和scanf的多余变量都是作为控制输入,比如缓冲区大小,比如结束输入标志等,反正不用管。
在这里插入图片描述

补充:函数太多可以重命名方便观察,如下
在这里插入图片描述
接着进入关键函数key
通过阅读可以发现就是对输入传入参数v11也就是我们输入变量的约束验证,通过这些就可以反推出v11也就是输入的正确flag
在这里插入图片描述
补充:据说这是典型z3约束器求解题但是我不认识也不会,所以一个个手算就行
注意:这里没有v11[6]的信息,反正就1个字符,所以可以自己爆破
先给出逆向脚本

a1 = chr(166163712 // 1629056)
a2 = chr(731332800 // 6771600)
a3 = chr(357245568 // 3682944)
a4 = chr(1074393000 // 10431000)
a5 = chr(489211344 // 3977328)
a6 = chr(518971936 // 5138336)
a8 = chr(406741500 // 7532250)
a9 = chr(294236496 // 5551632)
a10 = chr(177305856 // 3409728)
a11 = chr(650683500 // 13013670)
a12 = chr(298351053 // 6088797)
a13 = chr(386348487 // 7884663)
a14 = chr(438258597 // 8944053)
a15 = chr(249527520 // 5198490)
a16 = chr(445362764 // 4544518)
a17 = chr(981182160 // 10115280)
a18 = chr(174988800 // 3645600)
a19 = chr(493042704 // 9667504)
a20 = chr(257493600 // 5364450)
a21 = chr(767478780 // 13464540)
a22 = chr(312840624 // 5488432)
a23 = chr(1404511500 // 14479500)
a24 = chr(316139670 // 6451830)
a25 = chr(619005024 // 6252576)
a26 = chr(372641472 // 7763364)
a27 = chr(373693320 // 7327320)
a28 = chr(498266640 // 8741520)
a29 = chr(452465676 // 8871876)
a30 = chr(208422720 // 4086720)
a31 = chr(515592000 // 9374400)
a32 = chr(719890500 // 5759124)

print(a1,a2,a3,a4,a5,a6,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,a30,a31,a32,sep='')
#flag{e65421110ba03099a1c039337}

注意:这里可以除不尽就会导致chr报错,所以可以用int()转换除/后的结果,也可以用//运算符就是整除
然后爆破第7位是1
最终flag{e654211110ba03099a1c039337}


http://www.kler.cn/a/531149.html

相关文章:

  • 线性数据结构:单向链表
  • 在 Ubuntu 中使用 Conda 创建和管理虚拟环境
  • C# 语言基础全面解析
  • 01.双Android容器解决方案
  • 使用 HTTP::Server::Simple 实现轻量级 HTTP 服务器
  • 完全卸载mysql server步骤
  • linux通过lvm调整分区大小
  • 【Leetcode 每日一题】81. 搜索旋转排序数组 II
  • 【ChatGPT:开启人工智能新纪元】
  • 嵌入式硬件篇---HAL库内外部时钟主频锁相环分频器
  • Leetcode面试高频题分类刷题总结
  • GESP2023年9月认证C++六级( 第三部分编程题(2)小杨的握手问题)
  • BFS(广度优先搜索)——搜索算法
  • unity学习27:用Input接口去监测: 单点触摸和多点触摸
  • 虚幻基础17:动画层接口
  • 【C语言入门】解锁核心关键字的终极奥秘与实战应用(二)
  • js数据结构与算法
  • 房屋中介管理系统的设计与实现
  • 图形学笔记 - 5-光线追踪 - 辐射度量学
  • 高频文件更新数据实时同步实现原理
  • TensorFlow 示例平方米转亩
  • OpenCV:FLANN与暴力特征匹配
  • leetcode——二叉树的最近公共祖先(java)
  • HTML5教程之标签(2)
  • Java_类加载器
  • deep generative model stanford lecture note3 --- latent variable