首页 > 其他分享 >[BUUCTF]Reverse-刮开有奖

[BUUCTF]Reverse-刮开有奖

时间:2023-03-14 20:22:58浏览次数:58  
标签:BUUCTF Reverse 对话框 刮开 a1 int result 4010F0 DWORD

 

 是32位的,拖入ida严刑拷打

 【还可以点进DialogBoxParamA函数,这是一个从对话框模板资源创建模式对话框。 在显示对话框之前,函数会将应用程序定义的值作为WM_INITDIALOG消息的 lParam 参数传递给对话框过程。 应用程序可以使用此值初始化对话框控件的函数。

DialogBoxParam 函数使用 CreateWindowEx 函数创建对话框。 然后,如果模板指定对话框过程DS_SETFONT或DS_SHELLFONT样式) ,则 DialogBoxParam 会发送WM_INITDIALOG消息 (和WM_SETFONT消息。 无论模板是否指定 WS_VISIBLE样式) 、禁用所有者窗口,以及启动其自己的消息循环来检索和调度对话框,函数都会 (显示对话框。

当对话框过程调用 EndDialog 函数时,DialogBoxParam 将销毁对话框,结束消息循环,如果以前启用) ,则启用所有者窗口 (,并在调用 EndDialog 时返回由对话框过程指定的 nResult 参数。】

 Shift+f12字符串窗口查看

 点进去4010F0查看

int __cdecl sub_4010F0(int a1, int a2, int a3)
{
  int result; // eax
  int i; // esi
  int v5; // ecx
  int v6; // edx

  result = a3;
  for ( i = a2; i <= a3; a2 = i )
  {
    v5 = 4 * i;
    v6 = *(_DWORD *)(4 * i + a1);
    if ( a2 < result && i < result )
    {
      do
      {
        if ( v6 > *(_DWORD *)(a1 + 4 * result) )
        {
          if ( i >= result )
            break;
          ++i;
          *(_DWORD *)(v5 + a1) = *(_DWORD *)(a1 + 4 * result);
          if ( i >= result )
            break;
          while ( *(_DWORD *)(a1 + 4 * i) <= v6 )
          {
            if ( ++i >= result )
              goto LABEL_13;
          }
          if ( i >= result )
            break;
          v5 = 4 * i;
          *(_DWORD *)(a1 + 4 * result) = *(_DWORD *)(4 * i + a1);
        }
        --result;
      }
      while ( i < result );
    }
LABEL_13:
    *(_DWORD *)(a1 + 4 * result) = v6;
    sub_4010F0(a1, a2, i - 1);
    result = a3;
    ++i;
  }
  return result;
}

 

转换为c语言代码执行,这里参考的是这个大佬的wp:https://blog.csdn.net/weixin_46009088/article/details/109148249

 

#include <stdio.h>
#include <string.h>

int  sub_4010F0(char* a1, int a2, int a3)
{
    int result; // eax
    int i; // esi
    int v5; // ecx
    int v6; // edx

    result = a3;                                 
    for (i = a2; i <= a3; a2 = i)
    {
        v5 = i;
        v6 = a1[i];
        if (a2 < result && i < result)
        {
            do
            {
                if (v6 > a1[result])
                {
                    if (i >= result)
                        break;
                    ++i;
                    a1[v5] = a1[result];
                    if (i >= result)
                        break;
                    while (a1[i] <= v6)
                    {
                        if (++i >= result)
                            goto LABEL_13;
                    }
                    if (i >= result)
                        break;
                    v5 = i;
                    a1[result] = a1[i];
                }
                --result;
            } while (i < result);
        }
    LABEL_13:
        a1[result] = v6;
        sub_4010F0(a1, a2, i - 1);
        result = a3;
        ++i;
    }
    return result;
}
int main(void)
{
    char str[] = "ZJSECaNH3ng";
    sub_4010F0(str,0,10);
    printf("%s", str);
    return 0;
}

 

发现一段base64字符串:

BCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=

 

 试试对ak1wV1Ax进行base64解密,再根据计算得到flag

 

提交flag成功

 

 

标签:BUUCTF,Reverse,对话框,刮开,a1,int,result,4010F0,DWORD
From: https://www.cnblogs.com/yushiting/p/17212603.html

相关文章

  • BUUCTF-REVERCE-[2019红帽杯]easyRE
    [2019红帽杯]easyRE​ 偶尔还是得花时间在难题上面啊。虽然很麻烦,但吃透之后真的是受益匪浅,比狂刷简单题有效多了。1.破解1一般而言,寻找非随机数会是比较快捷的方式。......
  • [BUUCTF]Reverse-[BJDCTF2020]JustRE
      进去之后直接看字符串窗口,发现一个疑似flag的,点进去查看    我的妈耶!良心啊,直接把flag给我们了,呜呜呜呜,真的好少见这种淳朴的出题人!!!BJD{1999902069a4579......
  • 实现函数init() 初始化数组为全0、实现print() 打印数组的每个元素 、实现reverse()
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<stdlib.h>//【题目名称】//数组操作//【题目内容】//创建一个整形数组,完成对数组的操作//实现函数init()初......
  • BUUCTF-PWN-warmup_csaw_2016
    定期pwn一下维持手感1.检查啥都没有捏2.找漏洞ida静态分析从main里面找到get找到shell思路是简单的栈溢出3.信息收集get_addr:0x40069E距离rbp:0x40shell_add......
  • buuctf
    1、JustRE首先将文件放入exeinfope查看是否有壳 发现无壳,32位放入ida32位查看 没找到什么有用的东西按shift+f12查找字符串 发现一处类似flag的代码 按住ct......
  • reverse-shell(updating)
    title:reverse-shelldate:2023-03-0121:17:10tags:(写在前面)0.为什么想写这个今天尝试搭建了vulhub靶场(CentOS),搭建过程中出了n个问题,但都在网上找到了答案,然后这......
  • BUUctf pwn1_sctf_2016 nc尝试
    BUUctfpwn1_sctf_2016file,发现文件是32位elfchecksec,发现文件开启了NX保护,NX指的是NoExcute(禁止运行)IDA查看函数,发现main()调用了vuln(),而且存在一个get_flag函数,地......
  • BUUctf ciscn_2019_n_1
    BUUciscn_2019_n_1首先file,是64位elfIDA,发现main函数会调用func函数,而func中如果v2=11.28125,就会cat/flag,并且上面有个gets,存在栈溢出漏洞压栈的过程是v1的44字节,然......
  • BUUctf warmup_csaw_2016
    BUUwarmup_csaw_2016首先file,发现是64位ELF文件。IDA发现main函数中return了get函数,存在溢出点。查看文件中的字符串,发现有'catflag.txt'双击后发现在sub_40060D......
  • BUUCTF—CRYPTO 1—10
    BUUCTF—CRYPTO1—101、MD5题目:e00cf25ad42683b3df678c61f42c6bda解析:看题目就知道是MD5加密,直接上在线解码网站解码,答案是:flag2、BASE64题目:ZmxhZ3tUSEVfRkxBR19PRl......