欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创][Flare-on5] Challenge6 magic -Writeup

[原创][Flare-on5] Challenge6 magic -Writeup

0x00 序

  • Auth: vvv_347
  • Date: 09/14/2018
  • From: Flare-on5

0x01 破

signed __int64 __fastcall main(__int64 a1, char **a2, char **a3)

{

  unsigned __int64 v3; // rax

  unsigned __int64 len; // rax

  __int64 *v6; // [rsp+0h] [rbp-1E0h]

  unsigned int seed; // [rsp+1Ch] [rbp-1C4h]

  unsigned int i; // [rsp+20h] [rbp-1C0h]

  unsigned int j; // [rsp+20h] [rbp-1C0h]

  unsigned int k; // [rsp+24h] [rbp-1BCh]

  char input_s[128]; // [rsp+40h] [rbp-1A0h]

  char a3a; // [rsp+C0h] [rbp-120h]

  char arr_1[72]; // [rsp+140h] [rbp-A0h]

  char v14; // [rsp+188h] [rbp-58h]

  unsigned __int64 v15; // [rsp+1C8h] [rbp-18h]

  v15 = __readfsqword(0x28u);

  seed = 0;

  memset(input_s, 0, sizeof(input_s));

  memset(&a3a, 0, 0x80uLL);

  *arr_1 = 0x45123A7920755C24LL;

  *&arr_1[8] = 0x17263719711D201ELL;

  *&arr_1[16] = 0x4A7C67303E100367LL;

  *&arr_1[24] = 0x11621308555E1B11LL;

  *&arr_1[32] = 0x122C17445A7C6C68LL;

  *&arr_1[40] = 0x576D0C6324095979LL;

  *&arr_1[48] = 0x265D0F6A0C27651FLL;

  *&arr_1[56] = 0xA375C1433594643LL;

  *&arr_1[64] = 0x2C16022663LL;

  memset(&v14, 0, 0x38uLL);

  for ( i = 0; i < strlen("Run, Forrest, run!!"); i += 4 )

    seed ^= *&aRunForrestRun[i];

  srand(seed);

  if ( sub_402D47() )

  {

    v3 = strlen(a2[1]);

    func_proc1(a2[1], v3, &a3a);

    func_proc2(*a2);

    puts("Generated first permutation!");

    exit(0);

  }

  puts("Welcome to the ever changing magic mushroom!");

  printf("%d trials lie ahead of you!\n", 666LL, a2);

  for ( j = 0; j < 666; ++j )

  {

    printf("Challenge %d/%d. Enter key: ", j + 1, 666LL);

    if ( !fgets(input_s, 128, unk_617630) )

      return 0xFFFFFFFFLL;

    len = strlen(input_s);

    func_proc1(input_s, len, &a3a);

    for ( k = 0; k < strlen(input_s); ++k )

      arr_1[k] ^= input_s[k];

    func_proc2(*v6);

  }

  printf("Congrats! Here is your price:\n%s\n", arr_1);

  return 0LL;

}

main生成个固定seed,之后进入sub_402D47做check,run时发现不会进入branch,先忽略。
接着读输入Key,进入func_proc1,完成后与加密flag做xor,最后进入func_proc2。
一共做666次Chanllenges,全部正确即可拿到flag。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功