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

The_Maya_Society

查看

这道题目有三个附件,一个素材(那个文件夹),一个html网页,还有一个ELF文件(一个单独的文件launcher)。这里刚开始猜测为html网页逆向,但是网页逆向一般是要给一个js文件,该附件中是没有js文件的,所以应该不是网页(js)逆向。

我们检查

拖入64bit

在这之后,我们发现

而且,sub_B5A很可能是一个哈希函数(如MD5、SHA1)或确定性算法,用于将特定日期转换为一个固定值。这个值会影响到后续的十六进制数生成。这确保了同一天运行程序,生成的域名是相同的。

这一段和下面一段

其实都组成了64数组,我们可以发现这是一个md5算法

第一个64数组,和md5加密中的4大步骤16小步的移位S数字对应。

第二个64数组,符合md5的T[i]大小

是对于其的进一步分析

我们发现

我们发现sub_18A4是一个对于服务器的后端处理函数,下面是我搜集的一个分析资料

在这之后,我们发现了一个很有趣的函数,只不过相较之前的题目里面我们发现他并没有对于base64进行一个表的变换

给你们看看标志吧

一个佬的表示,我是借鉴了博客园里面它的话

接下来,我们就对于它进行解答

我们首先找到base64解密脚本

void encodeBase64(char* str,int len,char** in){ char base64[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; //读取3个字节zxc,转换为二进制01111010 01111000 01100011 //转换为4个6位字节,011110 100111 100001 100011 //不足8位在前补0,变成00011110 00100111 00100001 00100011 //若剩余的字节数不足以构成4个字节,补等号 int encodeStrLen = 1 + (len/3)*4 ,k=0; encodeStrLen += len%3 ? 4 : 0; char* encodeStr = (char*)(malloc(sizeof(char)*encodeStrLen)); for(int i=0;i<len;i++){ if(len - i >= 3){ encodeStr[k++] = base64[(unsigned char)str[i]>>2]; encodeStr[k++] = base64[((unsigned char)str[i]&0x03)<<4 | (unsigned char)str[++i]>>4]; encodeStr[k++] = base64[((unsigned char)str[i]&0x0f)<<2 | (unsigned char)str[++i]>>6]; encodeStr[k++] = base64[(unsigned char)str[i]&0x3f]; }else if(len-i == 2){ encodeStr[k++] = base64[(unsigned char)str[i] >> 2]; encodeStr[k++] = base64[((unsigned char)str[i]&0x03) << 4 | ((unsigned char)str[++i] >> 4)]; encodeStr[k++] = base64[((unsigned char)str[i]&0x0f) << 2]; encodeStr[k++] = '='; }else{ encodeStr[k++] = base64[(unsigned char)str[i] >> 2]; encodeStr[k++] = base64[((unsigned char)str[i] & 0x03) << 4]; //末尾补两个等于号 encodeStr[k++] = '='; encodeStr[k++] = '='; } } encodeStr[k] = '\0'; *in = encodeStr; } /** * 解码既编码的逆过程,先找出编码后的字符在编码之前代表的数字 * 编码中将3位个字符变成4个字符,得到这4个字符的每个字符代表的原本数字 * 因为在编码中间每个字符用base64码表进行了替换,所以这里要先换回来 * 在对换回来的数字进行位运算使其还原成3个字符 */ void decodeBase64(char* str,int len,char** in){ char base64[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; char ascill[129]; int k = 0; for(int i=0;i<64;i++){ ascill[base64[i]] = k++; } int decodeStrlen = len / 4 * 3 + 1; char* decodeStr = (char*)malloc(sizeof(char)*decodeStrlen); k = 0; for(int i=0;i<len;i++){ decodeStr[k++] = (ascill[str[i]] << 2) | (ascill[str[++i]] >> 4); if(str[i+1] == '='){ break; } decodeStr[k++] = (ascill[str[i]] << 4) | (ascill[str[++i]] >> 2); if(str[i+1] == '='){ break; } decodeStr[k++] = (ascill[str[i]] << 6) | (ascill[str[++i]]); } decodeStr[k] = '\0'; *in = decodeStr; }

获取正确日期———> md5加密拼接.fluxfingers.net———>传统base64解密———–>异或————–>flag

这是我个人对于其的分析

我们看看逆向攻防世界CTF系列60-The_Maya_Society | Matriy's blog的分析

怎么说呢,这个题目是我个人感觉挺难的,至今为止我都有一点不对劲,不理解

Flag:flag{e3a03c6f3fe91b40eaa8e71b41f0db12}
http://www.jsqmd.com/news/461392/

相关文章:

  • Postman+CLA+Jenkins接口测试
  • Java继承-多态
  • 运营批量作图工具推荐:潮际好麦商品套图如何支撑日均百款上新?
  • 好利来卡回收注意事项,畅回收平台,安全可靠 - 畅回收小程序
  • 企业级日志平台实战:ELK + Filebeat + Kafka + ZooKeeper
  • 电脑提示Component mscomm32.ocx or one of its解决办法
  • Fastadmin 解决安全提示:为了你的后台安全,请勿将后台管理入口设置为admin或admin.php问题
  • [linux] 本地部署网页(windows下载node.js, 安装pnpm)
  • 【UI自动化测试】5_TPshop项目实战 _批量运行测试用例(重点)
  • 线程池学习2
  • AI时代人人都是产品经理:团队协同:AI 时代,产品经理与算法 / 研发团队的高效协同技巧
  • 嵌入式开发之C语言入门:从基础到核心语法
  • 云南昆明软式透水管安装方法
  • 基于微信小程序的教育宝学习小助手的设计与实现
  • 2026 现象级 AI 工具 OpenClaw 全解析:本地部署、自动化实战与技术揭秘
  • # Openssl关键知识
  • windows 7 用户账户的三种类型
  • Component mscomm32.ocx not correctly registered,file is missing or invalid
  • 基于Java springboot海洋馆预约系统(源码+文档+运行视频+讲解视频)
  • 基于微信小程序的家校互动平台开发与设计
  • 打开软件就弹出msvcp140.dll如何修复? 附免费下载方法分享
  • 双系统给ubuntu扩容
  • springboot基于协同过滤算法的个性化音乐推荐系统
  • 【Matlab】MATLAB教程:符号求导(以diff(x²+2x,x)为核心案例)
  • 基于微信小程序的社区养老服务系统的设计与实现
  • 二分查找的大致了解
  • Python实战:将字符串转换为6位数字密码(附完整代码)
  • 靠谱的工业显示器领先公司
  • Java继承-重写
  • 好利来卡面值回收是多少?畅回收回收,折算清楚,无套路 - 畅回收小程序