NKCTF-2023-RE-not_a_like

not_a_like

拖入PE查询中看看,发现有upx壳

在这里插入图片描述

用upx的程序进行脱壳,发现并不能脱去。

丢入winhex中进行查看,发现upx壳的头缺失了。

正常的
在这里插入图片描述

本题的

在这里插入图片描述

我们需要将其Upx头进行补全。
在这里插入图片描述

然后再进行upx脱壳

脱壳后,进入ida我们可以发现许多py后缀的文件,可以判断这里为py打包为exe

我们用pyinstxtractor.py进行解包。

将struct的文件头复制到,not_a_like的文件之中,将其变成pyc文件。

然后对pyc进行反编译。

#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
# Version: Python 3.8

import libnum
import base64
import hashlib
from ctypes import *

def encrypt(text):
    data_xor_iv = bytearray()
    sbox = []
    j = 0
    x = y = k = 0
    key = '911dcd09ad021d68780e3efed1aa8549'
    for i in range(256):
        sbox.append(i)
    for i in range(256):
        j = j + sbox[i] + ord(key[i % len(key)]) & 255
        sbox[i] = sbox[j]
        sbox[j] = sbox[i]
    for idx in text:
        x = x + 1 & 255
        y = y + sbox[x] & 255
        sbox[x] = sbox[y]
        sbox[y] = sbox[x]
        k = sbox[sbox[x] + sbox[y] & 255]
        data_xor_iv.append(idx ^ k)
    return data_xor_iv

if __name__ == '__main__':
    flag = input('%e8%af%b7%e8%be%93%e5%85%a5flag> ')
    pub_key = [
        0x1B6A7561D99E6FC35BA3C241159424698BF3CAC017CFCE8BB325CC9AF9CBCBDB3997B08D922C8705FC3EEAEF50D60ADAB2757A7204715483A1D612502970595358BCFE9CD11C98CAD293EB921D777F4F910905D79CDCA5C1EC1FBA5DA74DB165F82BBE29EA0B2E597860FC6D2C51C12D46BF11AFA5018496DDFC3474B10B4457L,
        0x6C8E1CC5B384DE3B3316C22CF72D9895406298E172B5F4D890BDC04889BB43CD4892689DE701C84ED68B4CBC7193926BCCB0A4F259D2E752FAEF3CD590A793F120D15424AEB3CD53F5D59B5D41D699694ABF4F01532F0F1CE127B07958FB874982E757EF97643335376790BC990CEE9D7F0D05DA90AD62084C88BFA9C9BEB683L]
    m = libnum.s2n(flag)   #编码转换
    c = str(pow(m, pub_key[0], pub_key[1]))//rsa
    q = b'EeJWrgtF+5ue9MRiq7drUAFPtrLATlBZMBW2CdWHRN73Hek7DPVIYDHtMIAfTcYiEV87W7poChqpyUXYI3+/zf5yyDOyE9ARLfa5qilXggu60lmQzFqvFv+1uOaeI2hs2wx+QZtxqGZzC0VCVWvbTQ52nA2UdUtnk8VezRMPMfmf7rOqPxDTv/aacLnI3RdLG2TbT52qtN4+naejI7Xe8HLOL765OZKdDBERKwd5ARQ3UL6YPbuOKOQahIFddnIX6rZ7dTNqCUDOjfJbMdrzJVDNjmNlkLNtYFo7M65Wfwj6PV5vvtT33FsmH50/YLEasnlCiJujYOgi2KCdf5msz1dPEvrXDDL6Csnjo+6m/44RzlluzcqMS5ZJFdrHEh68LIqtu+HCO+69Dyq4e22APq8wgN9kU6R8kikXSn/Ej0N/jOvomFCbkHskRl8xP1KgWFW0SMVDlaDCM4EKG812VgDWgSYOUnVhVpz65uOtg4Z8PrPI+BW4398dQYhD24D9EIPgvtmhNrHiEHouB46ElTGQgZBhtn6y9tL1sw=='
    v = encrypt(base64.b64encode(c.encode('utf-8')))
    v = base64.b64encode(v)
    if v == q:
        print('You are right!')
        input('')
    else:
        print('winer winer winnie dinner')
        print('Do you think the encryption and decryption are the same?')

到这里了,我们直接进行逆向分析即可。
在这里插入图片描述

先是将我们的flag进行rsa加密,通过搜索,我们可以知道这里属于RSA的维纳攻击

这里上传一个关于解维纳攻击比较好的工具

链接:https://pan.baidu.com/s/1-JET-fKjWU7ThgIGBnaR6g?pwd=cnx5

提取码:cnx5

进行RSA解密之后,就对我们的数据进行base64加密,对于加密后的数据传入encrypt中进行加密。

在这里插入图片描述

分析encrypt我们很容易可以看出是进行RC4加密。

对rc4加密之后,然后再进行了一次base64加密。

最后再对密文进行对比。

通过这个思路,我们进行逆向解出flag即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值