目标:L0phtcrack v2.5
位置:http://www.l0pht.com/l0phtcrack/
作 者:xiA Qin
解密日前:2000年9月10日
解密工具:Trw2000 1.22
说 明:本文是在我的软件破解记录上整理出来的。如若有纰漏,请各位大侠多指教!
输入注册信息:
机器码:11363ea34 #此是软件自动生成的。
注册码:1234567890 #任意输入
下指令bpx hmemcpy //下中断点
按F5回到程序,按确定,这时会被Trw2000拦截到。
下指令bd * //屏障中断点
下指令pmodule //直接跳到程序的领空
按F10来到下面指令
.................
015F:0040630B LEA ECX,[ESP+E0] //载入你输入的注册码的地址。
015F:00406312 PUSH ECX
015F:00406313 MOV ECX,EBX
015F:00406315 CALL 0044519A
015F:0040631A LEA EDX,[ESP+14]
015F:0040631E PUSH EDX
015F:0040631F PUSH BYTE +00
015F:00406321 MOV ECX,ESI
015F:00406323 CALL 00445491
015F:00406328 PUSH EAX
015F:00406329 CALL 00401447 //计算注册码的的子程序CALL
015F:0040632E ADD ESP,BYTE +08
015F:00406331 LEA EAX,[ESP+2C] //下指令d
eax,就可以看见第一个正确注册码。
015F:00406335 PUSH EAX
015F:00406336 PUSH BYTE +00
015F:00406338 MOV ECX,EDI
015F:0040633A CALL 00445491
015F:0040633F PUSH EAX
015F:00406340 CALL 00401447 //计算注册码的的子程序CALL
015F:00406345 MOV EAX,[EBX]
015F:00406347 LEA ECX,[ESP+1C] //下指令d
ecx,就可以看见第二个正确注册码。
015F:0040634B PUSH ECX
015F:0040634C PUSH EAX
015F:0040634D CALL 00426260 //比较注册码的子程序CALL
015F:00406352 ADD ESP,BYTE +10
015F:00406355 TEST EAX,EAX //用eax当注册旗标,EAX=1注册成功
015F:00406357 JZ 004063A2
//
015F:00406359 MOV EAX,[EBX]
015F:0040635B LEA EDX,[ESP+2C]
015F:0040635F PUSH EDX
015F:00406360 PUSH EAX
015F:00406361 CALL 00426260 //比较注册码的子程序CALL
015F:00406366 ADD ESP,BYTE +08
015F:00406369 TEST EAX,EAX //用eax当注册旗标,EAX=1注册成功
015F:0040636B JZ 004063A2
015F:0040636D PUSH BYTE +00
015F:0040636F PUSH BYTE +00
015F:00406371 PUSH DWORD 00483530
015F:00406376 CALL 0045666B //注册失败
015F:0040637B PUSH ESI
015F:0040637C LEA ECX,[ESP+E0]
015F:00406383 CALL 0044519A
015F:00406388 LEA ECX,[ESP+80]
015F:0040638F CALL 00443922
015F:00406394 CMP EAX,BYTE +01
015F:00406397 JZ NEAR 0040630B
015F:0040639D JMP 0040644B
015F:004063A2 OR ECX,BYTE -01
015F:004063A5 MOV DWORD [EBP+C0],00
015F:004063AF XOR EAX,EAX
015F:004063B1 MOV EDI,00483510
015F:004063B6 REPNE SCASB
015F:004063B8 NOT ECX
.............................
按F8进去0040634D CALL 00426260看看程序是如何比较注册码的。
015F:00426260 PUSH EBP
015F:00426261 MOV EBP,ESP
015F:00426263 PUSH EDI
015F:00426264 PUSH ESI
015F:00426265 PUSH EBX
015F:00426266 MOV ESI,[EBP+0C]
015F:00426269 MOV EDI,[EBP+08]
015F:0042626C LEA EAX,[0065D8B8]
015F:00426272 CMP DWORD [EAX+08],BYTE +00
015F:00426276 JNZ 004262B3
015F:00426278 MOV AL,FF
015F:0042627A MOV EDI,EDI
015F:0042627C OR AL,AL <<--|逐位比较真假注册码。
015F:0042627E JZ 004262AE |
015F:00426280 MOV AL,[ESI] |
015F:00426282 INC ESI
|
015F:00426283 MOV AH,[EDI] |
015F:00426285 INC EDI |
015F:00426286 CMP AH,AL
|
015F:00426288 JZ 0042627C <<--|
015F:0042628A SUB AL,41
015F:0042628C CMP AL,1A
。 。 。 。
。 。 。 。
。 。 。 。
015F:00426321 CALL 0042048F
015F:00426326 ADD ESP,BYTE +04
015F:00426329 MOV EAX,EBX
015F:0042632B POP EBX
015F:0042632C POP ESI
015F:0042632D POP EDI
015F:0042632E LEAVE
015F:0042632F RET
==============================================
按F8进入00406329 CALL 00401447进行算法分析:
015F:00403EC0 SUB ESP,BYTE +0C
015F:00403EC3 MOV EAX,[ESP+10]
015F:00403EC7 PUSH BYTE +08
015F:00403EC9 INC EAX
//EAX=EAX+1
015F:00403ECA PUSH EAX
015F:00403ECB LEA ECX,[ESP+08]
015F:00403ECF PUSH ECX
015F:00403ED0 CALL 0041BCC0
015F:00403ED5 LEA EDX,[ESP+1C]
015F:00403ED9 PUSH EDX
015F:00403EDA LEA EAX,[ESP+10]
015F:00403EDE PUSH DWORD 00483078
015F:00403EE3 PUSH EAX
015F:00403EE4 MOV BYTE [ESP+20],00
015F:00403EE9 CALL 0041BED1
015F:00403EEE MOV ECX,[ESP+28] //将[ESP+28]移入寄存器ECX。
015F:00403EF2 XOR ECX,34729803 //ecx=ecx xor
34729803。
015F:00403EF8 MOV EAX,ECX //将寄存器ECX的值移入寄存器eax.
015F:00403EFA SHL EAX,1B
//eax逻辑左移27位
015F:00403EFD SHR ECX,05
//ecx逻辑右移5位
015F:00403F00 ADD EAX,ECX //EAX=EAX+ECX
015F:00403F02 MOV ECX,[ESP+2C]
015F:00403F06 XOR EAX,12426571 //eax=eax xor
12426571
015F:00403F0B PUSH EAX
015F:00403F0C PUSH DWORD 00483070
015F:00403F11 PUSH ECX
015F:00403F12 MOV [ESP+34],EAX
015F:00403F16 CALL 0041BE7F
015F:00403F1B XOR EAX,EAX
015F:00403F1D ADD ESP,BYTE +30
015F:00403F20 RET
算法总结:
1、将机器码11363ea34转换成1363ea34,也就是取后8位。
2、与34729803做异或运算。
3、逻辑左移27位相加逻辑右移5位
4、在与12426571做异或运算。
计算公式:
A xor 34729803=B
[(B shl 27)+(B SHR 5)] XOR 12426571=C
比如:我的计算机的机器码是11363ea34
取机器码的后8位,就是1363ea34
1363EA34 XOR 34729803=27117237
[(27117237 SHL 27)+(27117237 SHR 5)] XOR 12426571=[B8000000+1388B91] XOR 12426571=
B9388B91 XOR 12426571=AB7AEEE0
整理一下 (由于每台电脑的机器码不同,所以我的注册码,你可能不能使用):
机器码:11363ea34
注册码:AB7AEEE0
524a3b72
注册信息在注册表中:
[HKEY_CURRENT_USER\Software\L0pht\L0phtCrack]
"Registration"="524a3b72"