switch 逆向分析

  • 当switch的分支不多于3个的时候,和if ..else.类似
00401038   mov         eax,dword ptr [ebp+8]
0040103B   mov         dword ptr [ebp-4],eax
0040103E   cmp         dword ptr [ebp-4],0
00401042   je          function+32h (00401052)
00401044   cmp         dword ptr [ebp-4],2
00401048   je          function+41h (00401061)
0040104A   cmp         dword ptr [ebp-4],3
0040104E   je          function+50h (00401070)
00401050   jmp         function+5Fh (0040107f)
  • 分支多于3个并连续,生成一张大表
00401038   mov         eax,dword ptr [ebp+8]
0040103B   mov         dword ptr [ebp-4],eax
0040103E   mov         ecx,dword ptr [ebp-4]
00401041   sub         ecx,101h
00401047   mov         dword ptr [ebp-4],ecx
0040104A   cmp         dword ptr [ebp-4],4
0040104E   ja          $L541+0Fh (004010a5)
00401050   mov         edx,dword ptr [ebp-4]
00401053   jmp         dword ptr [edx*4+4010C3h]
  • sub ecx,101h 101为最小分支值
  • cmp dword ptr [ebp-4],4 4为最大的差值
  • jmp dword ptr [edx*4+4010C3h] 指向大表 edx是与最小值得差值,用他来表示位于表的第几项
    大表:
    大表

  • 如果分支中的值相差较大会生成小表和大表

00401038   mov         eax,dword ptr [ebp+8]
0040103B   mov         dword ptr [ebp-4],eax
0040103E   mov         ecx,dword ptr [ebp-4]
00401041   sub         ecx,101h
00401047   mov         dword ptr [ebp-4],ecx
0040104A   cmp         dword ptr [ebp-4],0Fh
0040104E   ja          $L541+0Fh (004010ad)
00401050   mov         eax,dword ptr [ebp-4]
00401053   xor         edx,edx
00401055   mov         dl,byte ptr  (004010e3)[eax]
0040105B   jmp         dword ptr [edx*4+4010CBh]
  • mov eax,dword ptr [ebp-4] eax里是差值即第几项
  • mov dl,byte ptr (004010e3)[eax] 4010e3.是小表!
    小表
    由这张表和反汇编可以推断出分支的最小值是101h

  • case 101——-大表的第0项

  • 102 103 104 105 106都没有 ——–指向大表的第5项 default
  • case 107——-大表的第1项
  • case 108——-大表的第2项
  • case 109——-大表的第3项
  • 10a 10b 10c 10e 10f 没有——–指向大表的第5项 default
  • case 110——-大表的第4项
    下面查看大表大表
    可以看到大表下面紧跟着小表
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值