catch-me 攻防世界
工具
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 攻防世界相关推荐
- web做题记录(buuoj,jarvis,攻防世界,bugku,hackme)
web做题笔记 文章目录 web做题笔记 buuoj easy_tornado 随便注 warmup easysql 高明的黑客 jarvisoj re? flag在管理员手上 api调用 chopp ...
- 【攻防世界001】Guess-the-Number
攻防世界之前刷了几十题了,没写wp,感觉很简单没啥意思.后来参加了几次比赛,发现有点干不动,决定还是老老实实刷题好了.这是第一篇wp,这题很简单,是个jar,用jd-gui可以得到java源码. 原来 ...
- 攻防世界(pwn)--Mary_Morton 利用格式化字符串+栈溢出破解Canary的保护机制
ctf(pwn) canary保护机制讲解 与 破解方法介绍 程序执行流程 有三个选项,1是利用栈溢出,2是利用格式化字符串,3是退出;可连续输入多次; IDA分析 解题思路 程序存在canary保护 ...
- 攻防世界(Pwn) forgot---栈溢出;(方法二)
攻防世界(Pwn) forgot-栈溢出:(方法一) 里面对问题描述的更详细一点 返回目标函数 0x80486CC 方法二(爆破流) 因为最终返回的是 v3[0]-v3[9] 之中的一个函数, v3[ ...
- 攻防世界(Pwn) forgot---栈溢出;(方法一)
攻防世界(Pwn) forgot-栈溢出:(方法二) 介绍 这道题表面看起来有点复杂,其实很简单,有两种方法可以来做这一道题; 方法一(精确打击) 文件运行流程是: 1.先输入名字 2. 输入一串字符 ...
- 攻防世界misc新手_[攻防世界]mobile新手练习区easy-apk
[攻防世界]mobile新手练习区easy-apk easy-apk最佳Writeup由129师386旅独立团 • devi1提供 难度系数: 7.0 题目来源: 暂无 题目描述:无 题目场景: 暂无 ...
- 攻防世界 ——crypto
目录 新手区部分题解: 1,easy_RSA 2,Normal_RSA 3, 幂数加密 4,easy_ECC 高手进阶区部分题题解 5, ENC 6,告诉你个秘密 7,Easy-one 8,说我作弊需 ...
- 攻防世界———MISC 高手区题解
目录 1,base64stego 2,easycap 3,Avatar 4,What-is-this 5,签到题 6,Training-Stegano-1 7,Excaliflag 8,Get-the ...
- 攻防世界 web(二)
这周接着刷攻防世界的web题( ̄︶ ̄)↗ 1.command_execution 看提示这题为命令执行漏洞(command_execution),关于命令执行漏洞,我前面有篇博客详细介绍了,大家不了解 ...
- misc高阶 攻防世界_攻防世界 Misc 进阶题(一)
攻防世界 Misc 进阶题(一) 关于隐写术的思路或方法 转载: https://blog.csdn.net/a_small_rabbit/article/details/79644078 隐 ...
最新文章
- Facebook 万字长文:AI 模型全部迁移至 PyTorch 框架
- AT2362 [AGC012B] Splatter Painting(思维、dfs染色、剪枝)
- asmlib方式管理oracle asm环境下,新加存储需特别注意
- bat脚本登陆ftp服务器
- c语言写简单运行批处理,PC-LINT批处理的简单编写
- matlab 学习之常用函数2
- IP Messenger程序
- 使用SAP open connector调用第三方系统的API
- 1082 与7无关的数(思维题,巨坑)
- 虚拟机外接USB设备情况的vMotion问题
- 分组 php库,纯真ip数据库查询的php实现(补充分组查询)
- GoF、J2EE 设计模式
- 算法导论第四版更新了什么?
- 【UML建模】(8) UML建模之组件图
- 查看WIN10密钥备忘
- 网易云音乐评论功能实现(数据库设计)
- php使用halt中断输出
- GuzzleHttp使用
- 双开乃至多开电脑微信的简单方法
- java:获取本机IP,Linux环境下使用InetAddress.getLocalHost()方法获得127.0.0.1
热门文章
- 大学时期的压箱底东西拿出来了-算法合集-1
- Spark机器学习——余弦相似性算法
- android平台下,动画实现Metro动态磁贴特效
- MTK R版本部分机器相机图标消失
- 【一篇文章搞懂】南京java工程师培训班
- vue实现显示实时时间
- python 字符串获取倒数第二个_Python 学习 第二篇:数据类型(字符串)
- org.apache.catalina.core.StandardContext.startInternal ServletContainerInitializer处理期间出错
- 大数据面试题及答案下篇 03
- 【翻译】WTF是云原生软件的未来?