首页
社区
课程
招聘
[原创]正确获得同益起名大师v337 的注册号??解读 moon 帮主的妙文
发表于: 2005-11-29 20:08 20216

[原创]正确获得同益起名大师v337 的注册号??解读 moon 帮主的妙文

2005-11-29 20:08
20216
......
0055647F TfxhmMethodTable dw 6
00556481                   dw 16h
00556483                   dd offset Tfxhm@suiButton2Click ;退出按键
00556487 aSuibutton2click  db 0Fh,'suiButton2Click'
00556497                   dw 10h
00556499                   dd offset Tfxhm@FormClose       ;关闭窗口
0055649D aFormclose_0      db 9,'FormClose'
005564A7                   dw 11h
005564A9                   dd offset Tfxhm@FormCreate      ;建立窗口
005564AD aFormcreate_0     db 0Ah
005564AD                   db 'FormCreate'
005564B8                   dw 16h
005564BA                   dd offset Tfxhm@suiButton1Click ;注册按键
005564BE aSuibutton1cli    ck db 0Fh,'suiButton1Click'
005564CE                   dw 0Fh
005564D0                   dd offset Tfxhm@get_text        ;suiButton1Click 调用的校验注册申请码
                                                           ;和注册码并注册的子过程
005564D4 aGet_text         db 8,'get_text'
005564DD                   dw 0Fh
005564DF                   dd offset Tfxhm@FormShow        ;显示窗口
005564E3 aFormshow_0       db 8,'FormShow'
005564EC Tfxhm             db 5,'Tfxhm'                    ;类名
005564F2 word_5564F2       dw 5
005564F4                   dd offset TsuiForm@VMT@Prt      ;父辈 TsuiForm 的 VMT 表指针地址
......
procedure TForm1.Button2Click(Sender: TObject);
var
    Str: String;
begin
    Str := Edit1.Text;
    asm
        PushA
        Xor  Edx, Edx
        Mov  Esi, Str
        Mov  Ecx, 7
    @1:
        Mov  Al, [Esi + Edx]
        Xchg Al, [Esi + Edx + 3]
        Xchg Al, [Esi + Edx]
        Dec  Ecx
        Add  Edx, 4
        Cmp  Ecx, 0
        Jnz  @1
        Mov  Al,    [Esi + Edx + 1]
        Xchg Al, [Esi + Edx + 2]
        Xchg Al, [Esi + Edx + 1]
        PopA
    end;
    Edit2.Text := Str;
end;
Tfxhm@get_text
......
......
0055CF7E  mov eax, ds:AppIDAndName_CryHex@Prt ;注册申请号加姓氏和1FH 异或得到的结果
0055CF83  mov eax, [eax]
0055CF85  call sub_4FED88                 ;EncodeFunction1
0055CF8A  lea eax, [ebp+var_94]           ;这里断下获取计算23-27位的三个字符
0055CF8A                                  ;按照 moon帮主的给出的算法可以获得
0055CF90  pus  eax
0055CF91  lea  edx, [ebp+var_98]
0055CF97  mov  eax, ds:Serial_CryHex@Prt  ;注册号和 1FH 异或得到的结果
0055CF9C  mov  eax, [eax]
0055CF9E  call CycleConversionStr         ;经过 1FH 异或,即还原
0055CFA3  mov  eax, [ebp+var_98]
0055CFA9  mov  ecx, 5
0055CFAE  mov  edx, 17h
0055CFB3  call LStrCopy                   ;取第 23~27位
0055CFB8  mov  eax, [ebp+var_94]
0055CFBE  lea  edx, [ebp+var_90]
0055CFC4  call sub_4F0048                 ;进行计算得到三个字符,如果和上面计算得到的三个字符相同,则过
0055CFC9  mov  edx, [ebp+var_90]
0055CFCF  mov  eax, [ebp+var_C]
0055CFD2  call LStrCmp                    ;关键比较,比较两种方式和数据计算得到的三个字符
0055CFD7  jnz  loc_55D157
0055CFDD  lea  eax, [ebp+var_A0]
0055CFE3  push eax
0055CFE4  lea  edx, [ebp+var_A4]
0055CFEA  mov  eax, ds:Serial_CryHex@Prt
0055CFEF  mov  eax, [eax]
0055CFF1  call CycleConversionStr
0055CFF6  mov  eax, [ebp+var_A4]
0055CFFC  mov  ecx, 5
0055D001  mov  edx, 17h                   ;取注册号23~27
0055D006  call LStrCopy
0055D00B  mov  eax, [ebp+var_A0]
0055D011  lea  edx, [ebp+var_9C]
0055D017  call sub_4F0048
0055D01C  mov  edx, [ebp+var_9C]
0055D022  mov  eax, [ebp+var_C]
0055D025  call LStrCmp                    ;关键比较,比较两种方式和数据计算得到的三个字符,和前面相同
0055D02A  jnz  loc_55D0EA
0055D030  lea  eax, [ebp+var_A8]
0055D036  push eax
0055D037  lea  edx, [ebp+var_AC]
0055D03D  mov  eax, ds:Serial_CryHex@Prt
0055D042  mov  eax, [eax]
0055D044  call CycleConversionStr
0055D049  mov  eax, [ebp+var_AC]
0055D04F  mov  ecx, 3
0055D054  mov  edx, 1Dh                   ;取注册号 29~31 位
0055D059  call LStrCopy
0055D05E  mov  eax, [ebp+var_A8]
0055D064  call 31decimalToHex             ;对29~31位注册码进行31进制到十六进制的转换
0055D069  mov  ebx, eax
0055D06B  lea  eax, [ebp+var_B0]
0055D071  push eax
0055D072  lea  edx, [ebp+var_B4]
0055D078  mov  eax, ds:Serial_CryHex@Prt  ;取注册号(经过1FH异或处理)
0055D07D  mov  eax, [eax]
0055D07F  call CycleConversionStr         ;经过相同的过程还原
0055D084  mov  eax, [ebp+var_B4]
0055D08A  mov  ecx, 1Ch
0055D08F  mov  edx, 1                     ;取注册号 1~28 位
0055D094  call LStrCopy
0055D099  mov  eax, [ebp+var_B0]
0055D09F  call SumSerial_1to28            ;做 1~28 位累加(中间还有判断是否大于27000,见moon帮主的解释)
0055D0A4  cmp  ebx, eax                   ;关键比较,将前面进制转换得到的数和累加和比较,在这里下断点
0055D0A6  jnz  loc_55D157                 ;因为注册码没有完成,为了能够继续,暂时将这句 Nop 掉
0055D0AC  mov  eax, offset a111_2         ; "111"
0055D0B1  call CheckSerial_17to22         ;这里是获取 17~22 位注册码的入口
0055D0B6  mov  [ebp+var_1], al
0055D0B9  cmp  [ebp+var_1], 0
0055D0BD  jz   short  loc_55D0CC
0055D0BF  lea  eax, [ebp+var_C]
0055D0C2  mov  edx, offset a111_2         ;"111"
0055D0C7  call LStrLAsg
0055D0CC
0055D0CC loc_55D0CC:
0055D0CC  cmp  [ebp+var_1], 0
0055D0D0  jz   loc_55D157
0055D0D6  mov  eax, [ebp+var_C]
0055D0D9  mov  edx, offset a111_2         ;"111"
0055D0DE  call LStrCmp
0055D0E3  jnz  short  loc_55D0EA
0055D0E5  call CheckSerial_1to16          ;这里是获取 1~16 位注册码的入口
procedure TForm1.Button1Click(Sender: TObject);
const
    Str = '0KMT1EIJ2AB34FGH56PYZ7NRS89CDUVX';
var
    X1, X2: Integer;
    x, y, z: Char;
    a, b, c, d, e: string;
    Pin: string;
begin
    Pin := Edit1.Text;
    x   := Pin[1];
    y   := Pin[2];
    z   := Pin[3];
    x1  := (Byte(x) shr 3) and $1F;
    a   := Copy(Str, x1 + 1, 1);
    x1  := ((Byte(x) shl 2) and $1C) or ((Byte(y) shr 4) and $03);
    b   := Copy(Str, x1 + 1, 1);
    x1  := Byte(y)  and $0F;
    c   := Copy(Str, x1 + 1, 1);
    x1  := ((Byte(y) shr 3) and $18) + ((Byte(z) shr 5) and $07);
    d   := Copy(Str, x1 + 1, 1);
    x1  := (Byte(z) and $1F);
    e   := Copy(Str, x1 + 1, 1);
    Edit2.Text := a + b + c + d + e;
end;
0055D0A6  jnz  loc_55D157             ;因为注册码没有完成,为了能够继续,暂时将这句 Nop 掉
0055D0AC  mov  eax, offset a111_2     ;"111"
0055D0B1  call CheckSerial_17to22     ;这里是获取 17~22 位注册码的入口
跟进 0055D0B1  call CheckSerial_17to22
......
...... 省略
0050C705  mov  edx, [ebp+var_20]
0050C708  mov  eax, [ebp+var_1C]
0050C70B  call DES_EncryStr           ;在这里进行 DES 的 EncryStr 加密运算,运算结果再经过
0050C70B                              ;另一过程处理,这个子过程我们后面还要用到
0050C710  mov  edx, [ebp+var_60]      ;moon 文中提到在这个位置获取 17~22 位注册码,可能
0050C710                              ;是帮主写文章时粗心了,正确的位置应该在下面删除第5位
0050C710                              ;相同字母后才取结果。
0050C713  lea  eax, [ebp+var_20]
0050C716  call LStrLAsg
0050C71B  lea  ecx, [ebp+var_64]
0050C71E  mov  eax, [ebp+var_20]
0050C721  mov  dl, [eax+5]            ;取出 EncryStr 运算结果的字符串的第 5 位
0050C724  mov  eax, [ebp+var_20]
0050C727  call DelChr                 ;将 EncryStr 运算结果中凡是和第5位相同的字母删除
0050C72C  mov  edx, [ebp+var_64]
0050C72F  lea  eax, [ebp+var_20]      ;这里下断点,从Edx中取前6位,即我们要的第 17-22 位
......
......省略
0055D0E5  call  CheckSerial_1to16     ;这里是获取 1~16 位注册码的入口
跟进 call CheckSerial_1to16
......
......省略
00508EEB  lea  edx, [ebp+var_18]
00508EEE  mov  eax, ds:AppIDAndName_CryHex@Prt
00508EF3  mov  eax, [eax]
00508EF5  call ConversionHex10To16
00508EFA  lea  eax, [ebp+var_18]
00508EFD  lea  edx, [ebp+var_8]
00508F00  call ConversionHexAndFNameToStr
00508F05  lea  eax, [ebp+var_20]
00508F08  push eax
00508F09  lea  edx, [ebp+var_24]
00508F0C  mov  eax, ds:Serial_CryHex@Prt
00508F11  mov  eax, [eax]
00508F13  call CycleConversionStr
00508F18  mov  eax, [ebp+var_24]
00508F1B  mov  ecx, 10h
00508F20  mov  edx, 1                     ;取注册号 1~16 位
00508F25  call LStrCopy
00508F2A  mov  eax, [ebp+var_20]
00508F2D  lea  ecx, [ebp+var_1C]
00508F30  mov  edx, [ebp+var_8]
00508F33  call DES_DecryStr               ;这是 DES 的逆运算,我们再跟进
00508F38  mov  eax, [ebp+var_1C]
00508F3B  lea  edx, [ebp+var_18]
00508F3E  call ConversionHex10To16
00508F43  lea  eax, [ebp+var_18]
00508F46  push eax
00508F47  lea  edx, [ebp+var_38]
00508F4A  mov  eax, ds:AppIDAndName_CryHex@Prt
00508F4F  mov  eax, [eax]
00508F51  call sub_4FBA70
00508F56  mov  eax, [ebp+var_38]
00508F59  lea  edx, [ebp+var_34]          ;这里是我们要下断点的地方
......
...... 省略
跟进 call  DES_DecryStr
......
......省略
004F788E  lea  edx, [ebp+var_C]
004F7891  mov  eax, [ebp+var_4]
004F7894  call  sub_4E97BC
004F7899  mov  ecx, ebx
004F789B  mov  edx, [ebp+var_8]
004F789E  mov  eax, [ebp+var_C]
004F78A1  call DecryStr                   ;DES 逆运算
004F78A6  xor  eax, eax                   ;这里是 moon 帮主提出下断点处,还有一些其他相应的做法
                                                            ;请看 moon 原文。
......
......省略
EBP-38  0012F910    00F303D0    ASCII "5FF51115"
EBP-34  0012F914    00000000
EBP-30  0012F918    00000000
EBP-2C  0012F91C    00000000
EBP-28  0012F920    00000000
EBP-24  0012F924    00F30038    ASCII "123456789ABCDEFGDEDAHIB8MBMBTUV"
EBP-20  0012F928    00F29F5C    ASCII "123456789ABCDEFG"
EBP-1C  0012F92C    00F3009C
EBP-18  0012F930    C338FAD3
EBP-14  0012F934    DD5CB3D0
EBP-10  0012F938    D5D42656
EBP-C   0012F93C    A2BB6C94
EBP-8   0012F940    00F2FFF8    ASCII "M9BJBBRIDE88TNP4"
EBP-4   0012F944    00000000

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (37)
雪    币: 238
活跃值: (326)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
2
说明:这样得到的注册号其实对过去几个版本如 v3.34、v3.35、v3.36都是实用的,但现在除了v3.37,其余的版本都无法使用了,原因是同益起名每一版都有时间限制,过了期限,就不能运行了,另外专业版的算法差不多,但两者不通用,只是差不多。专业版也有日期限制,比如vp3.33的有效期就在今年年底,明年就不能使用了。除非你爆破,将日期限制去掉(很容易,两分钟搞定)
2005-11-29 20:33
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
3
不错

moon帮主
斧头帮还是丐帮?
2005-11-29 22:57
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼上的..汗一个.....

我想入此帮.......
2005-11-29 23:17
0
雪    币: 238
活跃值: (326)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
5
moon 是丐帮的帮主
2005-11-30 03:33
0
雪    币: 136
活跃值: (429)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
6
呵呵,收藏了,如果能把两个小工具弄上来。。。
2005-11-30 08:40
0
雪    币: 10665
活跃值: (3574)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
呵呵,收藏了
2005-11-30 09:18
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
8
Good!^O^
2005-11-30 16:03
0
雪    币: 671
活跃值: (723)
能力值: ( LV9,RANK:1060 )
在线值:
发帖
回帖
粉丝
9
moon是翁美龄
2005-11-30 20:53
0
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
10
专业呀专业!!!
2005-11-30 22:56
0
雪    币: 136
活跃值: (429)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
11
我在获取的 17~22 位注册码时,根据上述断点,系统断不下来,不知何故。晕
2005-12-1 11:28
0
雪    币: 238
活跃值: (326)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
12
你有没有将 0055D0A6 的 jnz loc_55D157 Nop 掉?
因为校验29-31位注册码是在前边进行的,而我们只能在得到1-28位的注册码后,才能利用1-28位注册码的累加和所得到的数来计算第29-31位,所以,整个过程中,都需要将对第29-31的校验 Nop 掉,我文中都有详细说明。
2005-12-1 11:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
学习楼主!
2005-12-1 12:19
0
雪    币: 234
活跃值: (370)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
14
强!学习了
2005-12-1 12:37
0
雪    币: 136
活跃值: (429)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
15
最初由 gzgzlxg 发布
你有没有将 0055D0A6 的 jnz loc_55D157 Nop 掉?
因为校验29-31位注册码是在前边进行的,而我们只能在得到1-28位的注册码后,才能利用1-28位注册码的累加和所得到的数来计算第29-31位,所以,整个过程中,都需要将对第29-31的校验 Nop 掉,我文中都有详细说明。


这个我已经NOP,但是在我机器上还是断不下来,因为前面几行,还有2个JNZ跳,我把这2个一起NOP掉后,断点才起作用。
呵呵。
2005-12-1 12:44
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
又学到了一招
2005-12-1 13:27
0
雪    币: 233
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
17
这个软件用来研究算法倒是蛮好~
2005-12-1 15:16
0
雪    币: 136
活跃值: (429)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
18
算出3.36的注册码,注册成功,谢谢楼主,但是发现一个问题:点姓名分析,等半天无反映,强制结束再进去,提示没注册。晕死了。
2005-12-1 16:08
0
雪    币: 4908
活跃值: (2343)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
19
最初由 gzgzlxg 发布
我们分析的所有代码都是属于 Tfxhm@get_text 过程和它的子过程的。 Tfxhm@get_text 起始地址: 0055986C

........


楼主如何分析到55986C的?用DEDE吗?还是有什么其他的工具能直接把DELPHI的子程序地址直接显示出来?
2005-12-1 18:40
0
雪    币: 238
活跃值: (326)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
20
最初由 yzslly 发布


这个我已经NOP,但是在我机器上还是断不下来,因为前面几行,还有2个JNZ跳,我把这2个一起NOP掉后,断点才起作用。
呵呵。


请你仔细的按照我文中的做法,‘这前面几行那还有2个JNZ跳’是不要 Nop 掉的,包括我文中在取得29~31位注册码时,也将这2个JNZ跳给 Nop 掉了,其实这都是不需要的,并不是我写错了,而是你做错了,下面我们仔细分析你错在那里:
0055CF2D loc_55CF2D:
0055CF2D     lea edx, [ebp+var_8C]
0055CF33     mov eax, [esi+32Ch]       ; suiEdit3 注册号
0055CF39     call GetText
0055CF3E     mov eax, [ebp+var_8C]
0055CF44     lea edx, [ebp+var_88]
0055CF4A     call Trim
0055CF4F     mov eax, [ebp+var_88]
0055CF55     lea edx, [ebp+var_84]
0055CF5B     call DesequencStr
0055CF60     mov eax, [ebp+var_84]
0055CF66     lea edx, [ebp+var_80]
0055CF69     call CycleConversionStr   ; 每位异或1FH
0055CF6E     mov edx, [ebp+var_80]
0055CF71     mov eax, ds:Serial_CryHex@Prt
0055CF76     call LStrAsg
0055CF7B     lea edx, [ebp+var_C]
0055CF7E     mov eax, ds:AppIDAndName_CryHex@Prt
0055CF83     mov eax, [eax]
0055CF85     call sub_4FED88           ; EncodeFunction1
0055CF8A     lea eax, [ebp+var_94]     ; 这里断下获取计算23-27位的三个字符
0055CF8A                               ; 按照 moon帮主的给出的算法可以获得
0055CF90     push eax
0055CF91     lea edx, [ebp+var_98]
0055CF97     mov eax, ds:Serial_CryHex@Prt
0055CF9C     mov eax, [eax]
0055CF9E     call CycleConversionStr
0055CFA3     mov eax, [ebp+var_98]
0055CFA9     mov ecx, 5
0055CFAE     mov edx, 17h              ;这里取第 23~27 位注册码
0055CFB3     call LStrCopy
0055CFB8     mov eax, [ebp+var_94]
0055CFBE     lea edx, [ebp+var_90]
0055CFC4     call sub_4F0048
0055CFC9     mov edx, [ebp+var_90]
0055CFCF     mov eax, [ebp+var_C]
0055CFD2     call LStrCmp              ; 关键比较,这里就是你 nop 掉的第一个跳。
0055CFD7     jnz loc_55D157
0055CFDD     lea eax, [ebp+var_A0]
0055CFE3     push eax
0055CFE4     lea edx, [ebp+var_A4]
0055CFEA     mov eax, ds:Serial_CryHex@Prt
0055CFEF     mov eax, [eax]
0055CFF1     call CycleConversionStr
0055CFF6     mov eax, [ebp+var_A4]
0055CFFC     mov ecx, 5
0055D001     mov edx, 17h              ; 这里取第 23~27 位注册码
0055D006     call LStrCopy
0055D00B     mov eax, [ebp+var_A0]
0055D011     lea edx, [ebp+var_9C]
0055D017     call sub_4F0048
0055D01C     mov edx, [ebp+var_9C]
0055D022     mov eax, [ebp+var_C]
0055D025     call LStrCmp              ; 关键比较,这里是你 nop 掉的第二个跳。
0055D02A     jnz loc_55D0EA
0055D030     lea eax, [ebp+var_A8]
0055D036     push eax
0055D037     lea edx, [ebp+var_AC]
0055D03D     mov eax, ds:Serial_CryHex@Prt
0055D042     mov eax, [eax]
0055D044     call CycleConversionStr
0055D049     mov eax, [ebp+var_AC]
0055D04F     mov ecx, 3
0055D054     mov edx, 1Dh              ; 取注册号 29~31 位
0055D059     call LStrCopy
0055D05E     mov eax, [ebp+var_A8]
0055D064     call @31decimalToHex
0055D069     mov ebx, eax
0055D06B     lea eax, [ebp+var_B0]
0055D071     push eax
0055D072     lea edx, [ebp+var_B4]
0055D078     mov eax, ds:Serial_CryHex@Prt
0055D07D     mov eax, [eax]
0055D07F     call CycleConversionStr
0055D084     mov eax, [ebp+var_B4]
0055D08A     mov ecx, 1Ch
0055D08F     mov edx, 1                ; 取注册号 1~28 位
0055D094     call LStrCopy
0055D099     mov eax, [ebp+var_B0]
0055D09F     call SumSerial_1to28
0055D0A4     cmp ebx, eax
0055D0A6     jnz loc_55D157            ; 因为注册码没有完成,为了能够继续,暂时将这句 Nop 掉


下面是原文

在 Edit1 输入 VRB 按 Button1 键,在 Edit2 窗口中给出我们要的结果 B8MBM 。现在来继续完善我们的注册码。将得到的字符串替换原注册码中第 23~27 位:
1234567890123456789012 34567 8 901
123456789ABCDEFGHIJKLM B8MBM B TUV

用前面的小程序进行调位,得新注册码如下:
1234567890123456789012345678901
42318675CAB9GEFDKIJH8MBLBBMMTVU

三、 获得的 17~22 位注册码:
在OD中按 Ctrl-F2组合键,重新运行程序,将 0055D0A6 的 jnz loc_55D157 Nop 掉
......
......省略
在 0050C72C 处下断点,按F9 运行,出现同益启动画面后选‘注册’->‘输入注册码',在【起名的姓氏】中输入你的姓氏,我这里是输入‘吕’,在【输入注册码】中将上面的最后得到的注册码42318675CAB9GEFDKIJH8MBLBBMMTVU拷贝过去。点击【注册】按键。

请你仔细看上面的原文
为什么我要将最后得到的注册码42318675CAB9GEFDKIJH8MBLBBMMTVU拷贝过去。就是为了避过这两个跳,在:
0055CFA9     mov ecx, 5
0055CFAE     mov edx, 17h              ;这里取第 23~27 位注册码
......
......
0055CFFC     mov ecx, 5
0055D001     mov edx, 17h              ; 这里取第 23~27 位注册码

这两个地方,将取我们前面得到的第 23~27 位注册码 BLBBM,而这个注册码是我们刚得到的有效的的注册码,这两个校验因为校验的是有效的注册码,所以不需要 Nop 。你自以为有了新的发现或以为我写文章故意隐瞒了什么,我很遗憾,希望后来的朋友在读别人文章时要仔细的读,有时没有做出来,不是别人错了,而是你自以为聪明,省略了某些你认为不重要的东西。
再看我文中五、 获取最后 29~31 位注册码中也将这两个跳转 Nop 掉了,其实也是不需要的,因为我们输入的注册码在相应的位置都是有效的,这些校验应该是可以顺利通过的,那么你也许要问,你为什么会加上那么几句,实话实说,那是我的笔误,因为我在做这个过程时,自己是随便输入一些注册码的,我写了一个很简单的脚本,每次调试时都先运行这个脚本,将许多可能出现问题的地方都给 Nop 掉了,后来在写文章时,觉得那么多地方其实是不需要 Nop 掉的,经过整理,才有了文中的结果,但还是多 Nop 掉了两个地方。现在既然已经写了这个说明,也就不再修改原文了。

最初由 yzslly 发布

算出3.36的注册码,注册成功,谢谢楼主,但是发现一个问题:点姓名分析,等半天无反映,强制结束再进去,提示没注册。晕死了。


我想,你可能是天下最没有耐心的读者,你没有看到我在后面加的那个说明吗?
说明:这样得到的注册号其实对过去几个版本如 v3.34、v3.35、v3.36都是实用的,但现在除了v3.37,其余的版本都无法使用了,原因是同益起名每一版都有时间限制,过了期限,就不能运行了,......
你算的注册码虽然是正确的,但v3.36版已经过期了,就算是正确的注册码也不能运行了,这是 v3.36 其中一个检验日期的地方,注意,原作者怕别人能轻易的破去这个地方,对日期的检测是经过变换的,并不是直接检测某年某月,这里列出其中的一个地方,还有几处,你可以自己去找,下关于时间的中断,我就不再多说了。
v3.36
05431AD     call @Sysutils@Date               ; Sysutils::Date
005431B2     add esp, 0FFFFFFF8h
005431B5     fstp [esp+28h+var_28]
005431B8     wait
005431B9     lea edx, [ebp+var_168]
005431BF     mov eax, offset aYymm_2           ; "yymm"
005431C4     call @Sysutils@FormatDateTime     ; Sysutils::FormatDateTime
005431C9     mov eax, [ebp+var_168]
005431CF     call @Sysutils@StrToInt           ; Sysutils::StrToInt
005431D4     cmp eax, 1FCh                     ;这里判断是否过期了
005431D9     jg  short loc_543209
005431DB     call @Sysutils@Date               ; Sysutils::Date
005431E0     add esp, 0FFFFFFF8h
005431E3     fstp [esp+28h+var_28]
005431E6     wait
005431E7     lea edx, [ebp+var_16C]
005431ED     mov eax, offset aYymm_2           ; "yymm"
005431F2     call @Sysutils@FormatDateTime     ; Sysutils::FormatDateTime
005431F7     mov eax, [ebp+var_16C]
005431FD     call @Sysutils@StrToInt           ; Sysutils::StrToInt
00543202     cmp eax, 19Ah
00543207     jge short loc_54321C
00543209 loc_543209:                           
00543209     xor eax, eax
0054320B     call Treate_REG                   ;这里清除注册表
00543210     mov eax, [ebx]
00543212     call System_TObject_Free
00543217     jmp loc_543658

写到这里,我觉得不应该是你,而是我晕,快晕死了了。
2005-12-1 21:13
0
雪    币: 238
活跃值: (326)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
21
最初由 oep1 发布


楼主如何分析到55986C的?用DEDE吗?还是有什么其他的工具能直接把DELPHI的子程序地址直接显示出来?


最初是跟踪读写注册表的调用,然后找到注册校验的地方,然后再用 IDA 将这段代码和相应的地方仔细分析。
2005-12-1 21:37
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
好贴.........
2005-12-1 23:33
0
雪    币: 238
活跃值: (326)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
23
最初由 okdodo 发布
这个软件用来研究算法倒是蛮好~

okdodo:
你好,你在这个软件上是很有研究的,希望得到你的意见。

另外,我是用汇编写的注册机,连我自己看了都绝到,差不多要一万句汇编代码,其实没有花多少时间,就是根据这篇文章的解法,将同益中相应的汇编代码拷贝出来,整理一下,也就是两天业余时间。如果要精简代码,估计5000句到7000句就可以解决,但太花费时间了,懒得做了。那些汇编程序简直没法解读读,因为都是搬过来了事。

gzgzlxg
2005-12-2 07:34
0
雪    币: 136
活跃值: (429)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
24
最初由 gzgzlxg 发布


请你仔细的按照我文中的做法,‘这前面几行那还有2个JNZ跳’是不要 Nop 掉的,包括我文中在取得29~31位注册码时,也将这2个JNZ跳给 Nop 掉了,其实这都是不需要的,并不是我写错了,而是你做错了,下面我们仔细分析你错在那里:

你自以为有了新的发现或以为我写文章故意隐瞒了什么,我很遗憾,希望后来的朋友在读别人文章时要仔细的读,有时没有做出来,不是别人错了,而是你自以为聪明,省略了某些你认为不重要的东西。
再看我文中五、 获取最后 29~31 位注册码中也将这两个跳转 Nop 掉了,其实也是不需要的,因为我们输入的注册码在相应的位置都是有效的,这些校验应该是可以顺利通过的,那么你也许要问,你为什么会加上那么几句,实话实说,那是我的笔误,因为我在做这个过程时,自己是随便输入一些注册码的,我写了一个很简单的脚本,每次调试时都先运行这个脚本,将许多可能出现问题的地方都给 Nop 掉了,后来在写文章时,觉得那么多地方其实是不需要 Nop 掉的,经过整理,才有了文中的结果,但还是多 Nop 掉了两个地方。现在既然已经写了这个说明,也就不再修改原文了。


[code]
0055CF2D loc_55CF2D:
........

这不是我错,因为我在XP系统下确实如楼主所言,不必改这个JNZ,可是我用2000系统时(这是2台不同的机器),如果不改的话,就无法继续分析了,我自己也晕啊。。。。。所以楼主不能一棒子打死人,因为我确实碰到了这种情况。呵呵。不过还是谢谢你,后面我用3.36算出的注册码注册3.37版。
2005-12-2 08:37
0
雪    币: 238
活跃值: (326)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
25
最初由 yzslly 发布

这不是我错,因为我在XP系统下确实如楼主所言,不必改这个JNZ,可是我用2000系统时(这是2台不同的机器),如果不改的话,就无法继续分析了,我自己也晕啊。。。。。所以楼主不能一棒子打死人,因为我确实碰到了这种情况。呵呵。不过还是谢谢你,后面我用3.36算出的注册码注册3.37版。

我就是在 win2000 系统下完成的,而且从理论上讲,如果非要 Nop 这两个 JNZ 那就证明前面得到的注册码是不对的,你自己想想,是不是这个理。如果现在通不过,将来真正注册时也一定通不过。那么只有一种可能,这个获取注册码的方法并不适合所有的系统,对于这样的结论,我倒是能够接受的,因为我并没有在其他的机器和系统进行过验证。
另外,还有一种情况也会发生注册通不过的情况,这种情况我自己就遇到过,moon 帮主也遇到过,同益起名的注册申请码是通过CUPID和硬盘系列号计算而来的,问题就出在有些机器读取 CUPID(在我的机器上就出现这个问题) 或硬盘参数(这个我没有证实过)会发生变化的。这样同益起名得到的注册申请号就会不同,相应的注册码也会不同。
2005-12-2 08:57
0
游客
登录 | 注册 方可回帖
返回
//