BUUCTF reverse

luck_guy

拖入exe查壳,无壳拖入64位IDA,F5反汇编
shift+F12查看程序里的字符串
在这里插入图片描述
双击跟进跳转,ctrl+x找到关键函数
在这里插入图片描述
代码分析:

v6 = __readfsqword(0x28u);
  v0 = time(0LL);
  srand(v0);
  for ( i = 0; i <= 4; ++i )
  {
    switch ( rand() % 200 )
    {
      case 1:
        puts("OK, it's flag:");
        memset(&s, 0, 0x28uLL);
        strcat((char *)&s, f1);   //f1为GXY{do_not_
        strcat((char *)&s, &f2);   //f2为空
        printf("%s", (const char *)&s);   //flag为f1+f2
        break;
      case 2:
        printf("Solar not like you");
        break;
      case 3:
        printf("Solar want a girlfriend");
        break;
      case 4:
        s = 0x7F666F6067756369LL;
        v5 = 0;
        strcat(&f2, (const char *)&s);   //f2=0x7F666F6067756369
        break;
      case 5:
        for ( j = 0; j <= 7; ++j )
        {
          if ( j % 2 == 1 )
            *(&f2 + j) -= 2;
          else
            --*(&f2 + j);
        }
        break;
      default:
        puts("emmm,you can't find flag 23333");
        break;
    }
  }
  return __readfsqword(0x28u) ^ v6;
}

f2的格式不对,没有形成flag形式,case5的代码对长度为8的字符串进行了操作,f2(0x7F666F6067756369两位一划分)的长度正好也是8,猜测用来与f1进行拼接形成flag的字符串是f2进行了case5操作后的数据
脚本:

flag="GXY{do_not_"
f2=[0x7F,0x66,0x6F,0x60,0x67,0x75,0x63,0x69][::-1] #小端序的问题,所以要逆序一下

for j in range(8):
    if j%2==1 :
        s=chr(f2[j]-2)
    else:
        s=chr(f2[j]-1)

    flag+=s

print (flag)

运行得到flag为flag{do_not_hate_me}

JustRE

拖入exe查壳,无壳拖入32位IDA,F5反汇编
shift+F12查看程序里的字符串
在这里插入图片描述
双击跟进,ctrl+x,F5
在这里插入图片描述
将19999和0分别带入两个%d%d,得到BJD{1999902069a45792d233ac}
因此得到flag为flag{1999902069a45792d233ac}

简单注册器

附件为apk文件,安卓逆向题,用jadx直接打开可以查看代码(注意打开的时候将文件名改成英文,不然可能会报错)
找到核心代码
在这里插入图片描述
写脚本:

#include <iostream>
#include <string>
using namespace std;
int main ()
{
  
string  x="dd2940c04462b4dd7c450528835cca15";
char a;
int i=0;
x[2] = (char)(x[2] + x[3] - 50);
x[4] =(char)(x[2] + x[5] - 0x30);
x[30]=(char)(x[0x1F] + x[9] - 0x30);
x[14] =(char)(x[27] + x[28] - 97);
for (  ;i<16;++i)
    {
     a = x[0x1f - i];
     x[0x1f - i] = x[i];
     x[i] = a;}
    cout<<x; 
return 0;
}

得到flag