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

happytime

happytime

一、查壳

无壳,64位

二、IDA分析
1.main

2.cry函数

总体:是魔改的XXTEA加密

在main中可以看到被加密且分段的flag在最后的循环中与V6进行比较,刚好和上面v6数组相同。

所以毫无疑问密文是v6.

而与flag一起进入加密函数的v5就是key.

在cry 加密函数中可以看到DELTA是0x61C88647

所以脚本:

 #include <stdbool.h>
 #include <stdio.h>
 #define DELTA  0x61C88647
 #define MX (((z >> 5) ^ (y << 2)) + ((y >> 3) ^ (z << 4)) ^ (sum ^ y) + (k[(p & 3) ^ e] ^ z))
 bool btea(unsigned int *v, int n, unsigned int *k)
 {
     unsigned int z = v[n - 1], y = v[0], sum = 0, e;
     unsigned int p, q;
     if (n > 1)
     { /* enCoding Part */
         q = 415 / n + 114;
         while (q-- > 0)
         {
             sum += DELTA;
             e = (sum >> 2) & 3;
             for (p = 0; p < (n - 1); p++)
             {
                 y = v[p + 1];
                 z = v[p] += MX;
             }
             
             y = v[0];
             z = v[n - 1] += MX;
         }
         return 0;
     }
     else if (n < -1)
     { /* Decoding Part */
         n = -n;
         q = 415 / n + 114;
         sum = -q * DELTA;
         while (sum != 0)
         {
             e = (sum >> 2) & 3;
             for (p = n - 1; p > 0; p--)
             {
                 z = v[p - 1];
                 y = v[p] -= MX;
             }
             
             z = v[n - 1];
             y = v[0] -= MX;
             sum += DELTA;
         }
         return 0;
     }
     return 1;
 }
 ​
 int main()
 {
     unsigned int v[11] = {0x480AC20C, 0xCE9037F2, 0x8C212018, 0xE92A18D, 0xA4035274, 0x2473AAB1, 0xA9EFDB58, 0xA52CC5C8, 0xE432CB51, 0xD04E9223, 0x6FD07093}, key[4] = {0x79696755, 0x67346F6C, 0x69231231, 0x5F674231};
     int n = 11;       // n为要加密的数据个数
     btea(v, -n, key); // 取正为加密,取负为解密
     char *p = (char *)v;
     for (int i = 0; i < 44; i++)
     {
         printf("%c", *p);
         p++;
     }
     return 0;
 }
 //flag{efccf8f0-0c97-12ec-82e0-0c9d9242e335}


http://www.kler.cn/a/528949.html

相关文章:

  • (即插即用模块-特征处理部分) 二十、(TPAMI 2022) Permute-MLP 置换MLP模块
  • LeetCode题练习与总结:种花问题--605
  • C基础寒假练习(6)
  • 【数据采集】案例01:基于Scrapy采集豆瓣电影Top250的详细数据
  • 解决istoreos无法拉取青龙镜像
  • Java小白入门教程:HashSet
  • ZZNUOJ(C/C++)基础练习1031——1040(详解版)
  • 【JAVA】循环语句
  • 工作中使用到的单词(软件开发)_第一、二、三版汇总
  • TensorFlow 示例摄氏度到华氏度的转换(一)
  • 作者新游戏1.0
  • Linux中 端口被占用如何解决
  • rust跨平台调用动态库
  • 设计模式Python版 组合模式
  • DRM系列六:Drm之KMS
  • 线程的状态转换和调度
  • 深入理解Spring框架:从基础到实践
  • python学opencv|读取图像(五十三)原理探索:使用cv.matchTemplate()函数实现最佳图像匹配
  • 996引擎 -地图-添加安全区
  • 群速度与相速度辨析