170927 逆向-Reversing.kr(Position)

本文详细介绍了对Reversing.kr的Position挑战的逆向分析过程,涉及程序校验Name和Serial的算法。通过查找关键函数sub_401740,解析了Name转化为Serial的步骤,包括ASCII加常数、位操作和特定顺序相加。最终,通过数学解题和编写脚本,成功找到符合要求的Name,从而解出Correct答案。
摘要由CSDN通过智能技术生成

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

Position

惯例先查壳
读Readme可以知道是一个检查Name-Serial的程序,我们需要找到对应Serial为”76876-77776”的Name

由于是个GUI程序,只能依靠API或者字符串来定位事件
IDA中没有找到对应的字符串,很是神奇
在OD中搜索却正常能搜索到,于是定位到核心事件函数sub_401740

由于函数太长就不放全部的了,基本上是同一个结构:


  ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>(&Name);
  v1 = 0;
  v64 = 0;
  ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>(&Serial);
  ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t>>>(&v63);
  LOBYTE(v64) = 2;
  CWnd::GetWindowTextW(a1 + 304, &Name);        // Name
  if ( *(_DWORD *)(Name - 12) == 4 )            // Name长度为4
  {
    i = 0;
    while ( (unsigned __int16)ATL::CSimpleStringT<wchar_t,1>::GetAt(&Name, i) >= 0x61u
         && (unsigned __int16)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值