- UID
 - 29646
 
 注册时间2007-3-4
阅读权限30
最后登录1970-1-1
龙战于野 
  
 
 
 
该用户从未签到  
 | 
 
 
发表于 2008-8-25 17:52:40
|
显示全部楼层
 
 
 
004024F4   > /8B4C24 10     MOV ECX,DWORD PTR SS:[ESP+10]   将35位密码移至ECX 
004024F8   . |8A1C0E        MOV BL,BYTE PTR DS:[ESI+ECX]    取出第一位,在BL中,即30=十进位制 
 
0. 
004024FB   . |0FBED3        MOVSX EDX,BL                             ;把BL的值放到EDX 
004024FE   . |52            PUSH EDX                          ; EDX值压栈,传递参数吧 
004024FF   . |FF15 C0624000 CALL DWORD PTR DS:[<&MSVCRT.isdigit>] ; 校验EDX是否为数值 
00402505   . |83C4 04       ADD ESP,4                             ; 恢复CALL之前的ESP 
00402508   . |85C0          TEST EAX,EAX                          ;比较EAX(看CALL的返回值) 
0040250A   . |75 14         JNZ SHORT wx.00402520                 ;不等则跳 
0040250C   . |80FB 61       CMP BL,61                             ;ASCII:61=a 
0040250F   . |7C 05         JL SHORT wx.00402516                  ;小于则跳 
00402511   . |80FB 7A       CMP BL,7A                             ;ASCII:7A=z 
00402514   . |7E 0A         JLE SHORT wx.00402520                 ;小于等于则跳 
00402516   > |80FB 41       CMP BL,41                             ;ASCII:41=A 
00402519   . |7C 6F         JL SHORT wx.0040258A                  ;小于则跳 
0040251B   . |80FB 5A       CMP BL,5A                             ;ASCII:5A=Z 
0040251E   . |7F 6A         JG SHORT wx.0040258A                  ;大于则跳 
00402520   > |46            INC ESI                        ;ESI加一(应该是指向下一位密码) 
00402521   . |3BF5          CMP ESI,EBP                    ;ESI和EBP比较(EBP应该是密码位数) 
00402523   .^\7C CF         JL SHORT wx.004024F4           ;小于则跳(应该是执行这个循环的过程,如果每位都比较过了,那么ESI应该和EBP都是35,JL这个跳转就不成立了,循环结束) 
 
稍微看了一下,这段代码的意思大概是说:按位循环判断密码是不是数字,那个CALL的判断如果是数字的话,EAX应该是会返回1,然后JNZ就跳向INC ESI这条语句,密码移向下一位,接着比较是否每一位都比较完了,未比较完则继续循环。如果不是数字的话,就要判断这位上的密码是落在哪个范围内的,a-z或是A-Z或是其他地方,要根据它跳转跳到哪里再来看吧(这段代码应该是算法的最前面的一部分,后面应该还有一堆的代码) 
算法不太懂,楼主稍微看下吧 可能我想的也不对,等高手来看看吧 
 
[ 本帖最后由 傻人有傻福 于 2008-8-25 18:05 编辑 ] |   
 
 
 
 |