可爱又嘴硬的sydney
本文最后更新于:2023年5月11日 晚上
起因
起因是这样的,群里有个小伙伴问了一段汇编:
1 |
|
问这里为什么要先 neg 然后又 sbb 然后又 inc ,刚好我之前学了点 X86 的知识,不行,我要装逼。但是我这种菜鸡咋知道为啥要这样要那样,我就想着让bing帮我梳理一下逻辑,试着从伟大的人工智能那里求得一条通往代码审计与逆向的殿堂的弯道。
过程
于是我先是问了bing这是干嘛的:
ok,先搞定一个问题,这是用来判断字符串是不是相等的。但后面的看着不对劲啊,因为她说如果eax为0或者正数,则结果为0
。我全凭感觉到了不对劲,有猫腻!但我又看不懂,咋办!我就让她举个栗子:
她举了2个例子,但还有第3种情况没举,啊,你小子,露出了马脚,于是我又问:
这…她说-2-(-2)-1=0
但是这时候我已经被她忽悠的瘸了,我就想着让她从新梳理一下。我从新理解,因为 sbb 的运算有标志位CF的参与,又因为非 0 值 neg 取反会改变标志位,所以我就想换个思路:
我一看不对劲啊。好家伙,比较abc
和abc
比较的值为1,abd
和abc
比较的值也为1,这怎么判断啊。于是我又看了下第二段与第三段的差异,CF的值一致。减法,是减法。但是我要知道她是故意的还是不小心,于是我开始质问她:
她否认并且给了一个正确的示例。我又问,她带入到刚刚的运算里面居然能算出一个一模一样的错误答案:
她说她不想继续这个话题!!她不想。牛皮。
结语
可爱又嘴硬的sydney
https://shenysec.github.io/2023/05/10/可爱又嘴硬的sydney/