实际上它也不用pj在作者网上已经有密码了,
字典II 算法分析
。写此文,只是看看它的注册方式而已。字典II是一个共享软件,如果您需要使用它的全部功能,测需要进行注册。这种注册是免费的。您只要发一封标题为“注册”的电子邮件到作者信箱中即可收到以同样方式发回的注册码。为了给作者少添点麻烦,还是自己解决吧。
作用:生成字典档文件。
1、输入用户名和注册码后,启动TRW2000,设中断BPX HMEMCPY 再回到程序中,按确定,拦截成功。
2、按F10直到第二次回到程序中是慢走。看到如下程序。
0167:00401BC6 CALL 00420016
0167:00401BCB MOV EAX[EBP+78]
0167:00401BCE LEA ESI[EBP+5C]
0167:00401BD1 PUSH EBX
0167:00401BD2 PUSH BYTE -01
0167:00401BD4 PUSH DWORD B1
0167:00401BD9 PUSH EAX
0167:00401BDA CALL EDI
0167:00401BDC MOV ECX[ESI+1C]
0167:00401BDF PUSH EBX
0167:00401BE0 PUSH EBX
0167:00401BE1 PUSH DWORD B7
0167:00401BE6 PUSH ECX
0167:00401BE7 CALL EDI
0167:00401BE9 LEA EDX[ESP+84]
0167:00401BF0 PUSH BYTE +64
0167:00401BF2 PUSH EDX
0167:00401BF3 MOV ECXESI
0167:00401BF5 CALL 00420016
0167:00401BFA LEA EDI[ESP+20]
0167:00401BFE OR ECXBYTE -01
0167:00401C01 XOR EAXEAX
0167:00401C03 REPNE SCASB
0167:00401C05 NOT ECX
0167:00401C07 DEC ECX
0167:00401C08 JZ NEAR 00401E24
0167:00401C0E LEA EDI[ESP+84]
0167:00401C15 OR ECXBYTE -01
0167:00401C18 REPNE SCASB
0167:00401C1A NOT ECX
0167:00401C1C DEC ECX
0167:00401C1D JZ NEAR 00401E24
0167:00401C23 LEA EDI[ESP+20]
0167:00401C27 OR ECXBYTE -01
0167:00401C2A XOR ESIESI
0167:00401C2C REPNE SCASB
0167:00401C2E NOT ECX
0167:00401C30 DEC ECX
0167:00401C31 JZ 00401CAC
上面的代码是什么意思,你自己看吧。重点是下文。
0167:00401C33 MOVSX EDIBYTE [ESP+ESI+20]取用户名中的一个字节,
0167:00401C38 MOV EAXEDI做为被除数
0167:00401C3A MOV ECX0A除数
0167:00401C3F CDQ
0167:00401C40 IDIV ECX
0167:00401C42 MOV ECXEDX余数传给ECX。
0167:00401C44 AND EDX80000001进行与运算,
0167:00401C4A JNS 00401C51不为负就跳。
0167:00401C4C DEC EDX
0167:00401C4D OR EDXBYTE -02
0167:00401C50 INC EDX
0167:00401C51 JNZ 00401C69不为零就跳
0167:00401C53 MOV EAXEDI否则重新赋值再次进行计算。
0167:00401C55 MOV ECX1A此次除数被换成1A,
电脑资料
《字典II 算法分析》(http://meiwen.anslib.com)。0167:00401C5A CDQ
0167:00401C5B IDIV ECX
0167:00401C5D ADD DL41余数与DL相加得出注册码
0167:00401C60 MOV [ESP+ESI+0148]DL把注册码存入[ESP+ESI+0148]中。
0167:00401C67 JMP SHORT 00401C97
0167:00401C69 MOV EAXECX把余数传给EAX
0167:00401C6B MOV EBX03
0167:00401C70 CDQ
0167:00401C71 IDIV EBX
0167:00401C73 TEST EDXEDX
0167:00401C75 JNZ 00401C8D不为零就跳,用上面的结果ECX+31得出注册码。
0167:00401C77 MOV EAXEDI如果为零重新赋值计算。
0167:00401C79 MOV ECX1A除数
0167:00401C7E CDQ
0167:00401C7F IDIV ECX
0167:00401C81 ADD DL61 余数DL与61相加得出注册码
0167:00401C84 MOV [ESP+ESI+0148]DL
0167:00401C8B JMP SHORT 00401C97
0167:00401C8D ADD CL31得出注册码
0167:00401C90 MOV [ESP+ESI+0148]CL
0167:00401C97 LEA EDI[ESP+20]你所输入的用户名串地址。
0167:00401C9B OR ECXBYTE -01
0167:00401C9E XOR EAXEAX
0167:00401CA0 INC ESI
0167:00401CA1 REPNE SCASB
0167:00401CA3 NOT ECX
0167:00401CA5 DEC ECX
0167:00401CA6 CMP ESIECX ESI是循环的次数。 ECX是用户名的总的位数,
0167:00401CA8 JC 00401C33有进位(也就是没有循环完毕)就跳进行下一轮计算。
0167:00401CAA XOR EBXEBX
0167:00401CAC PUSH EBP
0167:00401CAD LEA ECX[ESP+EC]
0167:00401CB4 MOV [ESP+ESI+014C]BL
0167:00401CBB CALL 00401EB0
0167:00401CC0 MOV [ESP+01B4]EBX
0167:00401CC7 LEA ESI[ESP+84]假码。
0167:00401CCE LEA EAX[ESP+0148]真码
至此就可以结束了,下文是进行比较。
0167:00401CD5 MOV DL[EAX]
0167:00401CD7 MOV CLDL
0167:00401CD9 CMP DL[ESI]
0167:00401CDB JNZ 00401CF9
0167:00401CDD CMP CLBL
0167:00401CDF JZ 00401CF5
0167:00401CE1 MOV DL[EAX+01]
0167:00401CE4 MOV CLDL
0167:00401CE6 CMP DL[ESI+01]
0167:00401CE9 JNZ 00401CF9
0167:00401CEB ADD EAXBYTE +02
0167:00401CEE ADD ESIBYTE +02
0167:00401CF1 CMP CLBL
0167:00401CF3 JNZ 00401CD5
0167:00401CF5 XOR EAXEAX
0167:00401CF7 JMP SHORT 00401CFE
0167:00401CF9 SBB EAXEAX
0167:00401CFB SBB EAXBYTE -01
总结:用户名有几位,注册码就有几位。举例。
用户名:abcde
密码:8UvW2
(编辑:天命孤独)