工具

IDA动态调试+环境变量设置

思路展开
0x01.xz压缩,windows两次后缀改为.zip,解压得elf文件

xz压缩第一次见,两次解压得到最终文件

尝试运行,没有参数输入,直接出flag(假的),推测要动态调试解决。

0x02.IDA启动

果真没有输入,使用动调调试解决

__int64 __fastcall main(__int64 a1, char **a2, char **a3)
{int v3; // ebx__int64 v4; // rax__m128i v5; // xmm0__m128i v6; // xmm1__m128i v7; // xmm0__m128i v8; // xmm0__m128i v9; // xmm1__m128i v10; // xmm3__m128i v11; // xmm1__m128i v12; // xmm3__m128i v13; // xmm0__m128i v14; // xmm0v3 = sub_400820(dword_6012B4);byte_6012A8[0] = HIBYTE(v3);byte_6012A9 = BYTE2(v3) & 0xFD;byte_6012AA = BYTE1(v3) & 0xDF;byte_6012AB = v3 & 0xBF;if ( getenv("ASIS") && (*(_DWORD *)getenv("CTF") ^ v3) == 0xFEEBFEEB )dword_6012AC = *(_DWORD *)getenv("ASIS");v4 = 0LL;do{haystack[v4] ^= byte_6012A8[v4 & 7];++v4;}while ( v4 != 33 );v5 = _mm_load_si128((const __m128i *)haystack);v6 = _mm_unpacklo_epi8(v5, (__m128i)0LL);v7 = _mm_unpackhi_epi8(v5, (__m128i)0LL);v8 = _mm_add_epi32(_mm_unpackhi_epi16(v7, (__m128i)0LL),_mm_add_epi32(_mm_add_epi32(_mm_unpackhi_epi16(v6, (__m128i)0LL), _mm_unpacklo_epi16(v6, (__m128i)0LL)),_mm_unpacklo_epi16(v7, (__m128i)0LL)));v9 = _mm_load_si128((const __m128i *)&xmmword_601290);v10 = v9;v11 = _mm_unpackhi_epi8(v9, (__m128i)0LL);v12 = _mm_unpacklo_epi8(v10, (__m128i)0LL);v13 = _mm_add_epi32(_mm_add_epi32(_mm_add_epi32(_mm_add_epi32(v8, _mm_unpacklo_epi16(v12, (__m128i)0LL)),_mm_unpackhi_epi16(v12, (__m128i)0LL)),_mm_unpacklo_epi16(v11, (__m128i)0LL)),_mm_unpackhi_epi16(v11, (__m128i)0LL));v14 = _mm_add_epi32(v13, _mm_srli_si128(v13, 8));if ( _mm_cvtsi128_si32(_mm_add_epi32(v14, _mm_srli_si128(v14, 4))) != 2388 ){*(_DWORD *)haystack = 1600414050;*(_DWORD *)&haystack[4] = 1600414050;*(_DWORD *)&haystack[8] = 1600414050;*(_DWORD *)&haystack[12] = 1600414050;*(_QWORD *)&xmmword_601290 = 6873726006409322850LL;BYTE7(xmmword_601290) = 0;}printf("Flag: ASIS{%s}\n", haystack);if ( strstr(haystack, "bad_") )puts("this flag is absolutely fake ");return 0LL;
}

整体逻辑明朗,haystack是flag,向上找,haystack是和byte_6012A8异或得出,byte_6012A8由v3得出,v3经过sub_400820函数得出。

纵览代码最奇怪的一句话
if ( getenv("ASIS") && (*(_DWORD *)getenv("CTF") ^ v3) == 0xFEEBFEEB ) dword_6012AC = *(_DWORD *)getenv("ASIS");

getenv C 库函数 char *getenv(const char *name) 搜索 name 所指向的环境字符串,并返回相关的值给字符串。

dword_6012AC与byte_6012A8之间差4,而在下面关键函数(下面的代码)

  do{haystack[v4] ^= byte_6012A8[v4 & 7];++v4;}while ( v4 != 33 );

v4&7是0到7的循环,这样看来与haystack异或的一定有dword_6012AC。所以就让if ( getenv("ASIS") && (*(_DWORD *)getenv("CTF") ^ v3) == 0xFEEBFEEB )满足,v3动调可出0xB11924E1,0xB11924E1 ^ 0xFEEBFEEB = 0x4ff2da0a
linux里面用export对环境变量进行设置,创建这两个变量。然后设置环境变量,运行,flag就出来了。参数小端存储

export ASIS="$(printf "\x0a\xda\xf2\x4f")"
export CTF="$(printf "\x0a\xda\xf2\x4f")"


ASIS{600d_j0b_y0u_4r3_63771n6_574r73d}

catch-me 攻防世界相关推荐

  1. web做题记录(buuoj,jarvis,攻防世界,bugku,hackme)

    web做题笔记 文章目录 web做题笔记 buuoj easy_tornado 随便注 warmup easysql 高明的黑客 jarvisoj re? flag在管理员手上 api调用 chopp ...

  2. 【攻防世界001】Guess-the-Number

    攻防世界之前刷了几十题了,没写wp,感觉很简单没啥意思.后来参加了几次比赛,发现有点干不动,决定还是老老实实刷题好了.这是第一篇wp,这题很简单,是个jar,用jd-gui可以得到java源码. 原来 ...

  3. 攻防世界(pwn)--Mary_Morton 利用格式化字符串+栈溢出破解Canary的保护机制

    ctf(pwn) canary保护机制讲解 与 破解方法介绍 程序执行流程 有三个选项,1是利用栈溢出,2是利用格式化字符串,3是退出;可连续输入多次; IDA分析 解题思路 程序存在canary保护 ...

  4. 攻防世界(Pwn) forgot---栈溢出;(方法二)

    攻防世界(Pwn) forgot-栈溢出:(方法一) 里面对问题描述的更详细一点 返回目标函数 0x80486CC 方法二(爆破流) 因为最终返回的是 v3[0]-v3[9] 之中的一个函数, v3[ ...

  5. 攻防世界(Pwn) forgot---栈溢出;(方法一)

    攻防世界(Pwn) forgot-栈溢出:(方法二) 介绍 这道题表面看起来有点复杂,其实很简单,有两种方法可以来做这一道题; 方法一(精确打击) 文件运行流程是: 1.先输入名字 2. 输入一串字符 ...

  6. 攻防世界misc新手_[攻防世界]mobile新手练习区easy-apk

    [攻防世界]mobile新手练习区easy-apk easy-apk最佳Writeup由129师386旅独立团 • devi1提供 难度系数: 7.0 题目来源: 暂无 题目描述:无 题目场景: 暂无 ...

  7. 攻防世界 ——crypto

    目录 新手区部分题解: 1,easy_RSA 2,Normal_RSA 3, 幂数加密 4,easy_ECC 高手进阶区部分题题解 5, ENC 6,告诉你个秘密 7,Easy-one 8,说我作弊需 ...

  8. 攻防世界———MISC 高手区题解

    目录 1,base64stego 2,easycap 3,Avatar 4,What-is-this 5,签到题 6,Training-Stegano-1 7,Excaliflag 8,Get-the ...

  9. 攻防世界 web(二)

    这周接着刷攻防世界的web题( ̄︶ ̄)↗ 1.command_execution 看提示这题为命令执行漏洞(command_execution),关于命令执行漏洞,我前面有篇博客详细介绍了,大家不了解 ...

  10. misc高阶 攻防世界_攻防世界 Misc 进阶题(一)

    攻防世界 Misc 进阶题(一) 关于隐写术的思路或方法 转载: https://blog.csdn.net/a_small_rabbit/article/details/79644078     隐 ...

最新文章

  1. Facebook 万字长文:AI 模型全部迁移至 PyTorch 框架
  2. AT2362 [AGC012B] Splatter Painting(思维、dfs染色、剪枝)
  3. asmlib方式管理oracle asm环境下,新加存储需特别注意
  4. bat脚本登陆ftp服务器
  5. c语言写简单运行批处理,PC-LINT批处理的简单编写
  6. matlab 学习之常用函数2
  7. IP Messenger程序
  8. 使用SAP open connector调用第三方系统的API
  9. 1082 与7无关的数(思维题,巨坑)
  10. 虚拟机外接USB设备情况的vMotion问题
  11. 分组 php库,纯真ip数据库查询的php实现(补充分组查询)
  12. GoF、J2EE 设计模式
  13. 算法导论第四版更新了什么?
  14. 【UML建模】(8) UML建模之组件图
  15. 查看WIN10密钥备忘
  16. 网易云音乐评论功能实现(数据库设计)
  17. php使用halt中断输出
  18. GuzzleHttp使用
  19. 双开乃至多开电脑微信的简单方法
  20. java:获取本机IP,Linux环境下使用InetAddress.getLocalHost()方法获得127.0.0.1

热门文章

  1. 大学时期的压箱底东西拿出来了-算法合集-1
  2. Spark机器学习——余弦相似性算法
  3. android平台下,动画实现Metro动态磁贴特效
  4. MTK R版本部分机器相机图标消失
  5. 【一篇文章搞懂】南京java工程师培训班
  6. vue实现显示实时时间
  7. python 字符串获取倒数第二个_Python 学习 第二篇:数据类型(字符串)
  8. org.apache.catalina.core.StandardContext.startInternal ServletContainerInitializer处理期间出错
  9. 大数据面试题及答案下篇 03
  10. 【翻译】WTF是云原生软件的未来?