[WUSTCTF2020]funnyre

这题的考点是花指令,进入了ida发现无法进行F5反汇编,左边的函数名中也没有找到main函数,这里可以通过图形视图进入

点击这个然后滑倒指令窗口双击main

即可前往main函数地址

因为一直按F5无法进行反汇编才是是进行了混淆或者存在花指令影响汇编,往下查看汇编代码寻找线索

这里发现条件跳转并且没有进行比较且跳转地方相同,可以断定为花指令一直到填充到此处异或运算不是垃圾指令

发现此处存在爆红再往下看看还有什么线索,将整个函数翻完发现存在四个这种爆红call全部进行nop到了函数尾部结束的时候对其进行P然后点击跳转即可返回函数头

到这里所有花指令已经解除,审代码逻辑后得出结果

dt = [0xd9, 0x2c, 0x27, 0xd6, 0xd8, 0x2a, 0xda, 0x2d, 0xd7, 0x2c, 0xdc, 0xe1, 0xdb, 0x2c, 0xd9, 0xdd, 0x27, 0x2d, 0x2a, 0xdc, 0xdb, 0x2c, 0xe1, 0x29, 0xda, 0xda, 0x2c, 0xda, 0x2a, 0xd9, 0x29, 0x2a]


def kaisa(xx, kk):
    return [(x+kk) & 0xFF for x in xx]


def xor(xx, kk):
    return [x ^ kk for x in xx]


def check(xx):
    for x in xx:
        if x < ord('0') or (x > ord('9') and x < ord('a')) or x > ord('f'):
            return False
    return True


if __name__ == '__main__':
    for k1 in range(0x100):
        tt = kaisa(dt, k1)
        for k2 in range(0x100):
            tt2 = xor(tt, k2)
            if check(tt2):
                print(bytes(tt2))
                print(k1, k2)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值