能力值:
( LV2,RANK:10 )
676 楼
学习分享,楼主辛苦了!!!
能力值:
( LV2,RANK:10 )
677 楼
非常详细,非常有用。
能力值:
( LV2,RANK:10 )
678 楼
跟着这里一步一步学 结束了以后还是不会
能力值:
( LV4,RANK:50 )
679 楼
又来看一遍哈哈
能力值:
( LV2,RANK:10 )
680 楼
真是太谢谢LZ了!
能力值:
( LV2,RANK:10 )
681 楼
看了,给楼主提个小错误。不知道其他人发现没有。
00403B33 |. 39D0 CMP EAX,EDX ; 用“Registered User”和我们输入的用户名作比较
这块应该是比较两个字符串地址,不是比较用户名。这个比较基本都是不相同的。
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 ; 不等则完蛋
这块也有点问题,其实比较字符串是以下的代码,
00403B55 |> /8B0E /mov ecx, dword ptr [esi]
00403B57 |. |8B1F |mov ebx, dword ptr [edi]
00403B59 |. |39D9 |cmp ecx, ebx
00403B5B |. |75 58 |jnz short 00403BB5
00403B5D |. |4A |dec edx
00403B5E |. |74 15 |je short 00403B75
00403B60 |. |8B4E 04 |mov ecx, dword ptr [esi+4]
00403B63 |. |8B5F 04 |mov ebx, dword ptr [edi+4]
00403B66 |. |39D9 |cmp ecx, ebx
00403B68 |. |75 4B |jnz short 00403BB5
00403B6A |. |83C6 08 |add esi, 8
00403B6D |. |83C7 08 |add edi, 8
00403B70 |. |4A |dec edx
00403B71 |.^\75 E2 \jnz short 00403B55
00403B73 |. EB 06 jmp short 00403B7B
应该是一个循环了。
能力值:
( LV2,RANK:10 )
682 楼
还是十分感谢楼主,你这个系列的东西十分好。我已经看了好几遍了,希望你能把这个系列继续写下去,强烈支持你!
能力值:
( LV2,RANK:10 )
683 楼
支持支持....我也是新手.
能力值:
( LV2,RANK:10 )
684 楼
还好 原版在此 看了一本编译的ebook,图片小的看不清楚
能力值:
( LV2,RANK:10 )
685 楼
谢谢。是你教会了我用OD
能力值:
( LV2,RANK:10 )
686 楼
不错,不错
嘎,我是新手.不过这里我有一点疑问??
"就是那个断点为什么要设在那里?"
设在其它地方不行吗?
能力值:
( LV2,RANK:10 )
687 楼
详细,我刚进都可以理解了,呵呵!谢了,louzhu!
能力值:
( LV2,RANK:10 )
688 楼
00403B43 |. 8B46 FC MOV EAX,DWORD PTR DS:[ESI-4] ; 用户名长度送EAX
00403B46 |. 8B57 FC MOV EDX,DWORD PTR DS:[EDI-4] ; “Registered User”字串的长度送EDX
00403B49 |. 29D0 SUB EAX,EDX ; 把用户名长度和“Registered User”字串长度相减
00403B4B |. 77 02 JA SHORT CrackMe3.00403B4F ; 用户名长度大于“Registered User”长度则跳
00403B4D |. 01C2 ADD EDX,EAX ; 把减后值与“Registered User”长度相加,即用户名长度
00403B4F |> 52 PUSH EDX
00403B50 |. C1EA 02 SHR EDX,2 ; 用户名长度值右移2位,这里相当于长度除以4
00403B53 |. 74 26 JE SHORT CrackMe3.00403B7B ; 上面的指令及这条指令就是判断用户名长度最少不能低于4
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 ; 不等则完蛋,
为什么用户名要大于4?说说哦,我很低的,请教高手。
还有00403B50 |. C1EA 02 SHR EDX,2 ; 用户名长度值右移2位,这里相当于长度除以4,这里又是为什么要相当于除以4呢?xiexie,教教我。好吗?
能力值:
( LV2,RANK:10 )
689 楼
做了又不记得
我多练他几次
能力值:
( LV2,RANK:10 )
690 楼
坚决支持,下下来,慢慢看
能力值:
( LV2,RANK:10 )
691 楼
我来回答688楼的问题。
1:问题:用户名长度值右移2位,这里相当于长度除以4,这里又是为什么要相当于除以4呢?
回答:用户名的数据在计算机中是以2进制保存的(其实所有数据都是以2进制保存的),在2进制中,数据右移1位相当与除以2,右移2位相当与除以2*2,依次类推,右移N位相当与除以2的N次方,左移刚好相反,左移N位相当与乘以2的N次方。举例数据8(00001000),右移1位后变成4(00000100)。
2:问题:为什么用户名要大于4?
回答:看这行代码 JE SHORT CrackMe3.00403B7B
JE是相等则跳转,判断的是ZF(你不知道ZF,晕,那我就没法解释了)是否等于1,等于1时就表示计算结果为0 ,当用户名长度小于4时,除以4那结果就为0,设置状态ZF=1。这时就跳转了。所以被除数必须大于等于4。
呵呵。解释的不知道你明白不?
能力值:
( LV2,RANK:10 )
692 楼
非常感谢楼主,支持写下去。
能力值:
( LV2,RANK:10 )
693 楼
好东西啊 很适合俺们这种初学者
能力值:
( LV2,RANK:10 )
694 楼
看不懂怎么办。
能力值:
( LV2,RANK:10 )
695 楼
学习了!谢谢LZ
能力值:
( LV2,RANK:10 )
696 楼
这个就已经挺复杂了,看了好久才明白
能力值:
( LV2,RANK:10 )
697 楼
一步一步跟着学!
能力值:
( LV2,RANK:10 )
698 楼
支持 你们 啊
能力值:
( LV2,RANK:10 )
699 楼
00403B43 |. 8B46 FC MOV EAX,DWORD PTR DS:[ESI-4] ; 用户名长度送EAX
00403B46 |. 8B57 FC MOV EDX,DWORD PTR DS:[EDI-4] ; “Registered User”字串的长度送EDX
00403B49 |. 29D0 SUB EAX,EDX ; 把用户名长度和“Registered User”字串长度相减
00403B4B |. 77 02 JA SHORT CrackMe3.00403B4F ; 用户名长度大于“Registered User”长度则跳
我是超级菜鸟 现在刚学完汇编!!请问ja的跳转条件不是cf和zf都为0吗?
为什么是 用户名长度大于“Registered User”长度则跳呢
能力值:
( LV2,RANK:10 )
700 楼
厉害!我不能不佩服!我要好好学习数学!(*^__^*) 嘻嘻……