-
-
[旧帖] [讨论]质疑“OllyDBG 入门系列(二)-字串参考 ”中的两处注释 0.00雪花
-
发表于: 2010-12-22 10:43 948
-
问题1:
这个应该是比较这两个字符串在内存中的地址,而不是字串,如果地址相同则跳,并且地址相同可以通过检测,因为JE跳转,ZF=1,可以通过,其它都是JNE跳转,ZF=0就完蛋了。如果不是人为修改内存,这儿地址是不会相同的,所以不会跳转。看雪老大也说了,这儿可能是虚晃一枪。
问题2:
这儿其实没有把整个字串送入EBX,EBX就四字节,所以只接收了四字节。
后面一系列处理,一共处理了包括'\0'在内的16个字节的数据,这才比较完全部字串。
所以这个地方说法“把我们输入的用户名送到ECX”,“把“Registered User”送到EBX
”并不好,最好加上“后面的处理中”以更准确。
00403B2C /$ 53 PUSH EBX00403B33 |. 39D0 CMP EAX,EDX ; 用“Registered User”和我们输入的用户名作比较
00403B2D |. 56 PUSH ESI
00403B2E |. 57 PUSH EDI
00403B2F |. 89C6 MOV ESI,EAX ; 把EAX内我们输入的用户名送到 ESI
00403B31 |. 89D7 MOV EDI,EDX ; 把EDX内的数据“Registered User”送到EDI
00403B33 |. 39D0 CMP EAX,EDX ; 用“Registered User”和我们输入的用户名作比较
00403B35 |. 0F84 8F000000 JE CrackMe3.00403BCA ; 相同则跳
这个应该是比较这两个字符串在内存中的地址,而不是字串,如果地址相同则跳,并且地址相同可以通过检测,因为JE跳转,ZF=1,可以通过,其它都是JNE跳转,ZF=0就完蛋了。如果不是人为修改内存,这儿地址是不会相同的,所以不会跳转。看雪老大也说了,这儿可能是虚晃一枪。
问题2:
00403B55 |> 8B0E MOV ECX,DWORD PTR DS:[ESI] ; 把我们输入的用户名送到ECX
00403B57 |. 8B1F MOV EBX,DWORD PTR DS:[EDI] ; 把“Registered User”送到EBX
00403B59 |. 39D9 CMP ECX,EBX ; 比较
00403B5B |. 75 58 JNZ SHORT CrackMe3.00403BB5 ; 不等则完蛋
这儿其实没有把整个字串送入EBX,EBX就四字节,所以只接收了四字节。
后面一系列处理,一共处理了包括'\0'在内的16个字节的数据,这才比较完全部字串。
所以这个地方说法“把我们输入的用户名送到ECX”,“把“Registered User”送到EBX
”并不好,最好加上“后面的处理中”以更准确。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
看原图
赞赏
雪币:
留言: