谁能帮我分析一下算法?
密码长度是35位,十六位制是23.先是验证位数.正确后进去下面的循环.密码验证.请帮我分析一下.谢谢我是输入01234567890---等35位,如下解释:
004024F4 > /8B4C24 10 MOV ECX,DWORD PTR SS: 将35位密码移至ECX
004024F8 . |8A1C0E MOV BL,BYTE PTR DS: 取出第一位,在BL中,即30=十进位制0.
004024FB . |0FBED3 MOVSX EDX,BL
004024FE . |52 PUSH EDX ; /c
004024FF . |FF15 C0624000 CALL DWORD PTR DS:[<&MSVCRT.isdigit>] ; \isdigit
00402505 . |83C4 04 ADD ESP,4
00402508 . |85C0 TEST EAX,EAX
0040250A . |75 14 JNZ SHORT wx.00402520
0040250C . |80FB 61 CMP BL,61
0040250F . |7C 05 JL SHORT wx.00402516
00402511 . |80FB 7A CMP BL,7A
00402514 . |7E 0A JLE SHORT wx.00402520
00402516 > |80FB 41 CMP BL,41
00402519 . |7C 6F JL SHORT wx.0040258A
0040251B . |80FB 5A CMP BL,5A
0040251E . |7F 6A JG SHORT wx.0040258A
00402520 > |46 INC ESI
00402521 . |3BF5 CMP ESI,EBP
00402523 .^\7C CF JL SHORT wx.004024F4 是不是明码比较啊? /:012 /:001 凭这几行字符就能下结论的估计是神仙了/:018 这是一种密码计算方法啊.是单个字符之间的比较.可以在后补充一下说明 可以解释一下流程.有些句子不懂.
[ 本帖最后由 bjianyu 于 2008-8-25 16:35 编辑 ] 004024F4 > /8B4C24 10 MOV ECX,DWORD PTR SS: 将35位密码移至ECX
004024F8 . |8A1C0E MOV BL,BYTE PTR DS: 取出第一位,在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 编辑 ] 学会提问的技巧 至少要让别人看懂提问的内容是什么 原帖由 傻人有傻福 于 2008-8-25 17:52 发表 https://www.chinapyg.com/images/common/back.gif
004024F4 > /8B4C24 10 MOV ECX,DWORD PTR SS: 将35位密码移至ECX
004024F8 . |8A1C0E MOV BL,BYTE PTR DS: 取出第一位,在BL中,即30=十进位制
0.
004024FB . |0FBED3 ...
非常感谢.要的就是这个意思. 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 ;大于则跳
这里的跳转看跳去哪里才知道什么才符合软件类型!~~~~~~
[ 本帖最后由 小黑冰 于 2008-8-30 20:55 编辑 ] 额楼上几位好厉害啊佩服啊
页:
[1]