新手一枚,如有错误(不足)请指正,谢谢!!
题目链接:BugkuCTF-re-file
下载地址:点击下载
ELF64文件
使用IDA64打开,进入main函数

主要运算代码为
main函数

  v7 = 0;
// fllag = 'flag{hello_player_come_on_hahah}'
// sttr_home = '664e06226625425d562e766e042d422c072c45692d125c7e6552606954646643'
  for ( j = 0; j <= 63; j += 2 )
  {
    v3 = sttr_home[j + 1];
    v13[v7++] = jisuan(sttr_home[j], sttr_home[j + 1]);
  }
  for ( k = 0; k < v7; ++k )                    // v7 = 32
  {
    if ( *flllag != (k ^ v14[k] ^ v13[k]) )     // 进行运算
    {
      printf("Your file is wrong!! try again", v5);
      return 0;
    }
    ++flllag;
  }
}

jisuan()函数

__int64 __fastcall jisuan(char a1, char a2)
{
  int v2; // ebx

  v2 = 16 * yunsuan(a1);
  return v2 + yunsuan(a2);
}

yunsuan()函数

signed __int64 __fastcall yunsuan(char a1)
{
  if ( a1 > 47 && a1 <= 57 )
    return (a1 - 48);
  if ( a1 > 64 && a1 <= 70 )
    return (a1 - 55);
  if ( a1 <= 96 || a1 > 102 )
    return 0xFFFFFFFFLL;
  return (a1 - 87);
}

综合一下求v14,写出c脚本

#include <stdio.h>
int yunsuan(char a1)
{
  if ( a1 > 47 && a1 <= 57 )
    return (a1 - 48);
  if ( a1 > 64 && a1 <= 70 )
    return (a1 - 55);
  if ( a1 <= 96 || a1 > 102 )
    return 0xFFFFFFFFLL;
  return (a1 - 87);
}
int jisuan(char a1,char a2)
{
    int v2;
    v2 = 16*yunsuan(a1);
    return v2+yunsuan(a2);
}
int main()
{
    char v14[33]={0};
    char flllag[] = "flag{hello_player_come_on_hahah}";
    char sttr_home[] = "664e06226625425d562e766e042d422c072c45692d125c7e6552606954646643";
    int v13[64]={0},v7=0,j;
    for(j=0;j<=63;j+=2)
    {
        v13[v7] = jisuan(sttr_home[j],sttr_home[j+1]);
        v7 ++;
    }
    for(j=0;j<32;j++){
        v14[j] = v13[j]^flllag[j]^j;
        printf("%c",v14[j]);
    }
    return 0;
}


再将算出来的字符串转换为md5即为flag
推荐用python写,,,c语言没有像python那样简单的支持md5加密的库,
v14这字符串加密后包上flag{}即为flag

往期回顾

小白学习笔记(0) CG-CTF-re-3 py交易
小白学习笔记(1) BUUCTF-re xor
小白学习笔记(2)BUUCTF-re-新年快乐
小白学习笔记(3) CG-CT re ReadAsm2
小白学习笔记(4)BUUCTF-re-reverse_1
小白学习笔记(5)BUUCTF-re-内涵软件
小白学习笔记(6)BUUCTF-re-SimpleRev
小白学习笔记(7)BUUCTF-re-rsa
小白学习笔记(8)BUUCTF-re-CrackRTF
小白学习笔记(9)BUUCTF-re-刮开有奖
小白学习笔记(10)BUUCTF-re-Youngter-drive
小白学习笔记(11)BUUCTF-re-reverse3
小白学习笔记(12)BugkuCTF-re-游戏过关