buuctf---CrackRTF

下载文件后用die查看,发现是32位无壳

于是将其在ida中打开查看伪代码,根据我做题的习惯一般第一步不是直接去查看主函数,而是直接去查看字符串,然后根据字符串可以看出一些东西

这里我发现这个没有base64编码的东西,而且看到了一个输入函数,所以我们跟进,跟进就是直接点击进去,然后用ctrl+X进行查看

然后它会跳转到一个汇编语言的地方

然后我们就可以通过f5来查看它的伪代码了

这里可以看到,一共有两段密码,第一段密码好像是通过一个运算,然后跟一个字符串进行匹配,而且这个输入是6字节,纯数字,这里数了一下字符串,发现长度为40,然后继续查看它的这个转换函数

然后就看到了一些看不懂的东西,但是这个Hash还是认识的,于是猜测可能是进行了hash的运算,然后长度为40,这里可以给出关于hash的一些运算函数

def get_md5(message): #32位长度
    md5=hashlib.md5() #首先创建对象
    s=message.encode()
    md5.update(s)
    result=md5.hexdigest()
    return result
def get_sha256(message): #64位长度
    sha256=hashlib.sha256()
    s=message.encode()
    sha256.update(s)
    result=sha256.hexdigest()
    return result
def get_sha1(message): #40位长度
    sha1=hashlib.sha1()
    s=message.encode()
    sha1.update(s)
    result=sha1.hexdigest()
    return result

第一个是Md5,结果得到的是32位的小写字母,第二个是sha256,结果是64位的字符串,第三个是sha1,结果是40位的字符串

所以这个应该就是sha1了,那么我们就可以通过爆破解出来

这里给出解密代码:
s="6E32D0943418C2C33385BC35A1470250DD8923A9".lower()
s1='@DBApp'
for i in range(100001,1000000):
    k=str(i)+s1
    sha1=get_sha1(k)
    if s==sha1:
        print(k)
注意这个需要引用hashlib这个库,如果没有的话可以通过pip install hashlib直接下载

运行结果为123321那么第一段结果就是123321@DBApp,这个在后面还是会用到的

第二个key也是长度为6,但是就是有一个问题就是这个没有给定范围,但是即便如此,我还是直接去爆破,然后就老实了。。。

毕竟这个数字实在是太大了,6层循环......

第2个要匹配的字符串长度是32位,所以应该是md5,但是我总是感觉理论上应该是可以爆破出来的,但是这个爆破不出来说明可能在哪里还有提示,只是我还没有发现

看了一下,发现最后还有一个函数,点进去看看

发现这个东西根本看不懂,然后查了一下发现,这个是在进行一个查找资源并且获取这个资源的一个操作,首先通过FindResourceA()第二个是资源ID,第三个是资源类型,如果没有找到就放回0,然后通过SizeofResource()获取资源大小,然后通过LoadResource()将查找的资源,加载资源数据到内存,最后就是通过LockResource将这个资源锁定,然后处理!

这里有一个软件,做这个题还是很至关重要的,就是查看这个获取的资源!这个软件的名称就是Resource Hacker.可以去这个网址下载

Resource Hacker

然后我们打开这个软件,将这个文件放进去,就可以看到,一个ID是101的,然后类型是AAA的资源

但是这个确实是看不懂的,所以先放着,继续网下分析,下面还有一个函数

这个函数的第一个参数是那个Str,是通过这个进行MD5转化然后进行比较的,这个长度是18位,第二个参数是上面的那个资源,第三个为长度,这里我们目标明确,是要求这个Str,然后解出这个文件

对于这个Str,我们也只需要关注前6位就欧克了,因为后面的那些东西我们已经知道了

看了一下这个代码,主要是进行异或运算,将这个Str的每一位与这个获取的资源进行异或运算,那么这个运算的结果是什么呢,那么我们就得回到前面去分析了

可以看到,在函数运行完之后,好像创造了一个.rtf文件,猜测这个函数运行的结果应该得到了一个rtf文件

于是现在我们去试着打开一个rtf文件

又搜了一下,发现刚好6位,说明这个6位是通过那个Str和获取的资源前6位进行异或运算得到的,那么获取这个Str可以通过{\rtf1与那个资源的前6位进行异或运算得到

资源前6位为:05 7D 41 15 26 01

rtf文件前6位为:{\rtf1

下面给出异或代码加MD5加密结果

k1="123321@DBApp"
s=r"{\rtf1"
s1="05 7D 41 15 26 01"
# print(int("7D",16))
def fun(str):
    return int(str,16)
lst=list(map(fun,s1.split()))
s1=''
for i in range(6):
    s1+=chr(ord(s[i])^lst[i])
print(s1)
print(get_md5(s1+k1))
# s="27019e688a4e62a649fd99cadaafdb4e"

这个结果与s的结果是一样的,说明第二个key值解出来了,这里我们解出来还需要进行一步操作,就是!运行程序!!

然后得到了一个rtf文件

打开就是flag

Flag{N0_M0re_Free_Bugs}

### BUUCTF 中 LSB Steganography 技术详解 #### 背景介绍 LSB (Least Significant Bit) 隐写术是一种常见的数据隐藏技术,通过修改图像像素值的最低有效位来嵌入秘密信息。这种方法利用人类视觉系统的局限性,在不影响图像整体外观的情况下实现隐秘通信[^1]。 在 CTF 比赛中,尤其是像 BUUCTF 这样的平台,LSB 隐写术经常被用来设计挑战题目。参赛者通常需要分析给定的图片文件并提取其中隐藏的信息。这类题目可能涉及密码保护、多层加密或其他复杂机制。 #### 工具与方法 对于解决基于 LSB 的隐写术问题,可以使用专门开发的相关工具或编写自定义脚本完成任务。例如,“LSB-Steganography” 是一个开源项目,提供了将文件嵌入到图片中的功能,并支持设置密码增强安全性。 以下是该过程的一个简单示例代码片段用于演示如何读取含密信息: ```python from PIL import Image def extract_data(image_path, password=None): img = Image.open(image_path) binary_data = '' pixels = list(img.getdata()) for pixel in pixels: r, g, b = pixel[:3] # Extracting least significant bits from RGB channels. binary_data += bin(r)[-1] binary_data += bin(g)[-1] binary_data += bin(b)[-1] all_bytes = [binary_data[i:i+8] for i in range(0, len(binary_data), 8)] decoded_data = "" for byte in all_bytes: decoded_data += chr(int(byte, 2)) if decoded_data[-5:] == "#####": # Assuming '#####' as delimiter break return decoded_data[:-5] hidden_text = extract_data('example.png') print(hidden_text) ``` 上述代码展示了从 PNG 图片中提取隐藏文本的方法之一。需要注意的是实际比赛中可能会遇到更复杂的场景,比如加入了特定编码方式或者额外验证步骤等附加条件[^2]。 #### 密码提示解析 有时解题过程中会获得一些辅助线索帮助定位正确答案路径。“tips.txt” 文件提到两点值得注意的内容:“These are rot for 47 days”,暗示可能存在时间周期关联;另一条则明确指出除了基本算法外还需要考虑是否存在附加密码因素影响最终结果解读准确性。 综上所述,在参与 BUUCTF 类型赛事时面对 LSB steganography 关联难题应综合运用理论知识配合实践技巧灵活应对各种可能性变化情况才能顺利通关取得胜利成果!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值