IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> [XCTF-Reverse] 93 phrackCTF_findKey -> 正文阅读

[游戏开发][XCTF-Reverse] 93 phrackCTF_findKey

这个题给的附件并不是ISC2016训练赛 phrackCTF--findkey那个pyc的题,但上传flag要传那道题的。

本wp只针对下载的附件

先用ida打开,发现主要函数无法反编译。根据网上的说法,先把函数部分选中拉灰,再按P生成函数就能反了(网上说右链,其实这时右键里是没那项菜单的,不过快捷键P还能正常用)

  if ( Msg > 0x111 )
  {
    if ( v12 == 517 )
    {
      if ( strlen((const char *)&String1) > 6 )
        ExitProcess(0);
      if ( strlen((const char *)&String1) )
      {
        memset(&v22, 0, 0x100u);
        v6 = strlen((const char *)&String1);
        memcpy(&v22, &String1, v6);
        v7 = strlen((const char *)&String1);
        hash_hex(&String1, v7, (LPSTR)&String1);
        if ( &v10 && !&v10 )
          JUMPOUT((char *)&loc_40191D + 2);
        strcpy(&v18, "0kk`d1a`55k222k2a776jbfgd`06cjjb");
        memset(&v19, 0, 0xDCu);
        v20 = 0;
        v21 = 0;
        strcpy(v14, "SS");
        v15 = 0;
        v16 = 0;
        v17 = 0;
        v8 = strlen(&v18);
        xor_ss(v14, (int)&v18, v8);             // "0kk`d1a`55k222k2a776jbfgd`06cjjb" ^X
        if ( _strcmpi((const char *)&String1, &v18) )
        {
          SetWindowTextA(hWndParent, "flag{}");
          MessageBoxA(hWndParent, "Are you kidding me?", "^_^", 0);
          ExitProcess(0);
        }
        memcpy(&v13, &unk_423030, 0x32u);
        v9 = strlen(&v13);
        xor_ss(&v22, (int)&v13, v9);
        MessageBoxA(hWndParent, &v13, 0, 0x32u);// flag{n0_Zu0_n0_die}
      }
      ++dword_428D54;
    }

主要功能就这么一点,先是输入的6字节进行md5和hex后得到一个串,与v18那个串与S异或后的串比较。先把v18异或后得到md5值,然后网上搜到原值为123321

再往下走,他用同样方法把unk_423030用123321作了个异或然后输出

v18 = b'0kk`d1a`55k222k2a776jbfgd`06cjjb'
v18 = bytes([i^ord('S') for i in v18])
print(v18)
#c8837b23ff8aaa8a2dde915473ce0991
#123321
v22 = b'123321'
a = bytes.fromhex('575E5254495F016D6946026E5F026C575B544C')
for i,v in enumerate(a):
    t = v^v22[i%6]
    print(chr(t), end='')

#flag{n0_Zu0_n0_die}
#PCTF{PyC_Cr4ck3r} 网站上上传的flag是另外一个题的,名字相同

运行得到的这个flag并不是网站要求上传的,网上搜到另外一题,名字与这个相同,上传那个题的flag成功。

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:44:40  更:2022-04-01 23:45:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/16 18:43:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码