目录

easyre

reverse1

reverse2

内涵的软件

新年快乐

xor

helloword

reverse3

不一样的flag

SimpleRev


easyre

用notepad++打开文件,直接用搜索就搜索出来flag{this_Is_a_EaSyRe}

用DIE打开,搜txt:flag,可发现flag

reverse1

reverse1 注意:得到的 flag 请包上 flag{} 提交

用DIE打开发现为64位,用ida打开,shift+F12查看Strings window窗口,this is the right flag!'点进去,发现页面,然后在那一行右键List cross references to,然后点击ok。

进入汇编语言中,如果看不懂,可以按下F5,变成伪代码

发现str2,点进去,发现{hello_world},然后在分析伪代码,右键111转换为char格式。

if ( Str2[j] == 'o' )
      Str2[j] = '0';

发现是将o转换为0,所以得出flag{hell0_w0rld}

reverse2

用DIE打开发现为64位,用ida打开,shift+F12查看Strings window窗口,this is the right flag!'点进去,发现页面,然后在那一行右键List cross references to,然后点击ok。F5

if ( *(&flag + i) == 'i' || *(&flag + i) == 'r' )
        *(&flag + i) = '1';

双击flag常量,发现

将hacking_for_fun中i和r替换为1,得到flag{hack1ng_fo1_fun}}

内涵的软件

发现为32位,用32为打开发现
  v2 = "DBAPP{49d3c93df25caad81232130f3d2ebfad}";

试试flag{49d3c93df25caad81232130f3d2ebfad}出现答案。

新年快乐

用od工具包查壳提取,发现为32为有壳,先脱壳,od工具包内查壳脱壳工具,脱壳后用ida打开得到代码

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int result; // eax
  char v4; // [esp+12h] [ebp-3Ah]
  __int16 v5; // [esp+20h] [ebp-2Ch]
  __int16 v6; // [esp+22h] [ebp-2Ah]

sub_401910();
  strcpy(&v4, "HappyNewYear!");  //strcpy函数为stringcopy缩写,将HappyNewYear!复制到v4中
  v5 = 0;
  memset(&v6, 0, '\x1E');
  printf("please input the true flag:");
  scanf("%s", &v5);
  if ( !strncmp((const char *)&v5, &v4, strlen(&v4)) )
    result = puts("this is true flag!");
  else
    result = puts("wrong!");
  return result;
}

猜测flag为HappyNewYear!

xor

key = [ 'f',0xA,'k',0xC,'w','&','O','.','@',0x11,'x',0xD,'Z',';','U',0x11,'p',0x19,'F',0x1F,'v','"','M','#','D',0xE,'g',6,'h',0xF,'G','2','O' ]
flag = "f"
x = 0
for i in range(0,len(key)-1):
    if isinstance(key[i],str):
        if isinstance(key[i+1],str):    x = ord(key[i]) ^ ord(key[i+1])     # key[i],key[i+1]同时为字符串
        else:                           x = ord(key[i]) ^ key[i+1]          # key[i]为字符串,key[i+1]为整数
    else:
        if isinstance(key[i+1],str):    x = key[i] ^ ord(key[i+1])          # key[i]为整数,key[i+1]为字符串
        else:                           x = key[i] ^ key[i+1]               # key[i],key[i+1]同时为整数
    flag = flag + chr(x)
print(flag)

flag{QianQiuWanDai_YiTongJiangHu}

helloword

apk文件,需要用android killer工具打开

直接用工程搜索搜flag{得到文件打开发现

flag{7631a988259a00816deda84afb29430a}

主文件在这里

reverse3

点击main_0跟进,来到主函数,如下(重要的语句已经做好了标记):

接下来先查看一下Str2这个字符串是啥,点进去,
再跟进sub_411AB0函数,如下(太长了叭…):

void *__cdecl sub_411AB0(char *a1, unsigned int a2, int *a3)
{
  int v4; // STE0_4
  int v5; // STE0_4
  int v6; // STE0_4
  int v7; // [esp+D4h] [ebp-38h]
  signed int i; // [esp+E0h] [ebp-2Ch]
  unsigned int v9; // [esp+ECh] [ebp-20h]
  int v10; // [esp+ECh] [ebp-20h]
  signed int v11; // [esp+ECh] [ebp-20h]
  void *Dst; // [esp+F8h] [ebp-14h]
  char *v13; // [esp+104h] [ebp-8h]

if ( !a1 || !a2 )
    return 0;
  v9 = a2 / 3;
  if ( (signed int)(a2 / 3) % 3 )
    ++v9;
  v10 = 4 * v9;
  *a3 = v10;
  Dst = malloc(v10 + 1);
  if ( !Dst )
    return 0;
  j_memset(Dst, 0, v10 + 1);
  v13 = a1;
  v11 = a2;
  v7 = 0;
  while ( v11 > 0 )
  {
    byte_41A144[2] = 0;
    byte_41A144[1] = 0;
    byte_41A144[0] = 0;
    for ( i = 0; i < 3 && v11 >= 1; ++i )
    {
      byte_41A144[i] = *v13;
      --v11;
      ++v13;
    }
    if ( !i )
      break;
    switch ( i )
    {
      case 1:
        *((_BYTE *)Dst + v7) = aAbcdefghijklmn[(signed int)(unsigned __int8)byte_41A144[0] >> 2];
        v4 = v7 + 1;
        *((_BYTE *)Dst + v4++) = aAbcdefghijklmn[((byte_41A144[1] & 0xF0) >> 4) | 16 * (byte_41A144[0] & 3)];
        *((_BYTE *)Dst + v4++) = aAbcdefghijklmn[64];
        *((_BYTE *)Dst + v4) = aAbcdefghijklmn[64];
        v7 = v4 + 1;
        break;
      case 2:
        *((_BYTE *)Dst + v7) = aAbcdefghijklmn[(signed int)(unsigned __int8)byte_41A144[0] >> 2];
        v5 = v7 + 1;
        *((_BYTE *)Dst + v5++) = aAbcdefghijklmn[((byte_41A144[1] & 0xF0) >> 4) | 16 * (byte_41A144[0] & 3)];
        *((_BYTE *)Dst + v5++) = aAbcdefghijklmn[((byte_41A144[2] & 0xC0) >> 6) | 4 * (byte_41A144[1] & 0xF)];
        *((_BYTE *)Dst + v5) = aAbcdefghijklmn[64];
        v7 = v5 + 1;
        break;
      case 3:
        *((_BYTE *)Dst + v7) = aAbcdefghijklmn[(signed int)(unsigned __int8)byte_41A144[0] >> 2];
        v6 = v7 + 1;
        *((_BYTE *)Dst + v6++) = aAbcdefghijklmn[((byte_41A144[1] & 0xF0) >> 4) | 16 * (byte_41A144[0] & 3)];
        *((_BYTE *)Dst + v6++) = aAbcdefghijklmn[((byte_41A144[2] & 0xC0) >> 6) | 4 * (byte_41A144[1] & 0xF)];
        *((_BYTE *)Dst + v6) = aAbcdefghijklmn[byte_41A144[2] & 0x3F];
        v7 = v6 + 1;
        break;
    }
  }
  *((_BYTE *)Dst + v7) = 0;
  return Dst;

加密过程十分复杂,但是后面我们注意到一个名叫aAbcdefghijklmn的数组,有点怪怪的我们点进去看看

哦嚯!这不是base64编码嘛!
我们直接将Str2字符串减去 j,再将其base64逆运算(base64是一个可逆的加密算法)就可以得到结果!

python代码如下:

import base64
str = 'e3nifIH9b_C@n@dH'
flag = ''
index = ''
for i in range(0,len(str)):
    index = chr(ord(str[i]) - i)
    flag += index
flag = base64.b64decode(flag)
print(flag)

运行,flag出来了!!!{i_l0ve_you}

不一样的flag

打开查看程序发现上下左右,查看程序

直接按照命令来进行走
走0不走1
得到字符串:222441144222

SimpleRev

BUUCTF--Reverse相关推荐

  1. BUUCTF Reverse/findKey

    BUUCTF Reverse/findKey 先看文件信息:32位程序,没有加壳 打开看看,标题为find flag,也没啥有用的信息 IDA32位打开,找到start函数,看到有个main,跟随跳转 ...

  2. BUUCTF Reverse helloword、findit

    BUUCTF Reverse helloword.findit helloword findit 一天一道CTF题目,能多不能少 记录一下这两道题,这两道题是安卓逆向的题目~ 第一次接触安卓逆向的题目 ...

  3. BUUCTF Reverse/Ultimate Minesweeper

    BUUCTF Reverse/Ultimate Minesweeper 先看文件信息,没有加壳,且为net编写的程序 运行是一个扫雷游戏,只要点错一个就会自动退出(左上角显示的是雷的数目,一共有897 ...

  4. BUUCTF Reverse xor

    题目:BUUCTF Reverse xor 一些犯傻后学到了新东西的记录 查壳,没壳,IDA打开 main函数很好理解,输入一个长度为33的字符串,1-32位与前一位异或后与global相等,则判定f ...

  5. BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker

    BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker 先看下文件信息,没有加壳,32位程序 运行一下,又是一道字符串比较的题目 用IDA32位打开,分析一下 // positive ...

  6. BUUCTF Reverse/[GWCTF 2019]pyre

    BUUCTF Reverse/[GWCTF 2019]pyre 下载得到一个pyc文件,用这个在线反编译pyc,pyo反汇编出代码 print 'Welcome to Re World!' print ...

  7. BUUCTF Reverse(helloworld)

    BUUCTF Reverse(helloworld) 题目附件下载下来之后,是.apk后缀,所以可能是安卓逆向. 这里我用的工具是Android Killer,下载地址:https://xiazai. ...

  8. BUUCTF Reverse/[WUSTCTF2020]Cr0ssfun

    BUUCTF Reverse/[WUSTCTF2020]Cr0ssfun 先看文件信息, IDA64位打开,很简单的题目,只要一个个输入就行 都是返回的这种元素 _BOOL8 __fastcall i ...

  9. BUUCTF reverse题解汇总

    本文是BUUCTF平台reverse题解的汇总 题解均来自本人博客 目录 Page1 Page2 Page3 Page4 Page1 easyre reverse1 reverse2 内涵的软件 新年 ...

  10. [BUUCTF]Reverse——[网鼎杯 2020 青龙组]jocker

    网上大部分是动调,我尝试IDC解一下, 无壳,32位,放入IDApro,查看main函数 查看wrong和str函数,借出假的flag a=[0x66,0x6B,0x63,0x64,0x7F,0x61 ...

最新文章

  1. 使用MySQL Proxy解决MySQL主从同步延迟
  2. 计算机科学与技术的深度研究,专业深度分析--计算机科学与技术.docx
  3. caffe框架下目标检测——faster-rcnn实战篇操作
  4. php调整表格样式,表格的创建以及样式修改
  5. maven原型_Maven原型创建技巧
  6. jquery $(function(){}) $(document).ready(function(){}); (function(){}); 的区别以及作用
  7. 面试官:你对多线程熟悉吗,谈谈线程安全中的原子性,有序性和可见性?
  8. Android图片压缩
  9. 数据处理任务量级巨大?构建预置容器镜像的Amazon EKS解决方案了解一下!
  10. 面试题--5个数能组成多少中不同的二叉搜索树的结构--卡特兰数
  11. 餐馆会员管理系统 - MySQL数据库课程设计
  12. 设计模式-业务代表模式-个人思考
  13. 使用for循环同时便利两个列表
  14. 基于微信小程序的疫情智慧社区管理系统 计算机毕业设计 后台管理系统
  15. python实现用伏羲八卦对ASCII码进行加密
  16. SpringBoot消息转换器:HttpMessageConverter
  17. Mac不能复制拷贝写入文件到移动硬盘/U盘解决办法
  18. 2022 Java面试题道通科技
  19. Android接入微信登陆
  20. gedit命令和vim异常退出处理

热门文章

  1. 号码吉凶算法+对照表
  2. ES 7.16.2 Linux环境集群搭建
  3. 各纬度气候分布图_世界气候类型分布图
  4. vue中使用sortable插件实现拖拽 upload上传图片改变顺序
  5. 2019大二暑假总结
  6. 计算机东北大学与兰州大学哪个好,2016东北大学VS兰州大学 谁执牛耳?
  7. 每天一个kali无线命令--airmon-ng
  8. 计算机毕业设计JAVA基于智能推荐的良品店铺平台mybatis+源码+调试部署+系统+数据库+lw
  9. 牛腩新闻发布系统:Web窗体无法显示所应用的样式表
  10. 关于 java 学习的一点心得体会