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

[HNCTF 2022 WEEK4]flower plus

第一种花指令
image.png
第二种花指令
image.png
根据两种花指令特征,写出去花指令脚本
image.png
image.png

saddr=0x401000
eaddr=0x435000
for i in range(saddr,eaddr):if get_wide_dword(i)==0x01740275:print(hex(i)+','+hex(get_wide_dword(i)))patch_byte(i-5,0x90)patch_dword(i-4,0x90909090)patch_dword(i,0x90909090)patch_word(i+4,0x9090)if get_qword(i)==0x8336E800000001E8:print(hex(i)+','+hex(i+4)+','+hex(get_wide_dword(i)))patch_qword(i,0x9090909090909090)patch_dword(i+8,0x90909090)patch_byte(i+12,0x90)

使用脚本将花指令去除后,u,c,p一下基本没啥问题。
可以得到下面正常main函数
image.png
分析可得为rc4+xor加密

saddr=0x401000
eaddr=0x435000
for i in range(saddr,eaddr):if get_wide_dword(i)==0x01740275:print(hex(i)+','+hex(get_wide_byte(i)))patch_dword(i,0x90909090)patch_dword(i-4,0x90909090)patch_word(i+4,0x9090)patch_byte(i-5,0x90)if get_wide_dword(i)==0x000001E8:if get_wide_dword(i+4)==0x8336E800:print(hex(i)+','+hex(get_wide_byte(i)))patch_dword(i,0x90909090)patch_dword(i+4,0x90909090)patch_dword(i+8,0x90909090)patch_byte(i+12,0x90)

用下面idapython脚本得到密文和key

enc=list(map(lambda x:get_wide_dword(x),range(0x004440E0,0x004440E0+27*4,4)))
print(enc)
key=''.join(map(lambda x:chr(get_wide_byte(x)),range(0x00446900,0x0044690f)))
print(key)

exp

#include<iostream>
#include<cstdint>
using namespace std;void main()
{uint8_t aHelloCtfers[] = "Hello_Ctfers!!!";uint32_t key_len = sizeof(aHelloCtfers);uint32_t data[] = { 77, 4294967270, 73, 4294967189, 3, 45, 43, 4294967226, 4294967274, 109, 4294967295, 89, 112, 0, 27, 4294967209, 44, 4294967216, 50, 4294967192, 111, 4294967180, 86, 4294967202, 76, 121, 127 };uint32_t data_len = 27;for (int i = data_len - 1; i >= 0; i--) {data[i] = data[i] ^ data[(i + 1) % data_len];}uint32_t result; // eaxuint8_t v4[320]; // [esp+Ch] [ebp-25Ch]uint32_t v5; // [esp+14Ch] [ebp-11Ch]uint32_t k; // [esp+150h] [ebp-118h]uint32_t j; // [esp+154h] [ebp-114h]uint32_t i; // [esp+158h] [ebp-110h]uint32_t v9; // [esp+15Ch] [ebp-10Ch]uint32_t m; // [esp+160h] [ebp-108h]uint8_t v11[256]; // [esp+164h] [ebp-104h] BYREFfor (i = 0; i < 256; ++i){v11[i] = i;v4[i] = aHelloCtfers[i % key_len];}v9 = 0;for (j = 0; j < 256; ++j){v9 = (v4[j] + v9 + v11[j]) % 256;swap(v11[j], v11[v9]);}m = 0;v9 = 0;for (k = 0; k < data_len; ++k){m = (m + 3) % 256;v9 = (v9 + v11[m] + 1) % 256;swap(v11[m], v11[v9]);v5 = (v11[v9] + v11[m]) % 256;v4[k + 256] = v11[v5];}for (m = 0; ; ++m){result = m;if (m >= data_len)break;data[m] ^= v4[m + 256];}for (int i = 0; i < 27; i++)cout << (char)data[i];
}
http://www.lryc.cn/news/367903.html

相关文章:

  • Mongo常用语法(java代码)
  • go语言后端开发学习(二)——基于七牛云实现的资源上传模块
  • 探索微软新VLM Phi-3 Vision模型:详细分析与代码示例
  • 如何使用GPT-4o函数调用构建一个实时应用程序?
  • [Vue-常见错误]浏览器显示Uncaught runtime errors
  • html常见的表单元素有哪些,html表单元素有哪些?
  • spring boot sso
  • Keras深度学习框架实战(5):KerasNLP使用GPT2进行文本生成
  • 速盾:网站重生之我开了高防cdn
  • 【spark】spark列转行操作(json格式)
  • 记录一次Linux启动kafka后并配置了本地服务连接远程kafka的地址后依旧连接localhost的问题
  • MacOS中Latex提示没有相关字体怎么办
  • 物资材料管理系统建设方案(Word)—实际项目方案
  • !力扣102. 二叉树的层序遍历
  • Vue3 + TS + Antd + Pinia 从零搭建后台系统(一) 脚手架搭建 + 入口配置
  • 中国同胞进来看看,很多外国人想通过CSDN坑咱们中国人
  • Web前端电话咨询:深度解析与实用指南
  • 使用python绘制季节图
  • VS2019专业版 C#和MFC安装
  • spring入门aop和ioc
  • 使用Python创建Word文档
  • 【设计模式】装饰器模式(结构型)⭐⭐
  • 计算机网络--应用层
  • 计算机网络 —— 网络层(IP数据报)
  • Clo3D导出服装动画,使用Unity3D展示
  • LSTM 词语模型上的动态量化
  • STM32 proteus + STM32Cubemx仿真教程(第一课LED教程)
  • 享元模式
  • R语言数据分析16-针对芬兰污染指数的分析与考察
  • Search用法Python:深入探索搜索功能的应用与技巧