zoukankan      html  css  js  c++  java
  • 【强网杯2018】逆向hide

    这是事后才做出来的,网上没有找到现成的writeup,所以在这里记录一下

     

    UPX加壳,而且linux下upx -d无法解,也无法gdb/ida attach

    clipboard

    clipboard

    因为是64位,所以没有pushad,只能挨个函数进入,退出,看看程序是否恢复。

    当运行到一0x400dd0,发现此时已经可以看见字符串了

    clipboard

    clipboard

    用dumphex的脚本来dump出内存,见hide_dump

    static main(void)

    {

    auto fp, begin, end, dexbyte;

    fp = fopen("C:\dump.dex", "wb");

    begin = 0x400000;

    end = 0xADC000;

    for ( dexbyte = begin; dexbyte < end; dexbyte ++ )

    fputc(Byte(dexbyte), fp);

    }

    此时dump出的内容已经有程序运行的字符串了,通过字符串反查,这里

    0x400890才是真正的启动地址

    clipboard

    以后运行程序,在ida里面输入一下内容,即可直接运行到0x4009ef

    from idaapi import *

    from idc import *

    run_to(0x4009ef)

    clipboard

    qwb{this_is_wrong_flag}

    check到一个假flag,如果此时绕过ptrace且用ctrl+d作为结束,可以输出right。

    但是输入到正常程序是报wrong的,说明还有地方反调试以及修改了逻辑

    根据ptrace.h,ptrace这里是PTRACE_TRACEME,自我调试

    clipboard

    突然发现“Enter the flag:”字符串有2处引用

    clipboard

    clipboard

    在4C8EA0也有类似的输出,怀疑正式运行时是这里。恢复函数失败,只能动态调试

    clipboard

    上面这里判断是不是qwb{}格式,构造payload

    clipboard

    然后调用3次以下2个函数,输入内容为qwb{0123456789abcdef}中间部分的0123456789abcdef

    sub_4C8CC0(__int64 a1)

    clipboard

    clipboard

    clipboard

    这部分算法恢复见test2.py中的loop_j

    clipboard

    sub_4C8E50——按位异或

    clipboard

    目标:rdi(qwb{}中间内容经过上面的多次变换后) == rsi(如下),

    clipboard

    经过test2.py的逆向,得到一个有意义的输入串f1Nd_TH3HldeC0dE

    clipboard

    所以认为flag是qwb{f1Nd_TH3HldeC0dE}

    实际运行,输入完qwb{f1Nd_TH3HldeC0dE}后,用ctrl+d可以看到成功(回车不行,因为用sys_read会连回车也认为是字符?)

    clipboard

    但是实际为何会运行到hide脚本,就没有分析了,因为ptrace自己后发生什么事情,很难搞。

    以下是通过IDA运行并跳过反调试的脚本

    from idaapi import *

    from idc import *

    run_to(0x4009ef)

    GetDebuggerEvent(WFNE_SUSP, -1)

    SetRegValue(0x4C8EA0,"RIP")

    GetDebuggerEvent(WFNE_SUSP, -1)

    run_to(0x4C8EB3)

    GetDebuggerEvent(WFNE_SUSP, -1)

    SetRegValue(0,"RAX")

    run_to(0x4C8CC0)

    脚本含义

    clipboard[106]

  • 相关阅读:
    VS缓冲区溢出,未对变量进行检查
    Mutex与Event控制互斥事件的使用详解
    error LNK2019: 无法解析的外部符号
    [转] 兼容IE和Firefox的设为首页和收藏的Javascript代码
    [转]超时时间以到,但尚未从池中获取连接
    Datalist的嵌套使用
    由服务器端向客户端输出脚本
    几个国外的XHTML模板站,DIV+CSS模板下载(转)
    gridview隐藏某一列
    [转]简单谈基于SQL SERVER 分页存储过程的演进
  • 原文地址:https://www.cnblogs.com/anic/p/8729329.html
Copyright © 2011-2022 走看看