【BUUCTF-REVERSE刮开有奖】详解版

news2024/10/5 21:25:42

这道题是BUUCTF-REVERSE中的一道题目
拿到题目我们直接拖到Exeinfo_PE中查看,发现没有加壳,32位应用程序,打开应用程序看看:刮开有奖
打开是这样,我是没有找到编辑框,那直接拖到IDA中打开看看吧:
IDA
打开IDA发现了很多参数,如果了解SDK编程的话,这就是一个加载对话框的API,那我们直接进到回调函数中看看:
这里直接将回调函数反编译了

INT_PTR __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4)
{
  const char *v4; // esi
  const char *v5; // edi
  int v7[2]; // [esp+8h] [ebp-20030h] BYREF
  int v8; // [esp+10h] [ebp-20028h]
  int v9; // [esp+14h] [ebp-20024h]
  int v10; // [esp+18h] [ebp-20020h]
  int v11; // [esp+1Ch] [ebp-2001Ch]
  int v12; // [esp+20h] [ebp-20018h]
  int v13; // [esp+24h] [ebp-20014h]
  int v14; // [esp+28h] [ebp-20010h]
  int v15; // [esp+2Ch] [ebp-2000Ch]
  int v16; // [esp+30h] [ebp-20008h]
  CHAR String[65536]; // [esp+34h] [ebp-20004h] BYREF
  char v18[65536]; // [esp+10034h] [ebp-10004h] BYREF

  if ( a2 == 272 )
    return 1;
  if ( a2 != 273 )
    return 0;
  if ( (_WORD)a3 == 1001 )
  {
    memset(String, 0, 0xFFFFu);
    GetDlgItemTextA(hDlg, 1000, String, 0xFFFF);
    if ( strlen(String) == 8 )
    {
      v7[0] = 90;
      v7[1] = 74;
      v8 = 83;
      v9 = 69;
      v10 = 67;
      v11 = 97;
      v12 = 78;
      v13 = 72;
      v14 = 51;
      v15 = 110;
      v16 = 103;
      sub_4010F0((int)v7, 0, 10);  
      memset(v18, 0, 0xFFFFu);             
      v18[0] = String[5];                      
      v18[2] = String[7];
      v18[1] = String[6];
      v4 = sub_401000((int)v18, strlen(v18));   // base64编码
      memset(v18, 0, 0xFFFFu);
      v18[1] = String[3];                    
      v18[0] = String[2];
      v18[2] = String[4];
      v5 = sub_401000((int)v18, strlen(v18));
      if ( String[0] == v7[0] + 34           
        && String[1] == v10  
        && 4 * String[2] - 141 == 3 * v8
        && String[3] / 4 == 2 * (v13 / 9)
        && !strcmp(v4, "ak1w")
        && !strcmp(
              v5,
              "V1Ax") )
      {
        MessageBoxA(hDlg, "U g3t 1T!", "@_@", 0);
      }
    }
    return 0;
  }
  if ( (_WORD)a3 != 1 && (_WORD)a3 != 2 )
    return 0;
  EndDialog(hDlg, (unsigned __int16)a3);
  return 1;
}

这里可以看到,现时将v7赋予字符串,然后获取输入框中用户输入的内容,函数sub_4010F0对v7进行了一次加密,我们来看看sub_41000函数:
sub_4010F0
这里是对v7进行加密,我们直接对着伪代码,写出加密源码,获得加密后的字符串:
Base1
我们可以看到是将用户输入的字符串,取其中的某些值,赋值给v18,然后对v18进行操作,将返回值保存到v4中,我们来看看这个函数:
sub_401000
这个函数看起来很麻烦,但是这其中有一个常量字符串,我们跟进去看看:
Base64码表
有没有很熟悉?这是Base64加密的码表,那么我们就可以合理地猜测:该函数就是将String中的三个字符进行Base64加密,了解Base64加密的应该知道,加密后应该是4个字符。
我们再来看看后面的过程:
Base2在这里插入图片描述
这个过程与上面的都一样,都是Base64加密。

接下来就是验证过程了,我们来看看:
验证
我们可以看到,String[1]就是v7加密后的第一个字符+3,但是这里要非常注意,这里的3不是数字3,而是ASCII码的3,是51。
String[2]=v10,也就是v7[5],
而String[3],String[4],String[5]由于是Base64加密,这里将V1Ax解密就好,解密后为WP1
String[6],String[7],String[8]也一样,将ak1w解密,解密后为jMp,然后我们将字符串包上falg{}就可以提交了:
flag{UJWP1jMp}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/716868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用python-opcua 实现modbus网关(2)

我们继续来研究如何使用python-opcua 实现opcua/modbus 网关。 opcua 开发包包含了大量的函数,通过研究opcua/modbus 网关的实现,可以了解这些函数的使用方法。由于函数过多,文章中函数的使用方式可能不尽合理,或者存在错误。希望…

从不同视角绘制三维散点图

import numpy as np from matplotlib import pyplot as plt positive_data arr_feature_pca[y_dbscan_pred ! -1, :] negative_data arr_feature_pca[y_dbscan_pred -1, :] # --------------------------------------- 定义绘图函数 ----------------------------------- d…

华为云函数工作流FunctionGraph新手操作指南

函数工作流(FunctionGraph)是华为云提供的一款无服务器(Serverless)计算服务,无服务器计算是一种托管服务,服务提供商会实时为你分配充足的资源,而不需要预留专用的服务器或容量,真正…

CRM的哪些功能对企业最有用?

企业如何在竞争激烈的市场环境中,提高销售效率,管理客户关系,实现业绩增长?适合的CRM客户管理系统就可以帮助很多。Zoho CRM是一款SaaS云端CRM系统,它能够帮助企业管理客户关系,提高销售效率,获…

springboot集成camunda

1、相关软件下载Camunda流程引擎快速入门——Hello World示例 2、由于camunda-modeler最新版本为5.12.0.界面不太一样。 可以安装历史版本4.12.0camunda-bpm camunda-modeler等历史版本下载 3、汉化Camunda Modeler汉化添加简体中文和繁体中文支持 4、集成如何实现Springbootca…

Android Studio实现内容丰富的安卓高校评教系统

如需源码可以添加q-------3290510686,也有演示视频演示具体功能,源码不免费,尊重创作,尊重劳动。 项目编号114 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.查看公告 3.查…

口语理解任务源码详解系列(一)数据集构建

口语理解任务源码详解系列(一)数据集构建 写在前面 本系列从零开始构建口语理解项目,整个项目分为意图分类与槽位填充两个子任务。项目采用的数据集为ATIS航空领域口语理解数据集,项目源码请传送到:github 一、处理数据…

网络编程1—— IP地址 + 端口号 +TCP/IP协议 + 协议分层的封装与应用

文章目录 前言一、网络发展各阶段二、网络通信的三大要素1.IP地址2.端口号3.网络协议 三、TCP/IP五层网络模型各层级的用处网络设备所在分层 四、封装和分用封装分用网络传输的实际情况 总结 前言 本人是一个刚刚上路的IT新兵,菜鸟!分享一点自己的见解,如果有错误的地方欢迎各…

搞懂推荐系统中的评价指标NDCG(CG、DCG、IDCG)

这些指标都是衡量搜索引擎算法的指标。搜索引擎一般采用PI(peritem)的方式进行评测,简单地说就是逐条对搜索结果进行分等级的打分。假设我们现在在Google上搜索一个词,然后得到5个结果。我们对这些结果进行3个等级的区分&#xff…

cmd可以用node但是vscode报错--node : 无法将“node”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

原因:环境变量配置错误 解决: a.如果不想配置环境变量,可用管理员方式运行vscode后,重启编译器: 若以上方法不行,需要老老实实配置环境变量: b.配置 系统环境变量(S) 即…

机器学习20:嵌入-Embeddings

嵌入(Embeddings)是一个相对低维的空间,我们可以将高维向量转换到其中。嵌入使得对大型输入(例如表示单词的稀疏向量)进行机器学习变得更加容易。理想情况下,嵌入通过将语义相似的输入紧密地放置在嵌入空间…

高中生用台灯哪种好?盘点好用的高中生护眼台灯

随着科技的进步,台灯的外观和造型都开始不断的变化,而且台灯的功能也越来越多元化,各式各样的台灯都有。论哪种台灯最适合高中生使用,我的回答是护眼台灯!因为台灯的主要作用就是照明,便于学习、阅读、工作…

基于Springboot+Vue的手机商城(源代码+数据库)081

基于SpringbootVue的手机商城(源代码数据库)081 一、系统介绍 本项目前后端分离(该项目还有ssmvue版本) 本系统分为管理员、用户两种角色 用户角色包含以下功能: 登录、注册、商品搜索、收藏、购物车、订单提交、评论、退款、收货地址管…

2023年5月 少儿编程 中国电子学会图形化编程等级考试Scratch编程一级真题解析(选择题)

2023年5月scratch编程等级考试一级真题 选择题(共25题,每题2分,共50分) 1、看图找规律,请问下图红框中是 A、 B、 C、 D、 答案:D 考点分析:

DS-font

paper:https://arxiv.org/pdf/2301.10008.pdf title: Few-shot Font Generation by Learning Style Difference and Similarity accepted: arXiv 2023 abstract 少镜头字体生成(FFG)旨在保留原始字符的底层全局结构,同时通过参考一些样本生成目标字体。它已应用于字体库创…

怎么解决找不到msvcp120.dll,msvcp120.dll一键修复方法

小伙伴们知道msvcp120.dll是什么文件吗?那么今天小编就来讲解电脑出现msvcp120.dll丢失的解决方法介绍,希望能够帮助到大家呢。 msvcp120.dll 是windows系统中必备的动态链接库文件。msvcp120.dll可以解决某些大型游戏、程序由于vs2010编译系统中缺失此dll的问题。…

R 语言的安装(详细教程)

文章目录 前言一、R 语言是什么?二、R 下载1. 官网2. download base3. download Rtools 三、Rstudio 下载1. 官网2. download Rstudio 四、R 安装五、Rtools 安装六、Rstudio 安装七、java 的环境配置八、运行 RStudio十、R 包安装策略1. 配置镜像1. 修改配置文件1.…

Microsoft遭遇DDoS攻击,3000万客户数据遭窃

6月初,微软部分服务遭遇严重中断,包括Outlook电子邮件、OneDrive文件共享应用程序和云计算基础设施Azure。 一个名为”匿名苏丹”的(又名“风暴-1359”)的组织声称对此次DDoS攻击负责。 匿名苏丹组织自2023年1月以来一直活动频繁,声称其目标…

SpinalHDL的使用和开发经验研讨会

SpinalHDL始于2014年,最初是作为VHDL/Verilog的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。 达坦科技(DatenLord)致力于打造高性能跨云存储&#…