zoukankan      html  css  js  c++  java
  • ISCC之Re2

    硬核rust逆向

    首先去学了一天rust。。。我TMD

    IDA打开,跟踪主函数

    看一下伪代码,发现有一串密文

    跟进去发现一串数据,猜测有可能是flag的加密数据,于是回头去分析算法

    发现一个关键点

    if ( v16 == v24 )

    break;

    v2 = ((*(_DWORD *)(v33 + 4 * v25) >> 2) ^ 0xA) == *(_DWORD *)(v16 + 4 * v25);

    ++v25;

    v26 += v2;

    v24 -= 4LL;

    这段被加密过的字符串解密方式为(data[i] >> 2) ^ 0xA,datauint32_t类型的数组,解密之后的字符串即为flag,然后会拿来和自己输入的字符串作比较。

    于是我们可以根据上面的密文构造payload

    #!-*-coding:utf-8 -*-
    flag=[0x154,0x180,0x1FC,0x1E4,
    0x1F8,0x154,0x190,0x1BC,
    0x1BC,0x1B8,0x154,0x1F8,
    0x194,0x154,0x1B4,0x1BC,
    0x1F8,0x154,0x1F4,0x188,
    0x1AC,0x1F8,0x154,0x18C,
    0x1E4,0x154,0x190,0x1BC,
    0x1BC,0x1B8,0x1BC,0x1B8,0x22,0x000,0x220]
    decript=''
    for
    i in flag:
    decript += chr(( i >> 2) ^0xA)
    print (
    decript)

    最后getflag,但是算出来的flag有乱码,于是一路穷举,最后两位猜出来是下划线和点号

     

    Flag: _just_need_to_get_what_is_needed_.

     

  • 相关阅读:
    标准MIDI文件格式
    David's MIDI Spec
    国庆长假好读书
    vim用法
    ,非你莫属,
    子宫的满足,睡觉前,
    在哪里,
    黑条,
    下单 返回的字段,
    机会啊,游戏啊,转吧,
  • 原文地址:https://www.cnblogs.com/mke2fs/p/10803913.html
Copyright © 2011-2022 走看看