首页
社区
课程
招聘
[旧帖] [求助]请教 0.00雪花
发表于: 2008-2-21 21:04 4306

[旧帖] [求助]请教 0.00雪花

2008-2-21 21:04
4306
:0040120B C8000000                enter 0000, 00
:0040120F 53                      push ebx
:00401210 52                      push edx
:00401211 33C0                    xor eax, eax
:00401213 B8A6204000              mov eax, 004020A6        ----把输入的密码放入EAX
:00401218 803800                  cmp byte ptr [eax], 00
:0040121B 7460                    je 0040127D

0040127D  |> \33C0          XOR EAX,EAX
0040127F  |.  5A            POP EDX
00401280  |.  5B            POP EBX
00401281  |.  C9            LEAVE

我想问一下je 0040127D是不是验证没有输入密码?如果是的话,这句话为什么能验证?eax是32位寄存器,能存4个数字,而输入的是123456六位数字,我觉得不能验证。要么eax存的是指向123456的指针,但是仅验证指针为00,我觉得也不能说明00地址里存的是00,即没输入密码。
高手见笑了,请指教!
原题是49eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4m8W2k6r3W2&6i4K6u0W2j5$3!0E0i4K6u0r3N6s2g2@1L8%4u0A6j5h3I4Q4x3V1k6U0K9r3q4H3y4W2)9J5c8V1y4Z5j5i4l9$3i4K6u0V1x3g2)9J5k6o6p5I4i4K6u0W2K9s2c8E0i4@1f1@1i4@1t1^5i4@1q4p5i4@1f1%4i4@1q4o6i4@1q4o6i4@1f1@1i4@1u0m8i4K6S2o6i4@1f1&6i4@1p5J5i4K6V1^5i4@1f1K6i4K6R3H3i4K6R3J5

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
2
:00401213 B8A6204000              mov eax, 004020A6        ----把输入的密码放入EAX
:00401218 803800                  cmp byte ptr [eax], 00
:0040121B 7460                    je 0040127D

这里的Eax显然是个地址,[eax]是取地址里的内容。
cmp byte ptr [eax],00 就是取[eax]中的第一个字节(也就是密码的第一位)与00比较。
如果第一位就是字符结束符0的话,显然密码为空。
2008-2-21 21:11
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学到两点:
1.[eax]是表示eax地址里存的数据
2.0表示字符结束符,字符0应该是30
2008-2-21 21:24
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
4
学到两点:
1.[eax]是表示eax地址里存的数据
2.0表示字符结束符,字符0应该是31


Pointer to a null-terminated string <- 这是你在MSDN里会经常看到的一句话
如字符串 “123” 在内存中是 31 32 33 00 <- 这个00是不能少的,它告诉我们这个字符串到这里就结束了(注:Unicode的除外) 
2008-2-21 21:34
0
游客
登录 | 注册 方可回帖
返回