首页
社区
课程
招聘
[原创]2019 Q2 第一题 神秘来信 分析
发表于: 2019-6-23 12:40 2241

[原创]2019 Q2 第一题 神秘来信 分析

2019-6-23 12:40
2241

签到题,F5一下。
输入长度为6,最后3位为353,前3位的和为149。

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int val; // esi
  unsigned int v4; // kr00_4
  unsigned int i; // ecx
  unsigned __int8 input[6]; // [esp+10h] [ebp-3Ch]
  CPPEH_RECORD ms_exc; // [esp+34h] [ebp-18h]

  val = 0;
  printf((int)"请输入序列号:\n");
  scanf("%s", input);
  v4 = strlen((const char *)input);
  if ( v4 < 7 && input[5] == '3' && input[4] == '5' && input[3] == '3' && input[2] + input[1] + input[0] == 149 )
  {
    i = 0;
    if ( v4 )
    {
      do
        val = input[i++] + 16 * val - 48;
      while ( i < v4 );
    }
    ms_exc.registration.TryLevel = 0;
    printf((int)"error!\n");
    while ( 1 )
      ;
  }
  printf((int)"error\n");
  return 0;
}

F5的代码不完整,直接看汇编
函数开头设置异常处理函数:

.text:00401260                 push    ebp
.text:00401261                 mov     ebp, esp
.text:00401263                 push    0FFFFFFFEh
.text:00401265                 push    offset stru_41CC98
.text:0040126A                 push    offset __except_handler4
.text:0040126F                 mov     eax, large fs:0
.text:00401275                 push    eax

处理函数显示"success",所以需要产生异常

.rdata:0041CC98 stru_41CC98     dd 0FFFFFFE4h           ; GSCookieOffset
.rdata:0041CC98                                         ; DATA XREF: _main+5↑o
.rdata:0041CC98                 dd 0                    ; GSCookieXOROffset ; SEH scope table for function 401260
.rdata:0041CC98                 dd 0FFFFFFB4h           ; EHCookieOffset
.rdata:0041CC98                 dd 0                    ; EHCookieXOROffset
.rdata:0041CC98                 dd 0FFFFFFFEh           ; ScopeRecord.EnclosingLevel
.rdata:0041CC98                 dd offset loc_401373    ; ScopeRecord.FilterFunc
.rdata:0041CC98                 dd offset sucesss       ; ScopeRecord.HandlerFunc

6位数字转化为16进制数:

.text:00401330                 movzx   eax, [ebp+ecx+input]
.text:00401335                 shl     esi, 4
.text:00401338                 add     esi, 0FFFFFFD0h
.text:0040133B                 add     esi, eax
.text:0040133D                 inc     ecx
.text:0040133E                 cmp     ec

16进制数与地址0x401353相减,作为除数,让除数等于0就能产生异常

.text:0040134E                 call    loc_401354
.text:0040134E ; ---------------------------------------------------------------------------
.text:00401353                 db 0EBh
.text:00401354 ; ---------------------------------------------------------------------------
.text:00401354
.text:00401354 loc_401354:                             ; CODE XREF: _main+EE↑j
.text:00401354                 pop     eax
.text:00401355                 sub     eax, 0
.text:00401358                 sub     esi, eax
.text:0040135A                 div     esi

故key为401353


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-6-23 13:07 被mratlatsn编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//