当前位置: 首页 > news >正文

[LitCTF 2024]ezrc4

查壳无壳
拖进IDA分析
主函数

int __fastcall main(int argc, const char **argv, const char **envp)
{unsigned int v3; // esiunsigned int _fenkey?_; // eaxchar Str[32]; // [rsp+20h] [rbp-168h] BYREF_QWORD Buf1[2]; // [rsp+40h] [rbp-148h] BYREFint v8; // [rsp+50h] [rbp-138h]char n127; // [rsp+54h] [rbp-134h]_QWORD v10[37]; // [rsp+60h] [rbp-128h] BYREF_main(argc, argv, envp);IsDebuggerPresent_1();Buf1[0] = 0x606EA290DC7CB2D5LL;Buf1[1] = 0x3190B05971E41306LL;v8 = -685914190;n127 = 127;printf("                                      ___                 ___   \n");printf("                 ___          ___    /  /\\        ___    /  /\\  \n");printf("                /  /\\        /  /\\  /  /:/       /  /\\  /  /:/_ \n");printf("  ___     ___  /  /:/       /  /:/ /  /:/       /  /:/ /  /:/ /\\\n");printf(" /__/\\   /  /\\/__/::\\      /  /:/ /  /:/  ___  /  /:/ /  /:/ /:/\n");printf(" \\  \\:\\ /  /:/\\__\\/\\:\\__  /  /::\\/__/:/  /  /\\/  /::\\/__/:/ /:/ \n");printf("  \\  \\:\\  /:/    \\  \\::/\\__/:/\\:\\  \\:\\ /  /:/__/:/\\:\\  \\:\\/:/  \n");printf("   \\  \\:\\/:/      \\__\\/\\__\\/  \\:\\  \\:\\  /:/\\__\\/  \\:\\  \\::/   \n");printf("    \\  \\::/       /__/:/      \\  \\:\\  \\:\\/:/      \\  \\:\\  \\:\\  \n");printf("     \\__\\/        \\__\\/        \\__\\/\\  \\::/        \\__\\/\\  \\:\\ \n");printf("                                     \\__\\/               \\__\\/   \n");printf(&Format_);printf(&Format__0);printf(&Format__1);printf(&Format__2);printf("input flag:");scanf("%s21", Str);v3 = strlen(Str);_fenkey?_ = strlen(key);                      // "fenkey?"rc4_init(v10,key,                                        // "fenkey?"_fenkey?_);rc4_crypt(v10, Str, v3);if ( !memcmp_0(Buf1, Str, 0x15u) )printf("win!!!!!!!!!!!!!!!!!!\n");elseprintf("nonono\n");return 0;
}

image-20260409185337078

这儿有一个反调试,我们先进汇编界面把它逻辑改了直接跳过
根据后面的校验逻辑

memcmp_0(Buf1, Str, 0x15u)

这个密文长度就是0x15也就是21,然后前面看到这四个数据是连到一起的,我们直接在Buf1定义处直接按Y转化为char类型数据方便后续提取

之前

image-20260409185544349

之后

image-20260409185743919

然后下面的逻辑这个是个RC4,这个是流密码,我一般喜欢直接动调,这样就可以省去写exp的过程

方法1:动态调试
本题动调会先调用main_0函数

int __fastcall main_0(int argc, const char **argv, const char **envp)
{int result; // eaxresult = IsDebuggerPresent();if ( !result ){printf("Debugger detected!\n");ExitProcess(1u);}return result;
}

我们在汇编界面把这个jnz改成jz即可

image-20260409191232830

修改完程序逻辑后记得patch打补丁

image-20260409191405737

然后我们动调起来找到函数界面,输入一个长度为21的字符串,我这里是21个a

image-20260409192601037

解密的密钥按X查看引用会发现有个函数调用了key,有个简单的亦或,亦或后得到的正确密钥是

litctf!

这是密文
image-20260409192917708

然后思路就是在解密函数执行前,我们更改我们的字符串数据为密文,然后更改密钥为正确的密钥,跑到后面就出flag了
image-20260409193312770

拿到flag

LitCTF{rc4_love_nice}

方法2:静态exp

def rc4_decrypt(cipher_bytes, key_bytes):S = list(range(256))j = 0for i in range(256):j = (j + S[i] + key_bytes[i % len(key_bytes)]) % 256S[i], S[j] = S[j], S[i]out = []i = 0j = 0for char in cipher_bytes:i = (i + 1) % 256j = (j + S[i]) % 256S[i], S[j] = S[j], S[i]out.append(char ^ S[(S[i] + S[j]) % 256])return bytes(out)cipher = [0xd5, 0xb2, 0x7c, 0xdc, 0x90, 0xa2, 0x6e, 0x60,0x06, 0x13, 0xe4, 0x71, 0x59, 0xb0, 0x90, 0x31,0xb2, 0xc7, 0x1d, 0xd7, 0x7f
]
# 真实的密钥
key = b"litctf!"
# 运行解密
flag = rc4_decrypt(cipher, key)
print("Flag:", flag.decode('utf-8', errors='ignore'))

flag

LitCTF{rc4_love_nice}
http://www.jsqmd.com/news/614353/

相关文章:

  • AudioCLIP终极指南:如何用单一模型实现文本、图像和音频的跨模态理解
  • Balloon.css 终极更新指南:从1.0到1.2.0版本的核心特性变化详解
  • Awesome AI for Science项目详解:如何用AI解决科学难题
  • 数据库迁移如何提升结果验证能力:NineData社区版4.10.0支持9条异构数据库复制与对比链路
  • 微信聊天记录备份:数字时代的数据主权与记忆守护之道
  • OpenSSF Scorecard终极指南:10步快速识别开源项目安全漏洞
  • Simditor主题定制终极指南:5步Sass打造专属编辑器样式
  • PHP 8.4+ 异步I/O性能翻倍实测:从阻塞到非阻塞的7大重构步骤,附压测对比数据(QPS提升327%)
  • Ono社区生态:如何贡献代码和参与开源项目发展
  • 接口测试——pytest框架续集粗
  • Sparrow App快速上手:5分钟学会API测试和调试
  • 企业级管理系统架构设计与性能优化:基于React+Ant Design的实践指南
  • Verus文档(LLM翻译版)
  • Bootbox.js终极指南:10分钟掌握Bootstrap对话框库的8大实战技巧
  • Simditor性能优化终极指南:10个技巧让编辑器加载速度提升300%
  • 又整了一年实验。。。
  • 3大革新突破:让PS3控制器在Windows系统重获新生的完整方案
  • Vue-color性能优化:5个技巧提升颜色选择器加载速度
  • Test - 7 20260406
  • Killed by Google项目样式系统:CSS模块与原子化设计实践
  • NOI2026 做题记录 四
  • pbrt-v3错误调试终极指南:快速解决10大常见渲染问题
  • DotNetPy:现代.NET 与 Python 互操作 实战指南拘
  • Awesome AI for Science进阶技巧:如何基于现有论文开展创新研究
  • GLM-4.7-Flash新手指南:从CSDN镜像启动到首次对话全流程
  • Killed by Google项目组件分析:从Header到Footer的完整架构
  • 【高危预警】EF Core 10向量查询引发死锁与内存泄漏的3个隐蔽场景,附可复用的DiagnosticSource监控模板
  • DOTA2启动报错msvcp140.dll丢失?官方修复指南与安全方案
  • OpenClaw+Chainlit前端改造:美化Kimi-VL-A3B-Thinking对话界面
  • Tech-Interview-Cheat-Sheet 与 Khan Academy 算法课程的完美结合:技术面试准备的终极指南