欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

一连几个软件都无头绪,真不爽,搞个算法来解解气! (3千字)

一连几个软件都无头绪,真不爽,搞个算法来解解气! (3千字)

捷径点点通 2.00注册算法分析!
[作 者]:LILITH[CNCG]
[时 间]:2001-12-15
[软 件]:捷径点点通2.00
[软件简介]:大多数人都喜欢走“捷径”,本软件就是为此目的而设计的。当您在地图上选择了“出发地”(起始坐标点)和“目的地”(终止坐标点),然后再点击一下“开始计算最短路径”,接着等待几秒钟,本软件就会自动为您指出“出发地”和“目的地”之间的最短路径,让您轻松找到“捷径”。
[下 载]:http://www.csdn.net/soft/openfile.asp?kind=1&id=13091
[保护方式]:注册码
[破解工具]:trw2000
这是我的第一个算法分析,首先感谢PaulYoung大侠的指点,令我这等菜鸟尝到了注册算法的甜头,如有不对的地方还请各路英雄指正,呵呵……GO!
还是老办法,用TRW2000下断点bpx hmemcpy,中断后7下F12,来到……
0177:004736BA  LEA      EDX,[EBP-10]  \\光标停在这里……
0177:004736BD  MOV      EAX,[EBP-04]
0177:004736C0  MOV      EAX,[EAX+03A0]
0177:004736C6  CALL    004379CC
0177:004736CB  MOV      EAX,[EBP-0C]
0177:004736CE  CALL    00404C1C
0177:004736D3  MOV      [EBP-20],EAX
0177:004736D6  LEA      EAX,[EBP-08]
0177:004736D9  CALL    00404964
0177:004736DE  MOV      EDI,[EBP-20]
0177:004736E1  TEST    EDI,EDI      \\验证输入注册名的位数
0177:004736E3  JNG      0047371D      \\为零则跳
0177:004736E5  MOV      ESI,01        \\ESI初始值为1
0177:004736EA  MOV      EAX,[EBP-0C]
0177:004736ED  XOR      EBX,EBX             \\EBX始值为零
0177:004736EF  MOV      BL,[EAX+ESI-01]       \\取注册名第一位字母的十六进制值
0177:004736F3  IMUL    EAX,[EBP-20],BYTE +6B  \\用注册名位数与6B相乘,结果保存入EAX
0177:004736F7  ADD      EAX,EBX               \\将得出的数与字母的十六进制数相加
0177:004736F9  CDQ   
0177:004736FA  IDIV    ESI     \\将计算结果除以ESI的值,即除1,结果仍保存到EAX
0177:004736FC  MOV      EBX,EAX \\将结果存入EBX
0177:004736FE  LEA      EDX,[EBP+FFFFFE10]
0177:00473704  MOV      EAX,EBX
0177:00473706  CALL    00408C2C
0177:0047370B  MOV      EDX,[EBP+FFFFFE10]
0177:00473711  LEA      EAX,[EBP-08]
0177:00473714  CALL    00404C24
0177:00473719  INC      ESI     \\ESI递增
0177:0047371A  DEC      EDI     \\EDI递减
0177:0047371B  JNZ      004736EA  \\继续往上跳,循环取注册名的第二,三位,直至取完
0177:0047371D  CMP      DWORD [EBP-08],BYTE +00
0177:00473721  JZ      NEAR 004738A1
0177:00473727  MOV      EAX,[EBP-08]
0177:0047372A  MOV      EDX,[EBP-10]
0177:0047372D  CALL    00404D60       \\取完后到这里形成注册码,下D EDX可看到真的注册码。
0177:00473732  JNZ      NEAR 004738A1  \\完成验证,跳转。
总结:此程序通过注册名的长度来计注册码,就是说,注册名越长,注册码也就越长。输入注册名后,程序按位取注册名的字母来计算注册码。先用6B(DEC=107)乘上注册名的位数,如我用CNCG,所以为4,得出的数加上依次取得的每位字符的十六进制值,再除以ESI的值(ESI初始值为1),就得出注册码,例如我的注册名为CNCG,则计算方法是:
C=6b(107)*4+67/1=495 (4为注册名长度;67是C的十六进制值,1是ESI的值,ESI递增1)
N=6b(107)*4+78/2=253
C=6b(107)*4+67/3=165
G=6b(107)*4+71/4=124
将4个数串依次起来就是495253165124,这就是注册码了,呵呵……
至此,软件已经成功注册,我的废话也到此结束了,最后,再次感谢PaulYoung大侠的教导!BYE……

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功