zoukankan      html  css  js  c++  java
  • XCTF reverse_box(idapython)

    在这里插入图片描述
    ida先静态分析,发现有很多a2[1]不知道是什么,就远程动调了一下,发现是我们所输入的字符串,也就是我们所输入的字符串作为索引,通过v4这个数组输出,这题题目的数据漏给了,当时也是一头雾水,后面找了wp,才发现题目漏了条件,就是正确的flag输入后,会输出95eeaf95ef94234999582f722f492f72b19a7aaf72e6e776b57aee722fe77ab5ad9aaeb156729676ae7a236d99b1df4a
    在这里插入图片描述
    所以现在就是意思是查v4的表,然后再反推序号就得出flag了,然而发现那个v4的表是变动的。
    在这里插入图片描述
    有个随机值,后面在ida中,找到了eax的种子,发现不会超过0xff。
    在这里插入图片描述
    也就是有256种可能性,逐个爆破就可以得出flag了,而且题目提示了flag的格式是T开头,那我们就可以利用这个T字母作为动调的参数,T在表中对应0x95时,说明这个表是我们想要的,取下来,再逆向得出flag。
    ida主要使用函数.

    
    for i in range(1,256):
        RunTo(0x80485b1)
        GetDebuggerEvent(WFNE_SUSP,-1)
        print(i)
        SetRegValue(i,"eax")
    
        RunTo(0x8048704)
        GetDebuggerEvent(WFNE_SUSP,-1)
        w=GetRegValue("eax")
    
        RunTo(0x8048746)
        GetDebuggerEvent(WFNE_SUSP,-1)
        SetRegValue(0x80486D4,"eip")
        if w==0x95:
            print i
            break
    RunTo(0x80485b1)
    GetDebuggerEvent(WFNE_SUSP,-1)
    print i
    SetRegValue(i,"eax")
    RunTo(0x8048746)
    GetDebuggerEvent(WFNE_SUSP, -1)
    addre=GetRegValue("esp")
    addre=addre+0x1C
    arr=[]
    for i in range(0xff):
        arr.append(Byte(addre+i))
    tmp="95eeaf95ef94234999582f722f492f72b19a7aaf72e6e776b57aee722fe77ab5ad9aaeb156729676ae7a236d99b1df4a"
    a=[]
    for j in range(0,len(tmp),2):
        a.append(arr.index(int(tmp[i:i+2],16)))
    print("".join(map(chr,a)))
    
    
    
    
    

    在这里插入图片描述

  • 相关阅读:
    Apache Pig的前世今生
    openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例
    P3388 【模板】割点(割顶)
    让priority_queue支持小根堆的几种方法
    2017.11.7解题报告
    一个例子教你如何与出题人斗智斗勇
    debug
    树上倍增求LCA及例题
    素数的筛法
    Catalan卡特兰数入门
  • 原文地址:https://www.cnblogs.com/YenKoc/p/12779878.html
Copyright © 2011-2022 走看看