破解作者:北极熊[DFCG]
破解目的:看懂算法,找出注册码,做出VB注册机
破解工具:TRW2000 V1.23
下面是破解过程,各位慢看:
1.首先运行TRW2000隐藏,
2.启动setp3.exe,点击注册信息栏 :
有两个框:如下填入
user name:jxtour
license key:7878787878(随便填先)
3.按Ctrl+N激活TRW2000
下命令:
BPX HMEMCPY → 这里用hmemcpy这个万能断点就OK了
4.按F5返回,点击注册按钮,程序被拦截
下命令:
BC* → 清除所有断点
PMODULE →返回程序领空
5.按F12共7次 F10 n次到如下代码:
0167:0047DA74 8B45F8 MOV EAX,[EBP-08] 用户名进eax
0167:0047DA77 8D4DFC LEA ECX,[EBP-04]
0167:0047DA7A 8B93EC020000 MOV EDX,[EBX+02EC]
0167:0047DA80 E8B3FBFFFF CALL 0047D638 计算关键CALL,F8跟入
0167:0047DA85 8B45FC MOV EAX,[EBP-04]
0167:0047DA88 50 PUSH EAX
0167:0047DA89 8D55F4 LEA EDX,[EBP-0C]
0167:0047DA8C 8B83E0020000 MOV EAX,[EBX+02E0]
0167:0047DA92 E8E120FBFF CALL 0042FB78
0167:0047DA97 8B55F4 MOV EDX,[EBP-0C]
0167:0047DA9A 58 POP EAX
0167:0047DA9B E85463F8FF CALL 00403DF4 D EAX 真注册码,可做内存注册机
0167:0047DAA0 7522 JNZ 0047DAC4
F8跟入后,慢慢按F10到如下:
0167:0047D66D 8945F0 MOV [EBP-10],EAX
0167:0047D670 8B75F8 MOV ESI,[EBP-08] ESI=4D3H
0167:0047D673 8B45F0 MOV EAX,[EBP-10]
0167:0047D676 85C0 TEST EAX,EAX
0167:0047D678 7E13 JNG 0047D68D
0167:0047D67A BF01000000 MOV EDI,01
0167:0047D67F 8B55FC MOV EDX,[EBP-04] EDX="jxtour"
0167:0047D682 0FB6543AFF MOVZX EDX,BYTE [EDX+EDI-01] 逐位取用户名ASCII码
0167:0047D687 03F2 ADD ESI,EDX ESI=ESI+EDX
0167:0047D689 47 INC EDI EDI+1
0167:0047D68A 48 DEC EAX EAX-1(计数)
0167:0047D68B 75F2 JNZ 0047D67F 未取完继续
0167:0047D68D 8B45F4 MOV EAX,[EBP-0C]
0167:0047D690 E8CF63F8FF CALL 00403A64
0167:0047D695 33FF XOR EDI,EDI EDI=0
0167:0047D697 8BC6 MOV EAX,ESI EAX=ESI
0167:0047D699 B924000000 MOV ECX,24 ECX=24H
0167:0047D69E 99 CDQ
0167:0047D69F F7F9 IDIV ECX EAX=EAX/ECX EDX=EAX MOD ECX
0167:0047D6A1 8BC2 MOV EAX,EDX EAX=EDX(除后的余数)
0167:0047D6A3 E868FFFFFF CALL 0047D610 F8进入
0167:0047D6A8 8BD8 MOV EBX,EAX EBX=EAX
0167:0047D6AA 8BC3 MOV EAX,EBX EAX=EBX
0167:0047D6AC 04D0 ADD AL,D0 AL=AL+D0H(低位计算)
0167:0047D6AE 2C02 SUB AL,02 AL=AL-02H
0167:0047D6B0 7221 JC 0047D6D3 有进位跳,无进位不跳
0167:0047D6B2 2C17 SUB AL,17 AL=AL-17H
0167:0047D6B4 741D JZ 0047D6D3 如果为零就跳,这个结果是不要的!
0167:0047D6B6 2C06 SUB AL,06 AL=AL-06H
0167:0047D6B8 7419 JZ 0047D6D3 如果为零就跳,这个结果是不要的!
0167:0047D6BA 8D45EC LEA EAX,[EBP-14]
0167:0047D6BD 8BD3 MOV EDX,EBX
0167:0047D6BF E84865F8FF CALL 00403C0C
0167:0047D6C4 8B55EC MOV EDX,[EBP-14]
0167:0047D6C7 8B45F4 MOV EAX,[EBP-0C]
0167:0047D6CA E81D66F8FF CALL 00403CEC 上面这段是把计算结果变成字母或数字
0167:0047D6CF 8B45F4 MOV EAX,[EBP-0C]
0167:0047D6D2 47 INC EDI
0167:0047D6D3 8BC7 MOV EAX,EDI 重新计算
0167:0047D6D5 99 CDQ
0167:0047D6D6 F77DF0 IDIV DWORD [EBP-10]
0167:0047D6D9 8BC2 MOV EAX,EDX
0167:0047D6DB 40 INC EAX
0167:0047D6DC 8B55FC MOV EDX,[EBP-04] EDX为用户名:"jxtour"
0167:0047D6DF 0FB64402FF MOVZX EAX,BYTE [EDX+EAX-01] 取一位用户名ASCII码到eax
0167:0047D6E4 2BF0 SUB ESI,EAX esi=esi-eax
0167:0047D6E6 85F6 TEST ESI,ESI
0167:0047D6E8 7D03 JNL 0047D6ED 如果esi<0
0167:0047D6EA 0375F8 ADD ESI,[EBP-08] esi=esi+4D3H
0167:0047D6ED 83FF0A CMP EDI,BYTE +0A 比较注册码是否算出了10位
0167:0047D6F0 7CA5 JL 0047D697 不够再算,跳回47D697
0167:0047D6F2 33C0 XOR EAX,EAX
F8进入47D6A3的call
0167:0047D610 B220 MOV DL,20 DL=20
0167:0047D612 8BC8 MOV ECX,EAX ECX=EAX
0167:0047D614 83E93E SUB ECX,BYTE +3E ECX=ECX-3EH
0167:0047D617 7319 JNC 0047D632 无进位跳 ECX<3EH就不会跳
0167:0047D619 8BC8 MOV ECX,EAX ECX=EAX
0167:0047D61B 83E90A SUB ECX,BYTE +0A ECX=ECX-AH
0167:0047D61E 7207 JC 0047D627 有进位跳,无进位不跳 ECX>AH就不跳
0167:0047D620 83E91A SUB ECX,BYTE +1A ECX=ECX-1AH
0167:0047D623 7207 JC 0047D62C 有进位跳,无进位不跳 ECX>1AH就不跳
0167:0047D625 EB0B JMP SHORT 0047D632
0167:0047D627 8D5030 LEA EDX,[EAX+30] EDX=EAX+30H
0167:0047D62A EB06 JMP SHORT 0047D632
0167:0047D62C 8D5041 LEA EDX,[EAX+41] EDX=EAX+41H
0167:0047D62F 83EA0A SUB EDX,BYTE +0A
0167:0047D632 8BC2 MOX EAX,EDX EAX=EDX
6.计算结果:
user name:jxtour
license key:BZRLC68WGD
7.注册机做法略