首页
社区
课程
招聘
[原创]第六题 追凶者也_pw
发表于: 2018-12-12 00:05 2815

[原创]第六题 追凶者也_pw

2018-12-12 00:05
2815

运行效果。

IDA加载

快速定位错误位置。

无奈之际发现存在另外的线程。

进入跳转的函数,发现别有洞天。4147F0 开始计算是否正确。计算成功后对对话框的提示字符串进行异或计算,生成正确的字符串。

输入参数为字符串指针和长度。下列函数中初始化9字节的内存(3*3)

检查输入个数是否为偶数,按照2个字节一组对4147D0进行操作。操作函数401380。

输入: 413725860

输出: 123456780

进一步分析401380.  A1 取值 wdsa. A2取值1234567890. A1想不想打游戏的前后左右操作。A2的值在4147D0中计算索引位置。该位置分解为横纵俩个坐标(3*3)。分析法发现 w 将当前 位置值向上移动, s 是向下移动,d向右移动, a向左移动。

结果就是完成七巧板控制。0可以与周围任意交换。

所以结论是:d6d8s7s4a1w2a5w6


七巧板应该还有其他的解,程序中已经限定20个字符,10个操作。这可能也就是唯一解了。当然应该也可以爆破。

int __cdecl W_CHECKsub_401040(HWND hDlg)
{
  void *v1; // ST08_4
  signed int i; // [esp+Ch] [ebp-24h]
  signed int v4; // [esp+10h] [ebp-20h]
  CHAR String; // [esp+18h] [ebp-18h]
  int v6; // [esp+19h] [ebp-17h]
  int v7; // [esp+1Dh] [ebp-13h]
  int v8; // [esp+21h] [ebp-Fh]
  int v9; // [esp+25h] [ebp-Bh]
  __int16 v10; // [esp+29h] [ebp-7h]
  char v11; // [esp+2Bh] [ebp-5h]

  strcpy(aTryAgain_0, "try again!");
  strcpy(aFail_0, "fail");
  String = 0;
  v6 = 0;
  v7 = 0;
  v8 = 0;
  v9 = 0;
  v10 = 0;
  v11 = 0;
  GetDlgItemTextA(hDlg, 1001, &String, 20);
  v4 = 0;
  for ( i = 0; i < 20; ++i )
    v4 += *(&String + i);
  if ( v4 > 0 && v4 < 4132 )
  {
    v1 = malloc(v4);
    sub_401020();
    j___free_base(v1);
  }
  return MessageBoxA(0, aTryAgain_0, aFail_0, 0);
}
void __stdcall StartAddress(LPVOID lpThreadParameter)
{
  while ( 1 )
  {
    EnterCriticalSection(&CriticalSection);
    if ( dword_4147FC == 1 )
    {
      sub_401C10();
      dword_4147FC = 0;
    }
    LeaveCriticalSection(&CriticalSection);
  }
}

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2018-12-12 00:06 被scpczc编辑 ,原因:
收藏
免费 3
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//