[REVERSE]我出的题大家觉得BT,毕竟大家都在F5伪代码

admin 2024年11月10日16:01:52评论13 views字数 3149阅读10分29秒阅读模式

好吧,自己分析一波,先拖到windows的虚拟机里面

[REVERSE]我出的题大家觉得BT,毕竟大家都在F5伪代码

查一下基本PE信息,是用golang写的,确实我是用golang写的

[REVERSE]我出的题大家觉得BT,毕竟大家都在F5伪代码

没壳没花,直接拖到IDA分析一波。

字符串先来一波,看到很可疑的16进制的字符串    

[REVERSE]我出的题大家觉得BT,毕竟大家都在F5伪代码

应该就是最终对比结果了,直接往上追踪。

[REVERSE]我出的题大家觉得BT,毕竟大家都在F5伪代码

可以看到sub_496B80()是完整的逻辑验证。

往上走一走,就能看到最终处理的函数是sub_496920(),继续往下的sub_403180()其实只是类似于内存比较函数,最终与16进制字符串对比。

那么就重点关注sub_496920()

[REVERSE]我出的题大家觉得BT,毕竟大家都在F5伪代码

看图形化逻辑分析也能看到和题目名称交相辉映的four    

根据题目的four提示,以及通过分析方法,可以发现存在四层加密:

解密步骤:

1、将十六进制字符串转换为字节再通过替换表逆向还原

2、凯撒密码解密(偏移量为-3)

3、Base64 解码

4、异或解密(XOR with 0x42)

[REVERSE]我出的题大家觉得BT,毕竟大家都在F5伪代码

这里是不是懵逼了?F5反编译不了成伪代码了啊,叫你好好学汇编,你偏要去放牛~~~~

还是简单说一下吧

1、第一个循环(0x496959-0x49696C):

// 对输入进行异或0x42的操作for(int i = 0; i < len; i++) {    output[i] = input[i] ^ 0x42;}

2第二个循环(0x4969AD-0x496A0F):

// 对字符进行处理for(int i = 0; i < len; i++) {    char c = input[i];    // 处理小写字母a-z    if(c >= 'a' && c <= 'z') {        int x = ((c - 0x5E) * 0x13C) >> 0xD;        x *= 0x1A;            c = (c - x + 3);    }    // 处理大写字母A-Z     else if(c >= 'A' && c <= 'Z') {        int x = ((c - 0x3E) * 0x13C) >> 0xD;        x *= 0x1A;        c = (c - x + 3);    }    output[i] = c;}

3循环(0x496AE0-0x496B1E):

// 将处理后的字符转为16进制字符串const char hex[] = "0123456789abcdef";for(int i = 0; i < len; i++) {    char c = input[i];    output[i*2] = hex[(c >> 4) & 0xF];    output[i*2+1] = hex[c & 0xF];}

直接放一个python解题脚本吧~~~~~~这里上不了汇编课

import base64def hex_to_bytes(hex_str):    """将十六进制字符串转换为字节"""    return bytes.fromhex(hex_str)def create_reverse_substitution_table():    """创建反向替换表"""    substitution_table = {        'a': 'q', 'b': 'w', 'c': 'e', 'd': 'r', 'e': 't',        'f': 'y', 'g': 'u', 'h': 'i', 'i': 'o', 'j': 'p',        'k': 'a', 'l': 's', 'm': 'd', 'n': 'f', 'o': 'g',        'p': 'h', 'q': 'j', 'r': 'k', 's': 'l', 't': 'z',        'u': 'x', 'v': 'c', 'w': 'v', 'x': 'b', 'y': 'n',        'z': 'm', '@': '#', '{': '<', '}': '>', '_': '-',        '1': '7', '2': '8', '3': '9', '4': '0', '0': '6'    }    # 创建反向映射    return {v: k for k, v in substitution_table.items()}def reverse_substitution(encrypted_text, reverse_table):    """反向替换解密"""    result = []    for char in encrypted_text:        char = chr(char)        if char in reverse_table:            result.append(reverse_table[char])        else:            result.append(char)    return ''.join(result)def caesar_decrypt(text, shift=3):    """凯撒密码解密"""    result = []    for char in text:        if char.isalpha():            # 确定字符范围(大写或小写)            ascii_offset = ord('A') if char.isupper() else ord('a')            # 解密并确保在字母范围内            decrypted = chr((ord(char) - ascii_offset - shift) % 26 + ascii_offset)            result.append(decrypted)        else:            result.append(char)    return ''.join(result)def xor_decrypt(data, key=0x42):    """异或解密"""    return bytes([b ^ key for b in data])def decrypt_flag(encrypted_hex):    """完整的解密过程"""    # 1. 转换十六进制为字节    encrypted_bytes = hex_to_bytes(encrypted_hex)    print(f"[+] 十六进制解码后: {encrypted_bytes}")    # 2. 替换表解密    reverse_table = create_reverse_substitution_table()    substitution_decrypted = reverse_substitution(encrypted_bytes, reverse_table)    print(f"[+] 替换表解密后: {substitution_decrypted}")    # 3. 凯撒密码解密    caesar_decrypted = caesar_decrypt(substitution_decrypted)    print(f"[+] 凯撒解密后: {caesar_decrypted}")    # 4. Base64解码    base64_decrypted = base64.b64decode(caesar_decrypted)    print(f"[+] Base64解码后: {base64_decrypted}")    # 5. 异或解密    final_result = xor_decrypt(base64_decrypted)    print(f"[+] 异或解密后: {final_result.decode()}")    return final_result.decode()def main():    # 加密后的十六进制字符串    encrypted_hex = "4d4630644d576637447350634d576c654f4536494a71376d796a45384b55704d4b5444494657383d"    print("=== Flag 解密过程 ===")    flag = decrypt_flag(encrypted_hex)    print("n[*] 最终 Flag:", flag)if __name__ == "__main__":    main()

题目下载:关注公众号回复ctf_re_four即可

原文始发于微信公众号(蓝极战队):[REVERSE]我出的题大家觉得BT,毕竟大家都在F5伪代码

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月10日16:01:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [REVERSE]我出的题大家觉得BT,毕竟大家都在F5伪代码https://cn-sec.com/archives/3378615.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息