|
破解工具:trw2000,纸,笔,手,脑
破解过程:
这是一个很简单的算法,主要是对机器码的计算在另外的地方,比较难找,其他都是很简单的!
1、运行TRW2000后最小化
2、运行程序,点配置菜单,输入任意假注册码,先不要点“注册”按钮
3、Ctrl+N激活TRW2000
4、bpx hmemcpy → 这里用hmemcpy这个万能断点就OK了
5、按F5返回,点击注册按钮,程序被拦截
6、BC * → 清除所有断点
PMODULE → 直接进入程序领空
7、按F12键7次按F10键1次来到如下代码处
0167:005CE280 8D55F8 LEA EDX,[EBP-08]
0167:005CE283 8B83E0020000 MOV EAX,[EBX+02E0]
0167:005CE289 E88E17E7FF CALL 0043FA1C
0167:005CE28E 8B45F8 MOV EAX,[EBP-08]
0167:005CE291 8D55FC LEA EDX,[EBP-04]
**//这里是机器码放到edx中的过程,在下一行可以D EDX看见机器码"178434691ID2.8S" //**
0167:005CE294 E8E3E2FBFF CALL 0058C57C
**//关键CALL,F8进入(D EDX看见机器码)//**
0167:005CE299 8B45FC MOV EAX,[EBP-04]
0167:005CE29C 50 PUSH EAX
0167:005CE29D 8D55F4 LEA EDX,[EBP-0C]
0167:005CE2A0 8B83DC020000 MOV EAX,[EBX+02DC]
0167:005CE2A6 E87117E7FF CALL 0043FA1C
0167:005CE2AB 8B55F4 MOV EDX,[EBP-0C]
0167:005CE2AE 58 POP EAX
0167:005CE2AF E8EC68E3FF CALL 00404BA0
**//D EAX可见注册码,可以在这里作内存注册机//**
0167:005CE2B4 750D JNZ 005CE2C3
0167:005CE2B6 E8B5E3FBFF CALL 0058C670
0167:005CE2BB A1FC376100 MOV EAX,[006137FC]
0167:005CE2C0 C60001 MOV BYTE [EAX],01
0167:005CE2C3 8BC3 MOV EAX,EBX
--------------------//F8进来关键CALL//-------------------
0167:0058C57C 55 PUSH EBP
0167:0058C57D 8BEC MOV EBP,ESP
0167:0058C57F 33C9 XOR ECX,ECX
0167:0058C581 51 PUSH ECX
0167:0058C582 51 PUSH ECX
0167:0058C583 51 PUSH ECX
0167:0058C584 51 PUSH ECX
0167:0058C585 53 PUSH EBX
0167:0058C586 8BDA MOV EBX,EDX
0167:0058C588 8945FC MOV [EBP-04],EAX
0167:0058C58B 8B45FC MOV EAX,[EBP-04]
**//这里是机器码//**
0167:0058C58E E8B186E7FF CALL 00404C44
0167:0058C593 33C0 XOR EAX,EAX
0167:0058C595 55 PUSH EBP
0167:0058C596 6849C65800 PUSH DWORD 0058C649
0167:0058C59B 64FF30 PUSH DWORD [FS:EAX]
0167:0058C59E 648920 MOV [FS:EAX],ESP
0167:0058C5A1 8D45F8 LEA EAX,[EBP-08]
0167:0058C5A4 50 PUSH EAX
0167:0058C5A5 B904000000 MOV ECX,04 //取4位
0167:0058C5AA BA01000000 MOV EDX,01 //第1位开始
0167:0058C5AF 8B45FC MOV EAX,[EBP-04]
0167:0058C5B2 E8E186E7FF CALL 00404C98
**//上面这里其实就是按位置取字符串的过程//**
0167:0058C5B7 8D45F4 LEA EAX,[EBP-0C]
0167:0058C5BA 50 PUSH EAX
0167:0058C5BB B904000000 MOV ECX,04 //取4位
0167:0058C5C0 BA05000000 MOV EDX,05 //第5位开始
0167:0058C5C5 8B45FC MOV EAX,[EBP-04]
0167:0058C5C8 E8CB86E7FF CALL 00404C98 //同上面的CALL
0167:0058C5CD 8D45FC LEA EAX,[EBP-04]
0167:0058C5D0 8B4DF8 MOV ECX,[EBP-08]
**//这里ECX取的就是1-4位的机器码"1784" //**
0167:0058C5D3 8B55F4 MOV EDX,[EBP-0C]
**//这里EDX取的就是5-8位的机器码"3469"//**
0167:0058C5D6 E80185E7FF CALL 00404ADC
**//连接起来为"34691784",是按照5-8位接1-4位的顺序连接的 //**
0167:0058C5DB 803DBB4B610000 CMP BYTE [00614BBB],00
0167:0058C5E2 7436 JZ 0058C61A
//我的这里是跳过
0167:0058C5E4 6860C65800 PUSH DWORD 0058C660
0167:0058C5E9 8B45FC MOV EAX,[EBP-04]
0167:0058C5EC E84BE8E7FF CALL 0040AE3C
0167:0058C5F1 99 CDQ
0167:0058C5F2 051810C7ED ADD EAX,EDC71018
0167:0058C5F7 83D202 ADC EDX,BYTE +02
0167:0058C5FA 52 PUSH EDX
0167:0058C5FB 50 PUSH EAX
0167:0058C5FC 8D45F0 LEA EAX,[EBP-10]
0167:0058C5FF E800E8E7FF CALL 0040AE04
0167:0058C604 FF75F0 PUSH DWORD [EBP-10]
0167:0058C607 686CC65800 PUSH DWORD 0058C66C
0167:0058C60C 8BC3 MOV EAX,EBX
0167:0058C60E BA03000000 MOV EDX,03
0167:0058C613 E83885E7FF CALL 00404B50
0167:0058C618 EB14 JMP SHORT 0058C62E
0167:0058C61A 8B45FC MOV EAX,[EBP-04] //D EAX看见"34691784"
**//这个CALL是把字符串转换成数值//**
0167:0058C61D E81AE8E7FF CALL 0040AE3C
0167:0058C622 0518AC2401 ADD EAX,0124AC18 //?eax可以看到十进制为34691784
EAX=34691784+0x124AC18 结果就是注册码了
0167:0058C627 8BD3 MOV EDX,EBX
0167:0058C629 E89EE7E7FF CALL 0040ADCC
0167:0058C62E 33C0 XOR EAX,EAX
0167:0058C630 5A POP EDX
0167:0058C631 59 POP ECX
0167:0058C632 59 POP ECX
0167:0058C633 648910 MOV [FS:EAX],EDX
0167:0058C636 6850C65800 PUSH DWORD 0058C650
0167:0058C63B 8D45F0 LEA EAX,[EBP-10]
0167:0058C63E BA04000000 MOV EDX,04
0167:0058C643 E8C481E7FF CALL 0040480C
算法总结:
1:取机器码的5-8位和1-4位连接成8位字符串,转换成数值+0x124AC18就是注册码了 |
|