• [BUUCTF]REVERSE——[BJDCTF2020]easy


    [BJDCTF2020]easy

    附件

    1. 例行检查,无壳,32位程序
      在这里插入图片描述

    2. 32位ida载入,main函数和字符串理都没有找到有关flag的提示
      在这里插入图片描述

    3. 根据main函数的提示,有关flag的函数应该被藏起来了,在左边的函数列表里一个一个查看,看到quess的函数长得有的像
      在这里插入图片描述
      给了10个数据,每两个数据进行一次变换,变换后长度为50,之后应该是对处理好后的数据进行按位判断,是1输出‘*’,否则输出‘ 空格 ’,估计对处理后的数据转换成了2进制

    4. 32行到46行的处理数据里有些函数看不大懂,百度后发现是宏定义
      在这里插入图片描述

    5. 所以我们这边对数据的操作是每两个数据为一组,分别取出他们的高字节(前16位)和低字节(后16位)去组成一个新的数,高低位分别为32字节,新的数的高字节是每组的第二个数的高字节+低字节,新数的低字节是每组第一个数的高字节+低字节,注意最后生成的数据的长度是50
      拿一组数据说明一下
      在这里插入图片描述
      所以得到的新数的二进制是10001001001111110001111111111110100111111000110001
      依次类推可以算出其他4组数据的结果,最后得到的5组数据是

    10001001001111110001111111111110100111111000110001
    10001010101000010010001000010010100100001000111001
    11111111111000011100001000010011111111001000110101
    10001100011000010110001000010000100100001000110011
    10001100011111110001111110010000100100001111110001
    
    1. 最后按位比较一下,是1输入‘*’,否则输出空格,每输出5个字符输出一个空格
      exp
    a='1000100100111111000111111111111010011111100011000110001010101000010010001000010010100100001000111001111111111110000111000010000100111111110010001101011000110001100001011000100001000010010000100011001110001100011111110001111110010000100100001111110001'
    for i in range(250):
    	if a[i]=='1':
    		print ('*',end="")
    	else:
    		print (' ',end="")
    	if (i+1)%5==0:
    		print (' ',end="")
    	if (i+1)%50==0:
    		print ('
    ',end="")
    

    在这里插入图片描述
    输出字符HACKIT4FUN
    拿去尝试一下发现是flag
    flag{HACKIT4FUN}

  • 相关阅读:
    随笔为什么还要想标题
    [GXYCTF2019]BabySQli
    [CISCN2019 华北赛区 Day2 Web1]Hack World
    20年美亚杯个人赛-ALICE_USB部分WRITE UP
    20年美亚杯个人赛-Alice LG Phone部分WRITE UP
    20年美亚杯个人赛-Alice_Laptop部分WRITE UP
    20年美亚杯WRITE UP
    18年美亚杯团体赛-C部分 WRITE UP
    v&n赛 ML 第一步(python解决)
    CTFHub web技能树 RCE
  • 原文地址:https://www.cnblogs.com/xlrp/p/14273640.html
Copyright © 2020-2023  润新知