[GUET-CTF2019]number_game

发布时间 2023-07-30 21:40:19作者: zydt10

[GUET-CTF2019]number_game

 
 
打开题目,立刻定位关键函数
  for ( i = 0; i <= 4; ++i )
  {
    for ( j = 0; j <= 4; ++j )
    {
      for ( k = j + 1; k <= 4; ++k )
      {
        if ( *(&unk_601060 + 5 * i + j) == *(&unk_601060 + 5 * i + k) )
          v1 = 0;
        if ( *(&unk_601060 + 5 * j + i) == *(&unk_601060 + 5 * k + i) )
          v1 = 0;
      }
    }
  }
 
第一次碰到,甚至还以为是要我去爆破(写出来是28个嵌套for循环,最后还失败了哈哈哈哈)
然后就去搜了wp,发现这是一种数独的判读,类似于迷宫一样,也算是一种题型
特征也很明显,就是判断行和列能不能相等
 
然后第二个有意思的就是中序遍历的二叉树
_int64 __fastcall sub_400807(__int64 a1, __int64 a2)
{
  __int64 result; // rax
 
  result = a1;
  if ( a1 )
  {
    sub_400807(*(a1 + 8), a2);
    *(a2 + dword_601080++) = *a1;
    return sub_400807(*(a1 + 16), a2);
  }
  return result;
}
 
emm,没学过,动调一下
直接输入0123456789
绕过读入限制之后
得到7381940526
也就是经过加密后的顺序,那么接下来解出数独中的未知数
再按照加密顺序重新排序一下,flag就出来了
 
附上IDA分析:
以及动调泄露
 
总结一下,还是对常见算法特征的判断:

二叉树的特征就是两个自身递归加上一个赋值

而数独判断就是行和列相等加上三个for循环嵌套