CTFShow的36D杯

神光

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
还是想了一下,但那个异或搞不出来,都是对dword_41A038操作,想起开头就给了 key ,还有反调试应该是要调试的
在这里插入图片描述
输出的应该就是 flag ,只是为什么是乱码呢?
放 od 再试试,直接就出 flag 了,强!!!
有点坑人 0_0

BBBigEqSet

好像是大端序的意思
在这里插入图片描述
这么多变量,记得可以用 angr 还是 pwntools 爆破
这么多肯定是不用 z3 了
在这里插入图片描述
一些师傅看的汇编(ida不能f5),确实汇编可以看出都是一样的操作:

movzx eax, [rbp+s]

零扩展并移动数据指令,0x1234–>0x00001234

movsx eax, al

符号扩展并移动数据,用符号扩展补充高位
0xff–>0xFFFFFFFF , 0x7f -->0x0000007F

imul edx, eax, 9421h

有符号整数乘法, eax * 0x9421 得到一个64位结果,高32位存到edx,低32位存到eax

嗯,找规律哈哈哈哈
在这里插入图片描述
厉害了我嘞个豆
然后比较重要的就是提取数据

def u32(a):
    return a[3]<<24 | a[2]<<16 | a[1]<<8 | a[0]
 
#1
data = open('BBBigEqSet', 'rb').read()[0x11c7:0x11c7+ 0x909*0x80]
print(hex(len(data)))
taba = []
tabb = []
for i in range(0x80):
    stab=[0]*0x80
    ptr = 12
    for j in range(0x80):
        stab[j] = u32(data[ptr: ptr+4])
        ptr+=18
        if j==0:
            ptr-=2
    ptr -= 11
    taba.append(stab)
    tabb.append(u32(data[ptr: ptr+4]))
    data = data[0x909:]
 
print(taba, tabb)
 
#2
import numpy as np
an = np.array(taba)
bn = np.array(tabb)
 
x = np.linalg.solve(an,bn)
print(x)
print(bytes([round(i) for i in x]))
#flag{Soooo000_LooOOOOOOOOggO99g99_s1muLtaNeOus_EEEQuat10n5_Y0UUUUUUuuu_cAA44AANNnnN_SOOOOOOLVE_IT17TT11771ITIT!!!_8ShotDshP90ab}

但 ida python 有点问题,我不能导入模块,烦死
唉,我的 8.3的ida 可以,0_0

总结:

这个脚本蕴含了 dword 数据转32位数据,ida脚本提取数据,还有 numpy 库的使用

签到

在这里插入图片描述
动调一下
在这里插入图片描述
要找到输入所存的变量,看函数应该是 v8 或者 v10
在这里插入图片描述
就是 v8 , v6 要等于0

# -*- coding:utf-8 -*-

model = [102, 109, 99, 98, 127, 58, 85, 106, 57, 82, 122, 55, 81, 19, 51, 35, 67, 70, 41, 61, 41, 32, 127, 28, 38, 77,
         49, 20, 80, 94]
flag = ''

for i, val in enumerate(model):
    flag += chr(0 ^ i ^ (i + (i ^ val)))
print (flag)

用到了枚举 i 是索引,val 是值
或者这样
在这里插入图片描述

tiny

在这里插入图片描述
我 PE 结构还没学完呢 0_0
在这里插入图片描述
在这里插入图片描述
文件头不对?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
后面几个没看懂
嗯,这个先留着吧

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值