zoukankan      html  css  js  c++  java
  • 攻防世界 resver catch-me

    catch-me asis-ctf-quals-2016

    附件给了个压缩包文件,重命名,解压,获取到elf文件

    程序有两处关键比较

    第一处:

     这里进行动态调试,得到v3=0xB11924E1, byte_6012AB[]= B1 19 04 A1

     第二处关键比较:

     关键处理:

    程序开始先生成了一个数v3,---> number_6012A8[]中保存v3特定位置0后数据,--->关键比较1 if ( getenv("ASIS") && (*(_DWORD *)getenv("CTF") ^ v3) == 0xFEEBFEEB )

    可以求出getenv("CTF")的正确值:0xB11924E1 ^ 0xFEEBFEEB = 0x4ff2da0a

    而关键数据dword_6012AC = *(_DWORD *)getenv("ASIS"); 即 number_6012A8[4:7]=getenv("ASIS")

    后面一系列操作 对number_6012A8[0x20]进行求和,第二处关键比较 ,求和结果要等于0x954

    我们可以知道正确的getenv("CTF"),但不知道getenv("ASIS"),猜测他们值相同

    进行验证:

     1 haystack=[  0x87, 0x29, 0x34, 0xC5, 0x55, 0xB0, 0xC2, 0x2D, 0xEE, 0x60,0x34, 0xD4, 0x55, 0xEE, 0x80, 0x7C,
     2             0xEE, 0x2F, 0x37, 0x96,0x3D, 0xEB, 0x9C, 0x79, 0xEE, 0x2C, 0x33, 0x95, 0x78, 0xED,0xC1, 0x2B]
     3 v3=0xB11924E1
     4 target=0xFEEBFEEB
     5 t=v3^target
     6 print(hex(t))
     7 ctf=(t).to_bytes(4,'little')
     8 
     9 number=[0xb1,0x19,0x04,0xa1]+(list(ctf))
    10 
    11 for i in range(0x20):
    12     haystack[i]^=number[i&7]
    13 h=sum(haystack)
    14 print(hex(h))
    15 print(''.join(map(chr,haystack)))

    输出:

    0x4ff2da0a
    0x954
    600d_j0b_y0u_4r3_63771n6_574r73d

    number_6012A8求和等于0x954,验证通过

    ASIS{600d_j0b_y0u_4r3_63771n6_574r73d}

  • 相关阅读:
    [ZOJ 3622] Magic Number
    SGU 134.Centroid(图心)
    SGU 223.Little Kings
    C++ IO 详细用法
    POJ2632 Crashing Robots 解题报告
    POJ1068 Parencodings 解题报告
    POJ3295 Tautology 解题报告
    POJ2586 Y2K Accounting Bug 解题报告
    POJ1328 Radar Installation 解题报告
    POJ3728 The merchant解题报告
  • 原文地址:https://www.cnblogs.com/DirWang/p/11463182.html
Copyright © 2011-2022 走看看