冥界3大法王 发表于 2020-6-10 08:19

看完一个楼主的贴,有5个不明白的地方,特来求教

本帖最后由 冥界3大法王 于 2020-6-10 14:50 编辑

https://www.chinapyg.com/forum.php?mod=viewthread&tid=137258&page=1&extra=#pid2685206

@jim66xy
问题一1:
0042745F|.48            DEC EAX                            ;Switch (cases 1..4)
条件1-4是从1开始算的吧 ?但好像和下面的又有点对不上啊。
我记的Delphi编程case 从0开始的
那实现的跳转就该是
条件0
条件1
条件2
条件3
条件4


问题2:
0042745F|.48            DEC EAX                            ;==》即这里(为什么判断由eax的值决定 呢?; Switch (cases 1..4)
是因为右面的这个eax,还是因为 右面OD给解出来的注释

很多,像下面这样的
00427580|> \0FB746 76   MOVZX EAX,WORD PTR DS: ;Case 1 of switch 0042745F



问题3 Switch (cases X...Y)
OD中有很多解析出来的这个注释,有没有啥更高效的方法马上看出哪个跟哪个条件属于一家子?

问题4:
00427584|.83E8 00       SUB EAX,0x0                        ;   Switch (cases 0..1)
看这行,上面给出的这样的注释信息 ,意思是条件0 和 条件1 都能实现抵达,是这么理解吧。


问题5:
Switch (cases 这东西的有效范围有 代码段落首到尾 没错吧?


问题6:
修改wordptr ds:的值为2   为啥知道修改为2 ?
      word ptr ds:的值为0    为啥知道修改为0 ? 这个 2和 0 是不是case 的编号? 还是试出来的?

kuqideyanlei 发表于 2020-6-10 09:32

第一个问题:可能编写的人就是从1开始的呢,,或者说OD反汇编的时候默认是从1开始的,,(小白的理解,可能有误)
第二个问题:可能是在多次调试的时候发现的
第三个问题:我也不会,跳过
第四个问题:我和你的理解是一样的
第五个问题:switch也是一种循环,,应该也是一段代码吧
第六个问题:可能和第二个一样吧
以上为本小白的见解,如果错误,请大佬谅解

玖公子 发表于 2020-6-10 11:24

看不到那篇帖子,不过不影响让我来水一贴{:301_987:}

问题一:可能OD是这么识别的
问题二:eax可能保存case最大的那个编号
问题三:不知道
问题四:我也是这样认为的,我认为case是匹配到一个,后面都会执行,你看看你那下面是否有jmp语句,一般成功匹配一个后break;
问题五:代码的有效范围我觉得最简单的就是看包含它最近的一对花括号,认同你的看法
问题六:看不到原贴,这里不便评论,应该是作者分析出来的,是不是这两个语句一个原本是0,另一个是2,别人找到了这个开关,这里只是把它颠倒过来了?

冥界3大法王 发表于 2020-6-10 14:51

@玖公子
已更新图片 ,快来补充

玖公子 发表于 2020-6-10 14:58

冥界3大法王 发表于 2020-6-10 14:51
@玖公子
已更新图片 ,快来补充

不是,法王大佬,这个忙真帮不了,我就在水区混分的,技术啥的咋真不懂啊!
我只学过一点java皮毛,没搞过逆向{:301_1008:}
页: [1]
查看完整版本: 看完一个楼主的贴,有5个不明白的地方,特来求教