170925 逆向-Reversing.kr(Replace)

1625-5 王子昂 总结《2017年9月25日》 【连续第358天总结】
A. Reversing.kr-Replace
B.

Replace

先查一波壳,还好没有
运行,是一个GUI程序,下面Label框中显示Wrong!,说明没法找Msgbox了呢
随便输入后点Check,就停止运行了……嗯?这么暴力的,输错就GG吗

惯例拖入IDA,WinMain中只有构造窗口的DialogBoxParamA函数,回调函数使用了DialogFunc

搜索字符串发现Correct!在DialogFunc中有引用,遂查看代码并反编译:

// write access to const memory has been detected, the output may be wrong!
BOOL __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4)
{
  BOOL result; // eax@2

  if ( a2 == 273 )
  {
    if ( (unsigned __int16)a3 == 2 )
    {
      EndDialog(hDlg, 2);
      result = 1;
    }
    else if ( (unsigned __int16)a3 == 1003 )
    {
      input = GetDlgItemInt(hDlg, 1002, 0, 0);
      sub_40466F();
      ((void (__cdecl *)(void *))loc_404689)(&loc_40469F);
      *(_DWORD *)sub_40466F = -1013972794;
      sub_40466F();
      sub_40466F();
      *(_DWORD *)sub_40466F = 1768;
      result = 1;
    }
    else
    {
      result = 0;
    }
  }
  else
  {
    result = 0;
  }
  return result;
}

查了一波API手册,发现回调函数其实叫DialogProc,参数说明只能知道a2为指定消息uMsg,a3为指定消息的其他信息wParam

想研究一波前面判断的具体信息,但是没找到相关手册说明uMsg的对应表

内层循环体的GetDlgItemInt很明显就是获取对话框的值
输入了一下试试,发现只能接受数字,字母和符号都是无法输入的

在OD中下断DialogFunc,发现窗口开启状态下会不停地断到,说明消息是不断传送的。似乎是当焦点在窗口上方时a2=273,点击按钮时a3=3。

参数不搞明白倒是不怎么影响啦,在内层循环体下断可以在点击按钮后断到

将输入送入0x4084d0后就call 0040466F了
这个call是一个很关键很有趣的点,需要慢慢地仔细分析
首先回忆一下汇编中函数调用的相关知识
当call某处时,首先将下一条指令的地

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值