我的问题估计也是许多新手朋友所不能理解的问题,希望广大高手解决下我们的困惑。
比如我们拿ID为108257的贴子为例,我摘来一段代码。
00495DAF |. E8 4F8F0400 call 004DED03
00495DB4 |> 66:8B06 /mov ax, word ptr [esi]
00495DB7 |. 66:3D 2000 |cmp ax, 20 ; 第一个字符是否空格
00495DBB |. 74 06 |je short 00495DC3
00495DBD |. 66:3D 0900 |cmp ax, 9 ; 第一个字符是否句号
00495DC1 |. 75 05 |jnz short 00495DC8
00495DC3 |> 83C6 02 |add esi, 2
00495DC6 |.^ EB EC \jmp short 00495DB4
00495DC8 |> 56 push esi
00495DC9 |. E8 23550300 call 004CB2F1 ; 验证用户名中有否0
00495DCE >|. 8B4C24 18 mov ecx, dword ptr [esp+18]
00495DD2 |. 83C4 04 add esp, 4
00495DD5 |. 85C0 test eax, eax ; 验证用户名长度是否为0
00495DD7 |. 8901 mov dword ptr [ecx], eax
00495DD9 |. 7E 1A jle short 00495DF5
00495DDB |> 8B01 /mov eax, dword ptr [ecx]
00495DDD |. 66:8B5446 FE |mov dx, word ptr [esi+eax*2-2]
……
……
00495F60 /$ 81EC 34020000 sub esp, 234
00495F66 |. 53 push ebx
00495F67 |. 8B9C24 3C0200>mov ebx, dword ptr [esp+23C] ; 取用户名到EDX
00495F6E |. 56 push esi
00495F6F |. 57 push edi
00495F70 |. 53 push ebx
00495F71 >|. E8 7B530300 call 004CB2F1 ; 验证用户名字符中是否有0,EAX返回用户名长度00495F76 |. 8BF0 mov esi, eax
00495F78 |. 83C4 04 add esp, 4
00495F7B |. 85F6 test esi, esi ; 又一次验证用户名是否输
入为空
====================
标红的位置是问题所在。比如第一出标红,破解者怎么知道这句的意思是说“ 第一个字符是否空格”。
还有第三处,
就一个mov ebx, dword ptr [esp+23C]
破解者怎么知道这句的意思是“取用户名到EDX”。
怎么看出来dword ptr [esp+23C] 是用户名?
为什么这里的esp+23C就成了用户名?
貌似这句注释有问题,应该是放到ebx才对吧。
希望大家帮忙解答下,
如果可以,请各位高手带带小弟,让小弟也能享受到软件调试的乐趣!感谢
QQ:5531574
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)