小白学逆向7.19笔记

BUUCTF题目

新年快乐

 下载之后是一个.exe文件,运行

 

 要求输入什么东西

使用万能去壳去壳

 

去壳后拖入IDA,F5查看伪代码

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!");
  v5 = 0;
  memset(&v6, 0, 0x1Eu);
  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;
}

得到falg为HappyNewYear!

内涵的软件

运行.exe文件,得到

 

 查壳发现没有加壳,为32位文件,用IDA打开

 

发现_main跳到了_main_0函数

 

 观察_main_0,发现字符串DBAPP{49d3c93df25caad81232130f3d2ebfad}

试一试,发现flag就是flag{49d3c93df25caad81232130f3d2ebfad}。

[BJDCTF 2nd]guessgame

运行程序,得到

 

 对文件查壳,发现未加壳,放入IDA。shift+f12查找字符串,则得到falgBJD{S1mple_ReV3r5e_W1th_0D_0r_IDA}

 

 helloword

下载得到apk文件

 

 用apl改之理打开,很容易得到flag{7631a988259a00816deda84afb29430a}

xor

查壳,什么信息都没有

 

 直接放入IDA64,f5反编译得到伪代码

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char *v3; // rsi
  int result; // eax
  signed int i; // [rsp+2Ch] [rbp-124h]
  char v6[264]; // [rsp+40h] [rbp-110h]
  __int64 v7; // [rsp+148h] [rbp-8h]

  memset(v6, 0, 0x100uLL);
  v3 = (char *)256;
  printf("Input your flag:\n", 0LL);
  get_line(v6, 0x100u);
  if ( strlen(v6) != 33 )      //flag为33位
    goto LABEL_12;
  for ( i = 1; i < 33; ++i )
    v6[i] ^= v6[i - 1];       //输入的字符串从第二位开始,后一位与前一位异或
  v3 = global;   
  if ( !strncmp(v6, global, 0x21uLL) )   //计算完的值和在global储存放的字符串进行比较
    printf("Success", v3);
  else
LABEL_12:
    printf("Failed", v3);
  result = __stack_chk_guard;
  if ( __stack_chk_guard == v7 )
    result = 0;
  return result;
}

因此,在global的字符串是执行过上述算法的字符串,所以将global反过来处理就得到了falg

则flag{QianQiuWanDai_YiTongJiangHu}

posted @ 2020-07-20 14:46  英雄你个土豆  阅读(244)  评论(0)    收藏  举报