BUUCTF逆向前三道题解题思路

本文介绍了如何通过IDA工具分析两个逆向工程题目,解压exe文件,搜索关键字符串,理解伪代码,识别ASCII编码转换,最终找出隐藏的flag。涉及Linux程序和字符串替换操作。
摘要由CSDN通过智能技术生成

第一题easyre

打开题目后发现有一个压缩文件,点击下载。

解压之后发现是一个exe文件,优先考虑导入IDA。

按shift+F12搜索关键字符串

可以看到第一个字符串即为正确答案。

第二题reverse1

与上题一样,将文件导入IDA

检索字符串(按Ctrl+F搜索关键字符串“flag”)

结果并没有直接显示flag,考虑伪代码

按F5查看伪代码

int __cdecl main_0(int argc, const char **argv, const char **envp)
{
  char *v3; // rdi
  __int64 i; // rcx
  size_t v5; // rax
  char v7; // [rsp+0h] [rbp-20h] BYREF
  int j; // [rsp+24h] [rbp+4h]
  char Str1[224]; // [rsp+48h] [rbp+28h] BYREF
  __int64 v10; // [rsp+128h] [rbp+108h]

  v3 = &v7;
  for ( i = 82i64; i; --i )
  {
    *(_DWORD *)v3 = -858993460;
    v3 += 4;
  }
  for ( j = 0; ; ++j )
  {
    v10 = j;
    if ( j > j_strlen(Str2) )
      break;
    if ( Str2[j] == 111 )
      Str2[j] = 48;
  }
  sub_1400111D1("input the flag:");
  sub_14001128F("%20s", Str1);
  v5 = j_strlen(Str2);
  if ( !strncmp(Str1, Str2, v5) )
    sub_1400111D1("this is the right flag!\n");
  else
    sub_1400111D1("wrong flag\n");
  return 0;
}

str2本身是被赋值的,双击str2进入反汇编界面查看str2的值

其中函数

for ( j = 0; ; ++j )
  {
    v10 = j;
    if ( j > j_strlen(Str2) )
      break;
    if ( Str2[j] == 111 )
      Str2[j] = 48;
  }

为处理str2的部分,可以推断出111和48为AscII码值,按r键可以将其转化为字符串。

这里能判断出这串代码的意思是吧str2中的o全部换为0,str2为{hello_world}

所以正确的flag为flag{hell0_w0rld}。

第三题reverse2

这个题的文件下载下来没有后缀,可以用exeinfope查看一下

这种文件可能是LINUX程序

用IDA打开

检索字符串

查看伪代码

这里的关键代码是把flag里面的i或r换成1,双击查看flag的值

flag是db和一个{(db的值在下面,flag其实就是{hacking_for_fun})

然后按照代码修改flag,可以得到真正的flag为flag{hack1ng_fo1_fun}。

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值