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

BUUCTF-[ACTF新生赛2020]SoulLike

[ACTF新生赛2020]SoulLike

查壳,64位无壳

主函数看起来很简单,然后主要逻辑是下面这个sub_5E8172C0083A函数,本来不叫这个的,动调了之后变了image-20250425134229699

然后打开发现,无法看到伪代码,这里参考了这个师傅的文章[BUUCTF ACTF新生赛2020]SoulLike题解(非爆破) - Carykd - 博客园,修改ida设置image-20250425134724084

在ida目录的cfg目录下面找到hexrays.cfg,找打这个MAX_FUNSIZE,改成1024,分析不出来的原因应该是函数太长了,看了汇编代码,里面一大串东西image-20250425134902468

然后就能看见伪代码了,代码很长,3000多行,然后前面是对输入的flag进行加密,最后和v3密文进行比较image-20250425141719944

这题看见了两种做法,一种是直接爆破,还有一种是逆向这3000多行代码。。。个人感觉这题还是爆破比较合理,而且只要爆破对了,就能和下面的密文一一对应,速度还是很快的。而且哪位有错,还会告诉你哪一位错了。

看了他们的wp用了pwntool库爆破,对付这种elf文件还是比较方便的。但是不会啊,尝试用c语言来写

#include<stdio.h>
int a1[12];
int v3[] = { 126,50,37,88,89,107,53,110,0,19,30,56 };
int flag[12] = {0};
void encrypt(int *a1){*a1 ^= 0x2Bu;a1[1] ^= 0x6Cu;a1[2] ^= 0x7Eu;a1[3] ^= 0x56u;a1[4] ^= 0x39u;a1[5] ^= 3u;a1[6] ^= 0x2Du;a1[7] ^= 0x28u;a1[8] ^= 8u;++a1[9];a1[10] ^= 0x2Fu;a1[11] ^= 0xAu;++* a1;a1[1] ^= 0xDu;a1[2] ^= 0x73u;a1[3] ^= a1[2];a1[4] ^= 0x37u;++a1[5];a1[6] ^= 0x69u;a1[7] ^= 0x59u;a1[8] ^= 0xCu;a1[9] ^= 0x70u;++a1[10];a1[11] ^= 0x1Fu;++* a1;a1[1] ^= 0x55u;a1[2] ^= a1[1];a1[3] ^= 0x72u;a1[4] ^= 0x1Fu;++a1[5];a1[6] ^= 0x6Du;a1[7] ^= a1[6];a1[8] ^= a1[7];a1[9] ^= 0x6Du;++a1[10];++a1[11];++* a1;a1[1] ^= 0x76u;a1[2] ^= 0x49u;a1[3] ^= 0x29u;a1[4] ^= 0x17u;a1[5] ^= 0x78u;a1[6] ^= 0x6Eu;a1[7] ^= a1[2];a1[8] ^= 0x2Cu;a1[9] ^= 0xEu;a1[10] ^= 0x1Eu;a1[11] ^= 0x52u;*a1 ^= 0x16u;a1[1] ^= 0x22u;a1[2] ^= a1[1];a1[3] ^= *a1;a1[4] ^= 0x72u;a1[5] ^= 0xCu;a1[6] ^= a1[4];a1[7] ^= 0x5Du;a1[8] ^= 0x47u;++a1[9];a1[10] ^= 0x6Eu;a1[11] ^= a1[5];*a1 ^= 0x73u;++a1[1];a1[2] ^= 0x75u;a1[3] ^= 7u;a1[4] ^= 0x68u;++a1[5];a1[6] ^= 0x41u;a1[7] ^= 0x10u;a1[8] ^= 0x3Bu;a1[9] ^= 0x2Bu;a1[10] ^= 0x65u;++a1[11];}//这里只贴出来了部分加密内容int main()
{for (int j = 0; j < 12; j++) {for (int i = 32; i < 127; i++){for (int k = 0; k < i; k++) a1[k] = flag[k];a1[j] = i;encrypt(a1);if (a1[j] == v3[j]){flag[j] = i;break;}}}for (int j = 0; j < 12; j++)printf("%c",flag[j]);
}

image-20250425151229465

相关文章:

  • DbCreateHelper数据库创建指南
  • SQL进阶知识:八、性能调优
  • C语言面试高频题——define 和typedef 的区别?
  • 施磊老师基于muduo网络库的集群聊天服务器(七)
  • 全链路自动化AIGC内容工厂:构建企业级智能内容生产系统
  • 32.768kHz晶振详解:作用、特性及与其他晶振的区别
  • STM32八股【6】-----CortexM3的双堆栈(MSP、PSP)设计
  • 金仓数据库征文-政务领域国产化数据库更替:金仓 KingbaseES 应用实践
  • 游戏引擎学习第244天: 完成异步纹理下载
  • ASP.NET MVC​ 入门指南二
  • C++11介绍
  • 语音合成之六端到端TTS模型的演进
  • mysql知识总结 索引篇
  • opencv--通道,彩色和灰度
  • 【OSG学习笔记】Day 9: 状态集(StateSet)与渲染优化 —— 管理混合、深度测试、雾效等渲染状态
  • 【python】如何将python程序封装为cpython的库
  • 支付场景下,乐观锁的实现(简洁版)
  • 利用车联网中的 V2V 通信技术传播公平的紧急信息
  • 液体神经网络LNN-Attention创新结合——基于液体神经网络的时间序列预测(PyTorch框架)
  • GAEA情感坐标背后的技术原理
  • “爱泼斯坦案”关键证人弗吉尼亚·朱弗雷自杀身亡
  • 破解160年基因谜题,我国科学家补上豌豆遗传研究最后拼图
  • 华夏银行青岛分行另类处置不良债权,德州近百亩土地被神奇操作抵押贷款
  • 全品系停货?泸州老窖:暂未接到通知,常规调控手段
  • 观察|动力电池步入“多核时代”,宁德时代新技术密集开箱有何启示
  • 董明珠卸任格力电器总裁,张伟接棒