管家婆辉煌版加密狗破解
单机版无狗进入时会有提示,说找不到加密狗,通过调试可以找到关键的跳转,跳过后
点击基本录入时会提示系统出错,“XXXXX地址的值FFFFFFF”,而XXXXX地址是在主文件里,不在
内核里。看来这里程序里故意设计的陷井,无狗时会把XXXXX地址里写入0或者FFFFFFFF,那么现在
急需要做的就是找到正确的地址,让它能够正常运行,先看下面的代码分析。
=====PART A==================================
017F:006254DA MOV [EDX],EAX
017F:006254DC MOV EAX,[00639820]
017F:006254E1 MOV DWORD [EAX],12
017F:006254E7 CALL 00628CBB //这里会到B部分,它会向[EAX]里写入一值。
017F:006254EC MOV EBX,EAX
017F:006254EE MOV EAX,[0064BF84]
017F:006254F3 MOV EDX,[EAX]
017F:006254F5 CALL NEAR [EDX+CC] //这里提示确定日期,注意从这里会到D部分。
017F:006254FB MOV EDX,ESI
017F:006254FD MOV EAX,[0064BF84]
017F:00625502 MOV EAX,[EAX+02CC]
017F:00625508 CALL 004A75EC
017F:0062550D TEST EBX,EBX
017F:0062550F JNZ 0062551E
017F:00625511 MOV EAX,[00639854]
017F:00625516 CMP DWORD [EAX],ED1037FF //[EAX]里的值很关键
017F:0062551C JZ 00625545 //跳到625545就不会出现找不到加密狗的提示了。
=====PART B==================================
017F:00627FDC MOV EAX,[EBP+FFFFFE3C] //EAX为一个值,这里随机从狗里读出的。
017F:00627FE2 XOR EAX,[EBP+FFFFFF10] //EAX与[EBP+FFFFFF10]异或。
017F:00627FE8 MOV [0063AF60],EAX //得出的EAX写入[63AF60]也就是A部分的[EAX]
017F:00627FED JMP SHORT 00628014
017F:00627FEF JMP SHORT 00627FF2
017F:00627FF1 ADD DWORD [ECX+FFFE38BD],003000FF
017F:00627FFB ADD [ESI+EDX-7F],DH
=====PART C=================================
017F:00633D23 MOV DWORD [ECX],01
017F:00633D29 ADD DWORD [EBP-08],BYTE +04
017F:00633D2D ADD EDX,BYTE +04
017F:00633D30 DEC EAX
017F:00633D31 JNZ 00633D1A
017F:00633D33 MOV [0064C08C],EDI
017F:00633D39 MOV EDI,01
017F:00633D3E MOV EAX,[006396C8]
017F:00633D43 MOV EAX,[EAX] //运行过这一段后EAX=0,不太正常,然后在下面的CALL
017F:00633D45 SHL EAX,02 //里会出错。看来这里是关键,未运行上段前EAX=46C020
017F:00633D48 CALL 004526FC
017F:00633D4D MOV [0064C034],EAX
017F:00633D52 MOV EAX,[ESI]
017F:00633D54 CALL 00634370
017F:00633D59 DEC EDI
017F:00633D5A JNZ NEAR 00633E06
017F:00633D60 LEA EAX,[EBP-0C]
46C020里的值是关键,接下来要做的是看看程序在哪里向46C020写入0的,下BPM 46C020 W
重新运行软件,在点击确认日期时会被拦住。
=====PART D================================
017F:00625736 MOV EAX,ECX //此处的EAX=0
017F:00625738 MOV EBX,2711 //EBX=2711
017F:0062573D CDQ
017F:0062573E IDIV EBX
017F:00625740 IMUL EAX,EDX,2710
017F:00625746 SUB ECX,EAX
017F:00625748 MOV EAX,ECX
017F:0062574A ADD EAX,EAX
017F:0062574C LEA EAX,[EAX+EAX*4] //运行过这一段后EAX=0
017F:0062574F MOV EDX,[006396C8] //EDX=46C020
017F:00625755 MOV [EDX],EAX //EAX写入46C020,所以是0,那正确的是什么值呢?
017F:00625757 MOVSX ECX,WORD [EBP-04] //前面的EBX=2711,而下面也有把EBX赋成2711的
017F:0062575B MOV EAX,ECX //代码,看来这部分代码分别向关键地址里写入
017F:0062575D MOV EBX,2711 //异常数据,根据推断应该写入2711,试着强行写
017F:00625762 CDQ //入后程序运行正常。
017F:00625763 IDIV EBX
017F:00625765 IMUL EAX,EDX,2710
017F:0062576B SUB ECX,EAX
017F:0062576D MOV EAX,ECX
017F:0062576F ADD EAX,EAX
017F:00625771 LEA EAX,[EAX+EAX*4]
017F:00625774 MOV EDX,[006397E0]
017F:0062577A MOV [EDX],EAX
017F:0062577C MOV BYTE [ESI],01
从这个软件的破解技巧上来分析,它仍然用的是人为制造非常操作的方法,未找到狗后并不是简单
的不给你使用,而是写入一个异常数据,导致后面的程序出错。即然有写入异常数据的地方,我想
就一定有一个正常的数据,具体哪个是正常的数据,不仅要有很好的分析能力,还要有好运气,通
常这个数据都不会太难,和异常数据在一起,经过一个换算后把正常的数据变成不正常的。就是这
么简单,关键看你怎么分析了。