- 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 编辑 ] |
|