buuctf reverse1 write up 最最最最详解

发布于:2022-12-02 ⋅ 阅读:(347) ⋅ 点赞:(0)

     首先把这个拖进IDA中,再按下shift+F12查看文件目录

 看到This is the right flag 然后点击那一行

点击string中字符然后按下ctrl+x

 

点击ok可以如下:

 

点击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;
}

从首行开始到我打了5个*的地方都是在初始化一些变量比如说整形,和字符型。

for ( j = 0; ; ++j )
  {
    v10 = j;
    if ( j > j_strlen(Str2) )
      break;
    if ( Str2[j] == 111 )
      Str2[j] = 48;
  }这一段是:这是一个遍历字符串的循环,循环次数为 j > j_strlen(Str2)字符串Str2长度次。

if语句判断如果Str中有哪一位出现了字符‘o'则把’o'替换为‘0’。这里的111其实就是‘o'的ASCII值

48就是’0‘的ASCII值。可以不用查表点击’111‘然后按右键直接点击char类型直接转换。

  print("input the flag:");
  input("%20s", Str1);
  v5 = j_strlen(Str2);
  if ( !strncmp(Str1, Str2, v5) )
    print("this is the right flag!\n");
  else
    print("wrong flag\n");
  return 0;
}

  input("%20s", Str1);这里让你输入一个Str1的值

if ( !strncmp(Str1, Str2, v5) )
    print("this is the right flag!\n");

这里是最关键的地方,先要了解strncmp函数:reverse1:strncmp函数为字符串比较函数,字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。其函数声明为int strncmp ( const char * str1, const char * str2, size_t n );功能是
把 str1 和 str2 进行比较,最多比较前 n 个字节,若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 小于s2,则返回小于0的值。如果返回值 < 0,则表示 str1 小于 str2。如果返回值 > 0,则表示 str1 大于 str2。如果返回值 = 0,则表示 str1 等于 str2。

有个’!‘就说明这是个否命题你要让其为真值1就要使str1与str2完全相等。到此我们会发现str2的值是什么我们并不知道所以就去找直接双击Str2

就可以看到这个啦再把其中的'o'换成'0'就可以了 

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到