或者谁能破了它?

  • 标 题:试试这个注册码: (45字)
  • 作 者:china2000
  • 时 间:2000-6-23 15:45:41

试试这个注册码:
CODE1:78907
CODE2:580966

  • 标 题:我在SMTH以前发过一篇,请进 (2千字)
  • 作 者:shizg
  • 时 间:2000-6-23 23:57:38
    阅读次数:75

  • 链 接:http://bbs.pediy.com

发信人: shizg (刀客☆永远的痛), 信区: Hacker
标  题: Winhex的破解,大家感兴趣么?新版本也不怕哟
发信站: BBS 水木清华站 (Fri Jun  9 09:47:56 2000)
 
winhex这个编辑器功能很强大,可以改ram。当初出来新版本而老注册号不能用时,
只好自己解决。好像从9.1*版本到现在的9.41,我都是这么做的,连跟踪都不用做,
找特征串,几分钟就搞定。有了注册码,不知大家还感不感兴趣,还是贴出来,
供参考。遇到新版本也可以试试。
要求:W32dasm,任意16进制编辑器,呵呵,比如老版本的winhex:)
 
下面以V9.25版为例,关键代码如下:
  :00448611 mov dword ptr [2*edi+0044B8A6], eax
  :00448618 jmp WINHEX.00448680
  :0044861A mov eax, dword ptr [0044D180]
  :0044861F call WINHEX.0042C608
  :00448624 cmp eax, dword ptr [0044D184]
1  :0044862A jne 0044864A ->*******此处让它跳到0044864E,即不用做下面的比较
                                  16进制751E改为EB22。4E-2C=22为跳的长度
 
  :0044862C cmp byte ptr [0044E95D], 00
2  :00448633 jne 0044864E ->*******就是上面要改的地址
  :00448635 mov al, 03
  :00448637 call WINHEX.0040B5AC
  :0044863C not ax
  :0044863F movzx eax, ax
  :00448642 cmp eax, dword ptr [0044D15C]
  :00448648 je 0044864E
  :0044864A xor eax, eax
  :0044864C jmp WINHEX.00448650
3  :0044864E mov al, 01  ->********跳到这里,要赋值了
4  :00448650 mov byte ptr [0044EE8B], al ->****记下0044EE8B,它就是整个程序
                                  判断的特征地址。如为1表示注册过,因此将程
                                  序中所有mov byte ptr [0044EE8B], 00都让它
                                  赋1
 
例如:
  :00438111 call WINHEX.004049F8
  :00438116 mov dword ptr [0044FCD4], eax
  :0043811B call WINHEX.0043679C
  :00438120 cmp byte ptr [edi+0000189F], 00
  :00438127 je 00438130
  :00438129 mov byte ptr [0044EE8B], 00    ***一个需要改的地方
  :00438130 push 00000000
  :00438132 mov eax, dword ptr [0044B00C]

 
 
上面是代码,拿到一个新版本,先用w32dasm反编译,然后:
1。搜索特征串mov dword ptr [2*edi+
  只有一个,找到下面的jne处,改为强制跳转,例如改为jmp 0044864e,
  跳转长度16进制一减就可以。
2。看0044864e处将al=1赋值给什么地址,如0044ee8b,记下
3。查找所有赋0语句,例如mov byte ptr [0044EE8B], 00
  很快找到一个,记下其16进制机器码,例如c6058bee440000,就不用找了。
  全部将其替换为c6058bee440001
4。随便一个16进制编辑器,修改即可。

  • 标 题:实际上在cfg里面存有code和使用次数。我最初也用这方法,但无新版本code,只好用前面的方法。从9.1开始我都... (363字)
  • 作 者:shizg
  • 时 间:2000-6-24 8:37:09
    阅读次数:40

  • 链 接:http://bbs.pediy.com

标题: 实际上在cfg里面存有code和使用次数。我最初也用这方法,但无新版本code,只好用前面的方法。从9.1开始我都这么干的:)

内容:
这是我最早跟9.04版时,发现cfg文件的
: 0x90开始是winhex运行的次数.
: 0xa8开始是输入的两个code的二进制,例如8.85版本的就是:
: 81030100160e08
: 0x10381就是66433,0x80e16就是527894 

BTW:这里可真是一个好地方,我也是一只菜鸟,多请教:)

  • 标 题:试试这个注册码:cdoe1-111184,code2-785826 (3千字)
  • 作 者:dr0
  • 时 间:2000-6-24 10:34:15
    阅读次数:66

  • 链 接:http://bbs.pediy.com

http://www.winhex.com

输入注册码之后关闭该程序,然后用bpx GetVolumeInformationA设断点,
等中断下来后按两次F12,看见如下的判断:

0167:0044E150  MOV      AL,03
0167:0044E152  CALL      0040BEF8        //这里头调用GetVolumeInformationA
0167:0044E157  NOT      AX
0167:0044E15A  MOVZX    EAX,AX
0167:0044E15D  CMP      EAX,[0045321C]
0167:0044E163  JNZ      0044E186
0167:0044E165  MOV      EAX,00453258
0167:0044E16A  SUB      EAX,08
0167:0044E16D  SUB      EAX,10
0167:0044E170  MOV      EAX,[EAX]            //取出code1
0167:0044E172  CALL      0042E9E0            //检查code1,并计算code2
0167:0044E177  MOV      EDX,00453258
0167:0044E17C  SUB      EDX,04
0167:0044E17F  SUB      EDX,10
0167:0044E182  CMP      EAX,[EDX]            //比较真假code2
0167:0044E184  JZ        0044E18A
0167:0044E186  XOR      EAX,EAX            //bad flag
0167:0044E188  JMP      0044E18C
0167:0044E18A  MOV      AL,01              //good flag
0167:0044E18C  MOV      EDX,00455384
0167:0044E191  INC      EDX
0167:0044E192  MOV      [EDX],AL            //set a flag
0167:0044E194  JMP      0044E1DD

上面的CALL 0042E9E0中会检查code1的合法性,如果合法则返回计算出来的code2,否则返回-1。
对code1的检查是比较麻烦的,如果有兴趣可以跟踪一下,大致上是这样的:求code1的平方,并将该平方值转换为字符串,
再将串的首字符和尾字符去掉,得到一个新串,再将新串转换成整数,然后再进行其它处理。
MOV [EDX], AL这条指令会设一个标志,用BPM EDX设断点监视此标志,很快看见如下的判断,是用来检查code1的:

0167:0043D279  CMP      BYTE PTR [00455385],00
0167:0043D280  JNZ      0043D29F
0167:0043D282  CMP      DWORD PTR [EDI+00000088],02
0167:0043D289  JLE      0043D29F
0167:0043D28B  PUSH      00
0167:0043D28D  PUSH      000DBBA0
0167:0043D292  PUSH      02
0167:0043D294  MOV      EAX,[004562B0]
0167:0043D299  PUSH      EAX
0167:0043D29A  CALL      USER32!SetTimer
0167:0043D29F  LEA      EAX,[EDI+000000E0]
0167:0043D2A5  SUB      EAX,08
0167:0043D2A8  MOV      EAX,[EAX]                    //取出code1
0167:0043D2AA  MOV      [00455424],EAX
0167:0043D2AF  CMP      DWORD PTR [00455424],000D9038
0167:0043D2B9  JG        0043D31C
0167:0043D2BB  CMP      DWORD PTR [00455424],00008235
0167:0043D2C5  JL        0043D31C
0167:0043D2C7  MOV      EAX,[00455424]
0167:0043D2CC  MOV      EBX,000003E8
0167:0043D2D1  CDQ
0167:0043D2D2  IDIV      EBX
0167:0043D2D4  CMP      EDX,00000247
0167:0043D2DA  JZ        0043D31C
0167:0043D2DC  MOV      EAX,[00455424]
0167:0043D2E1  MOV      EBX,000003E8
0167:0043D2E6  CDQ
0167:0043D2E7  IDIV      EBX
0167:0043D2E9  CMP      EDX,00000315
0167:0043D2EF  JZ        0043D31C
0167:0043D2F1  MOV      EAX,[00455424]
0167:0043D2F6  MOV      EBX,000003E8
0167:0043D2FB  CDQ
0167:0043D2FC  IDIV      EBX
0167:0043D2FE  CMP      EDX,7B
0167:0043D301  JZ        0043D31C
0167:0043D303  MOV      EAX,[00455424]
0167:0043D308  MOV      ECX,00000064
0167:0043D30D  CDQ
0167:0043D30E  IDIV      ECX
0167:0043D310  MOV      ECX,EDX
0167:0043D312  CMP      ECX,07
0167:0043D315  JZ        0043D327
0167:0043D317  CMP      ECX,54
0167:0043D31A  JZ        0043D327
0167:0043D31C  MOV      EAX,004553A0
0167:0043D321  SUB      EAX,1B
0167:0043D324  MOV      BYTE PTR [EAX],00          //bad guy!
0167:0043D327  XOR      EAX,EAX

根据上面的代码可知code1还要满足如下几个条件:
1、code1取值范围为[0x8235,0xD9038];
2、code1除以1000的余数不能等于0x247或者0x315或者0x7B;
3、code1除以100的余数必须为7或者0x54。

经过几次试探就可以找到合适的code1,继而得到对应的code2。
code1:      111184
code2:      785826

dr0/China