======================================================================
【工程作者】深海游侠[CZG][OCN]
【作者邮箱】shenhaiyouxia@163.com
【作者主页】http://86.22.cn/
======================================================================
【软件名称】私人保险箱 V5.50
【下载地址】http://www4.skycn.com/soft/14176.html
【加壳保护】ASPack加壳
【工程平台】Win ME
【调试工具】TRW2000系列
【脱壳方式】专用工具脱壳
======================================================================
【破解过程】
首先下断点,程序顺利断下,我们来到这里!
016F:004DACC0 50 PUSH EAX //EAX=假码
016F:004DACC1 6A03 PUSH BYTE +03
016F:004DACC3 8D45F8 LEA EAX,[EBP-08]
016F:004DACC6 50 PUSH EAX
016F:004DACC7 8D45F4 LEA EAX,[EBP-0C]
016F:004DACCA E891AEFEFF CALL 004C5B60 //猜的没错的话应该是读取机器码,具体没跟。
016F:004DACCF 8B45F4 MOV EAX,[EBP-0C] //EAX=机器码
016F:004DACD2 B902000000 MOV ECX,02
016F:004DACD7 BA01000000 MOV EDX,01
016F:004DACDC E857AFFEFF CALL 004C5C38 //毫无疑问,算法CALL,跟进!
016F:004DACE1 8B55F8 MOV EDX,[EBP-08] //EDX=真码
016F:004DACE4 58 POP EAX //EAX=假码
016F:004DACE5 E8A2A3F2FF CALL 0040508C //经典比较
016F:004DACEA 7566 JNZ 004DAD52 //关键跳
016F:004DACEC B201 MOV DL,01
016F:004DACEE A1847A4600 MOV EAX,[00467A84]
016F:004DACF3 E88CCEF8FF CALL 00467B84
016F:004DACF8 8BD8 MOV EBX,EAX
016F:004DACFA BA01000080 MOV EDX,80000001
016F:004DACFF 8BC3 MOV EAX,EBX
016F:004DAD01 E81ECFF8FF CALL 00467C24
016F:004DAD06 B101 MOV CL,01
016F:004DAD08 BAACAD4D00 MOV EDX,004DADAC
016F:004DAD0D 8BC3 MOV EAX,EBX
016F:004DAD0F E854D0F8FF CALL 00467D68
016F:004DAD14 8D55F0 LEA EDX,[EBP-10]
016F:004DAD17 8B8604040000 MOV EAX,[ESI+0404]
016F:004DAD1D E846ACF6FF CALL 00445968
016F:004DAD22 8B4DF0 MOV ECX,[EBP-10]
016F:004DAD25 BAC8AD4D00 MOV EDX,004DADC8
016F:004DAD2A 8BC3 MOV EAX,EBX
016F:004DAD2C E863D5F8FF CALL 00468294
016F:004DAD31 8BC3 MOV EAX,EBX
016F:004DAD33 E8CC91F2FF CALL 00403F04
016F:004DAD38 6A00 PUSH BYTE +00
016F:004DAD3A B9D0AD4D00 MOV ECX,004DADD0
016F:004DAD3F BADCAD4D00 MOV EDX,004DADDC
016F:004DAD44 A1541C4E00 MOV EAX,[004E1C54]
016F:004DAD49 8B00 MOV EAX,[EAX]
016F:004DAD4B E898B9F8FF CALL 004666E8 //成功CALL
016F:004DAD50 EB18 JMP SHORT 004DAD6A
016F:004DAD52 6A00 PUSH BYTE +00
016F:004DAD54 B9D0AD4D00 MOV ECX,004DADD0
016F:004DAD59 BAE8AD4D00 MOV EDX,004DADE8
016F:004DAD5E A1541C4E00 MOV EAX,[004E1C54]
016F:004DAD63 8B00 MOV EAX,[EAX]
016F:004DAD65 E87EB9F8FF CALL 004666E8 //出错CALL
016F:004DAD6A 33C0 XOR EAX,EAX
016F:004DAD6C 5A POP EDX
016F:004DAD6D 59 POP ECX
016F:004DAD6E 59 POP ECX
016F:004DAD6F 648910 MOV [FS:EAX],EDX
016F:004DAD72 689CAD4D00 PUSH DWORD 004DAD9C
016F:004DAD77 8D45F0 LEA EAX,[EBP-10]
016F:004DAD7A E8119FF2FF CALL 00404C90
016F:004DAD7F 8D45F4 LEA EAX,[EBP-0C]
016F:004DAD82 BA02000000 MOV EDX,02
016F:004DAD87 E8289FF2FF CALL 00404CB4
016F:004DAD8C 8D45FC LEA EAX,[EBP-04]
016F:004DAD8F E8FC9EF2FF CALL 00404C90
016F:004DAD94 C3 RET
016F:004DACDC E857AFFEFF CALL 004C5C38
|
016F:004C5C38 55 PUSH EBP
016F:004C5C39 8BEC MOV EBP,ESP
016F:004C5C3B 83C4F0 ADD ESP,BYTE -10
016F:004C5C3E 53 PUSH EBX
016F:004C5C3F 56 PUSH ESI
016F:004C5C40 57 PUSH EDI
016F:004C5C41 33DB XOR EBX,EBX
016F:004C5C43 895DF0 MOV [EBP-10],EBX
016F:004C5C46 894DF8 MOV [EBP-08],ECX
016F:004C5C49 8BF2 MOV ESI,EDX
016F:004C5C4B 8945FC MOV [EBP-04],EAX
016F:004C5C4E 8B7D08 MOV EDI,[EBP+08]
016F:004C5C51 33C0 XOR EAX,EAX
016F:004C5C53 55 PUSH EBP
016F:004C5C54 68CB5C4C00 PUSH DWORD 004C5CCB
016F:004C5C59 64FF30 PUSH DWORD [FS:EAX]
016F:004C5C5C 648920 MOV [FS:EAX],ESP
016F:004C5C5F 8BC7 MOV EAX,EDI
016F:004C5C61 E82AF0F3FF CALL 00404C90
016F:004C5C66 8B45FC MOV EAX,[EBP-04] //EAX=机器码
016F:004C5C69 E8DAF2F3FF CALL 00404F48 //取位数
016F:004C5C6E 84C0 TEST AL,AL
016F:004C5C70 7643 JNA 004C5CB5 //总的来说就是看是否有机器码!
016F:004C5C72 8845F7 MOV [EBP-09],AL
016F:004C5C75 B301 MOV BL,01
016F:004C5C77 8D45F0 LEA EAX,[EBP-10]
016F:004C5C7A 33D2 XOR EDX,EDX
016F:004C5C7C 8AD3 MOV DL,BL
016F:004C5C7E 8B4DFC MOV ECX,[EBP-04] //ECX=机器码
016F:004C5C81 8A5411FF MOV DL,[ECX+EDX-01] //取1位(主要看是第几次循环)
016F:004C5C85 8BCE MOV ECX,ESI //ESI算是个累加器
016F:004C5C87 C1E908 SHR ECX,08 //逻辑右移2位
016F:004C5C8A 32D1 XOR DL,CL //DL xor Dl
016F:004C5C8C E8DFF1F3FF CALL 00404E70 //DL结果转为ASCII码表示出来!
016F:004C5C91 8B55F0 MOV EDX,[EBP-10] //表示出来
016F:004C5C94 8BC7 MOV EAX,EDI
016F:004C5C96 E8B5F2F3FF CALL 00404F50 //应该是排位用
016F:004C5C9B 33C0 XOR EAX,EAX
016F:004C5C9D 8AC3 MOV AL,BL
016F:004C5C9F 8B17 MOV EDX,[EDI] //表示出来
016F:004C5CA1 0FB64402FF MOVZX EAX,BYTE [EDX+EAX-01]
016F:004C5CA6 03F0 ADD ESI,EAX //ESI=EAX+ESI
016F:004C5CA8 0FAF75F8 IMUL ESI,[EBP-08] //下命令可看到[ebp-08]寄存器的值是2
016F:004C5CAC 03750C ADD ESI,[EBP+0C] //[EBP+0C]寄存器的值是3
016F:004C5CAF 43 INC EBX //计数器+1(看是否把每位机器码都计算了)
016F:004C5CB0 FE4DF7 DEC BYTE [EBP-09] //计算完了一个?去掉一个吧!
016F:004C5CB3 75C2 JNZ 004C5C77 //这里到4C5C77就是一个经典的循环计算!要计算每一位的数!
016F:004C5CB5 33C0 XOR EAX,EAX
016F:004C5CB7 5A POP EDX
016F:004C5CB8 59 POP ECX
016F:004C5CB9 59 POP ECX
016F:004C5CBA 648910 MOV [FS:EAX],EDX
016F:004C5CBD 68D25C4C00 PUSH DWORD 004C5CD2
016F:004C5CC2 8D45F0 LEA EAX,[EBP-10]
016F:004C5CC5 E8C6EFF3FF CALL 00404C90
016F:004C5CCA C3 RET //返回
1)破解总结:
1>注册码和机器码位数是大概相对的,(除非遇上比较大的数).
2>注册码利用了循环每位机器码的计算方式!
2)破解推算: (我的机器码是:0383FBFF)
计算过程(先取每位机器码)
第1位 30 xor (0 shr 8) = 30(0)
第2位 33 xor ((31*2+3) shr 8) = 33(3)
第3位 38 xor ((98*2+3) shr 8) = 39(9)
第4位 33 xor ((16C*2+3) shr 8) = 31(1)
第5位 46 xor ((30C*2+3) shr 8) = 40(@)
第6位 42 xor ((65B*2+3) shr 8) = 4E(N)
第7位 46 xor ((D07*2+3) shr 8) = 5C(\)
第8位 46 xor ((1A6D*2+3) shr 8)= 72(r)
总结:我的注册码就是: 0391@N\r
3)内存注册机:
中断地址:4DACE4
中断次数:1
第一字节:58
字节长度:1
寄存器:EDX(内存型)
4)注册信息保存位置:
HKEY_USERS\.DEFAULT\Software\SafeBox\RegNum: "0391@N\r"
5)感评:
其实像这类软件算法已经是十分十分简单,但我认为是比较典型的循环计算,而且是小循环,对小鸟们一定很有帮助!毕竟我们不是为破解别人软件而学破解的,我们想得到的是技术!另外有朋友如果写出VB注册机请帮忙把原码发给我,先谢谢了!
如果我这篇拙文对大家哪怕有一点点帮助,那么我的目的也就达到了。
最后我要感谢[CZG][OCN]的兄弟们和许许多多朋友给我的许多帮助!也感谢你能耐心看完这篇文章!收工!
======================================================================
【工程声明】本过程只供内部学习之用!如要转载请保持过程完整!
======================================================================