查看: 25092|回复: 13

同益起名大师 V3.37 版的注册码获取方法步骤。

[复制链接]
发表于 2009-1-7 19:09:57 | 显示全部楼层 |阅读模式
本帖最后由 天涯 于 2009-1-7 11:15 编辑 - z  p4 J4 }) p  A, j: s+ h' E

0 f7 Q" W" l( G& hhttp://www.unpack.cn/viewthread.php?tid=2015&extra=page%3D1&page=1
& K) }- |% O4 [. P. t& K0 T1 r9 e" g9 m原创作者:gzgzlxg4 F  O8 q. Y  F$ g
2 h4 g, ?: S" Z4 @1 B, b- M
原文写的非常的详细,请耐心阅读,其实在看雪也有,但看雪现在注册不容易啊。
8 o9 W0 R2 s- N& a$ U$ @, n( s' ~9 R& k* {
按照原文,一步步的做,就可以成功的注册 V3.37的版本。0 o! e& g5 u. g6 A* E1 ^

% ]9 Q% O' `9 r6 U7 P0 r1.安装3.37版,调试3.37脱壳版。注册,OK。& A& u4 M/ D; C- X; V$ ~: t
2.再安装3.81普及版,用3.37版的注册信息再注册一次,OK。
6 S' q& V2 \& z; r; l& q- y3.注册过程中会用到的两个东东。[附件中]% A& M6 Y( p  @3 R
( P& J  C# N9 L" ?6 r5 g  Y0 X
最后,直接使用V3.81版,给你的宝宝起个自己喜欢的名字 :)0 Z1 R& Q3 {# R! f+ o- E6 ~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2009-1-7 19:25:00 | 显示全部楼层
正确获得同益起名大师v337 的注册号――解读 moon 帮主的妙文2 e4 S' u, n! O" O. X* {0 r1 Z
【作者】gzgzlxg. ?9 k8 E2 a; K4 q( @& q: B- f
【声明】只是好奇,没有别的目的,如有,我就把注册机发表了(已经写好了),不要发信向我要注册机,我不会发表的,这也是看雪老大的要求,其实我觉得这篇文章已经很过分。按这篇文章,你100%可以得到正确的注册码。
5 M3 K7 `9 A& t# s/ w) @7 z【工具】IDA,OllyDBG1 ^4 Y1 t/ ]( Q! R1 S* ^
【软件】使用我在【ACProtect 1.41 -- 同益起名大师 v3.36、v3.37、vp3.33(专业版)完美脱壳】中所完美脱壳后的 GoodName.Exe v3.37版。使用脱壳版,跟踪比较容易,当然你也可以直接使用原版,但会困难一些。+ O) g" g6 u7 \
http://bbs.pediy.com/showthread. ... &threadid=16204- m' Y, _8 H  p1 w2 `7 ~
【注】读此文前,请先读 moon 帮主的【谜----同益起名大师3.36注册算法分析】,2 ?* a& k: Z8 `5 O
http://bbs.pediy.com/showthread. ... &threadid=14716  凡是和moon 相同的部分我就不再多废笔墨。/ M/ t4 i& e% m
本文同时发表在看雪论坛和DFCG,转载时请保持完整,版主如果觉得不合适可以删除。
1 A: M; c) f4 G. W! V前言:
; O4 W6 j& |' m. n- t同益起名的注册码验证遍布全程序,在主窗体建立,子窗口建立,按键操作,对注册码和注册申请码的验证无所不在,而且计算方法来回重复,例如获取注册申请码就有三个完全相同的过程,DES 算法也有完整的两套。我们用来分析注册码取的是注册操作部分,其实在主窗口建立、子窗口建立的过程中都可以进行,因为他们是完全相同的。
$ d0 ~. z8 |) T5 X$ d6 X3 y这是注册窗口(Tfxhm)VMT表中的方法表部分,(全表太长)。这些代码都是在 IDA 中分析得到的。 " t) W+ g& `' `4 A. a
复制内容到剪贴板 * g6 F9 K6 m8 R( Z/ h
代码:......
, q6 q; l! l, h' @0055647F TfxhmMethodTable dw 69 ]( x$ u9 ~% r8 J+ p
00556481                   dw 16h
& ]1 D# q( K  m! _3 ?. j0 @& b00556483                   dd offset Tfxhm@suiButton2Click ;退出按键  }" f( ?  a' R
00556487 aSuibutton2click  db 0Fh,'suiButton2Click'
: N" s2 t1 N6 `5 p00556497                   dw 10h1 a# p* b) v0 z$ p) C
00556499                   dd offset Tfxhm@FormClose       ;关闭窗口
5 `4 R' S/ t' F" W0055649D aFormclose_0      db 9,'FormClose'
) e7 m: e$ S! C) s. e1 |2 {( i! d005564A7                   dw 11h0 N) G5 x+ `; k$ e
005564A9                   dd offset Tfxhm@FormCreate      ;建立窗口
5 B8 \" [6 s+ ]005564AD aFormcreate_0     db 0Ah5 D5 `4 I) v, Q1 f4 C
005564AD                   db 'FormCreate'
5 {% a6 Z* g2 @3 H4 |  Q" V005564B8                   dw 16h' A  t3 O* y( ?6 |3 C5 K3 X2 w4 x
005564BA                   dd offset Tfxhm@suiButton1Click ;注册按键
$ W) a. r  N" y4 h8 {005564BE aSuibutton1cli    ck db 0Fh,'suiButton1Click'
/ H4 A$ H0 \# ]% _9 y4 s/ @) B& Q005564CE                   dw 0Fh
' s! j9 h5 X7 X005564D0                   dd offset Tfxhm@get_text        ;suiButton1Click 调用的校验注册申请码9 K' [8 e/ |* J9 e+ f$ C
                                                           ;和注册码并注册的子过程
( ^$ s9 w- j; x9 ]005564D4 aGet_text         db 8,'get_text'' X0 M, z8 ^$ \* o" }
005564DD                   dw 0Fh7 M) f5 Y# T6 T- T  `
005564DF                   dd offset Tfxhm@FormShow        ;显示窗口
/ V( O8 A# N5 f3 |6 n9 m5 ]' P3 g) M005564E3 aFormshow_0       db 8,'FormShow'. _1 @7 [) E2 z, v5 H0 i% u
005564EC Tfxhm             db 5,'Tfxhm'                    ;类名
8 n( I7 K, i; L0 V  o' g5 N005564F2 word_5564F2       dw 5
6 i' s3 E9 F3 h' }$ M005564F4                   dd offset TsuiForm@VMT@Prt      ;父辈 TsuiForm 的 VMT 表指针地址4 d/ K9 o- Q3 K3 w
......我们分析的所有代码都是属于 Tfxhm@get_text 过程和它的子过程的。 Tfxhm@get_text 起始地址: 0055986C; {+ J* j/ a5 u: n
一、 获取注册码第28位5 t; _$ l+ y/ A
确定你想注册姓氏的正确笔划数(必须和同益数据库中 slzik 所查到的相同,以繁体字笔画数为准,同益库中有些字的笔画数并不正确,这时你可以在同益起名的姓名分析中获得姓氏的笔画数)。在下面的字符串中从左到右查寻,得到第 28 位注册码:例如,吕:繁体字为 7 划。(从0开始数)
) \8 B; m% I/ D# c; N( Q0123456 7 89012345678901234567890
2 a1 d" ^1 R/ g& ]" ^0AH6CD3 B EF4TRS2PUV5K1MN78YZ9GIJ6 l% d( v6 Q. n# r% @5 D
得到的字母为 B,这样我们的注册码有如下形式:(31 位)下面是我们的起始注册码6 h0 i+ Z, E; k% y
123456789012345678901234567 8 901
' ]% w, H# W7 {& L6 ?123456789ABCDEFGHIJKLMNOPQR S TUV8 F: y$ g0 W4 v+ B4 K+ n3 e* k- U3 N
加入第 28 个字母 B,得如下注册码:
" P1 x) E6 A/ d. P* I  a, h, {& u123456789ABCDEFGHIJKLMNOPQR B TUV& k1 Y4 O; P2 [+ Z  c
根据 moon 提出的换位法(4*i+1位和4*(i+1)位互换,i=0,1,2,...,末尾不足4位时,最后两位互换),2528位对调,这个B应该在第25 位
  Q0 U/ q; ~" f5 x, y为了便于调位,写了几句Delphi的小程序来完成:(这种操作,还是汇编容易,所以实际还是汇编写的) 6 m" F1 [5 j, s* U* \
复制内容到剪贴板
3 v0 _1 t) \- C3 B5 \代码:procedure TForm1.Button2Click(Sender: TObject);
# L+ P8 J9 `* X8 svar7 m( _: t" p  n+ D) U
    Str: String;" z6 ?4 O! C* C9 O
begin0 n8 r) o8 w4 e" n
    Str := Edit1.Text;" F' {8 j+ i7 M" t
    asm
+ \. N) `/ r% n, O4 R3 K, e        PushA
' p. R2 @% H7 W  K8 P" D        Xor  Edx, Edx
2 i/ q, y( U2 b1 A3 X        Mov  Esi, Str
& }& \+ Y" B" }- g; u" B% K        Mov  Ecx, 7
- Y1 G& l0 D, ?. t$ h( \# z    @1:9 I& Z1 j9 B  A9 ~
        Mov  Al, [Esi + Edx]
3 m: B% g0 Q* m9 n        Xchg Al, [Esi + Edx + 3]$ G, W! X$ w9 P) {0 d$ j. R  x
        Xchg Al, [Esi + Edx]
6 D. B5 j- P1 V7 [' ^" v        Dec  Ecx0 x  p+ ]( v  H& s4 f
        Add  Edx, 4: v7 _0 ~+ E" V
        Cmp  Ecx, 0
! T! N5 y/ n1 c2 h        Jnz  @1# d" |" x1 V2 Y
        Mov  Al,    [Esi + Edx + 1]  Q8 j9 N3 J& x' X4 N* j
        Xchg Al, [Esi + Edx + 2]
! e# W4 J! ?8 ^        Xchg Al, [Esi + Edx + 1]! n5 K" `' g7 Q) O$ e! v/ D, V
        PopA- V# k" r7 a1 |4 {; N
    end;9 o( ]8 v. q; \" \& C
    Edit2.Text := Str;
0 C. [- |5 {% B0 N0 _end;在 Edit1 中输入 123456789ABCDEFGHIJKLMNOPQRBTUV,按 Button2 键得到下面的新注册码:. A% F5 H6 O! y9 k9 e( P4 e
新注册码为:
9 A) k# Z) S, L* \& W) h2 u3 W! G123456789012345678901234 5 678901
: T  s0 e$ A: |; e42318675CAB9GEFDKIJHOMNL B QRPTVU
2 c9 d! }4 O! }+ R) `1 ]1 w, k: J具体分析请看 moon 的解释。/ f3 x* T# W0 O
二、 获取注册码 23~27 位注册码
/ n( I5 t' Z# K7 H9 }用OD载如 UNGDN.exe (脱壳后的程序) 6 U2 ?2 a5 h5 Q1 j& O
复制内容到剪贴板 ! ]! w2 V8 J8 D& ~& h' i( h; |" K9 N2 m
代码:Tfxhm@get_text
8 D' C& g- Y( k3 c......
0 t* `* S* }$ B: J' |7 Q7 s) g! Y6 p......
: A3 i' K7 P. u* o0055CF7E  mov eax, ds:AppIDAndName_CryHex@Prt ;注册申请号加姓氏和1FH 异或得到的结果
8 {1 B2 k4 w. [  T1 X$ R) F  C0055CF83  mov eax, [eax]
& o1 Y: D0 }. Q5 E3 t0055CF85  call sub_4FED88                 ;EncodeFunction1  Y3 q. b, W$ ], G: ^2 A
0055CF8A  lea eax, [ebp+var_94]           ;这里断下获取计算23-27位的三个字符
) G: J7 q# U4 [1 H' K+ L% E/ S# J0055CF8A                                  ;按照 moon帮主的给出的算法可以获得
% c# S( G  V  F  K" }  E0055CF90  pus  eax
8 ]0 G$ s% e* j6 Q' o* l2 Z0055CF91  lea  edx, [ebp+var_98]) [- X" j) `- f' ?
0055CF97  mov  eax, ds:Serial_CryHex@Prt  ;注册号和 1FH 异或得到的结果
1 @0 y/ ~( i7 T3 N0 b# E0055CF9C  mov  eax, [eax]; s+ i4 p' r* t+ d! ?$ b; m7 ]
0055CF9E  call CycleConversionStr         ;经过 1FH 异或,即还原9 W/ o. w3 q! P+ [1 h
0055CFA3  mov  eax, [ebp+var_98]
; [+ J" M' N! k/ x. ~0055CFA9  mov  ecx, 5/ V3 b1 \  ]( [
0055CFAE  mov  edx, 17h
, p. u0 Y: M7 B; A" R0055CFB3  call LStrCopy                   ;取第 23~27位
# O$ ^  t0 m. `0 B3 f, A  A0055CFB8  mov  eax, [ebp+var_94]4 z0 _5 D  }& t: D3 A) y0 W/ c% H
0055CFBE  lea  edx, [ebp+var_90]
4 F+ D9 Y6 `+ g0055CFC4  call sub_4F0048                 ;进行计算得到三个字符,如果和上面计算得到的三个字符相同,则过' W8 x3 G" e0 N# a5 Z9 W
0055CFC9  mov  edx, [ebp+var_90]
& A* N" c: Z! J2 u6 ^. d0055CFCF  mov  eax, [ebp+var_C]# i- ]! m- Q3 d" e. n, o
0055CFD2  call LStrCmp                    ;关键比较,比较两种方式和数据计算得到的三个字符+ b7 F' G0 {) Q  h8 W
0055CFD7  jnz  loc_55D157
  u% h+ q  J/ X2 j; C. d; s0055CFDD  lea  eax, [ebp+var_A0]
, @) Q0 v8 k$ d8 g- ~; l8 {0055CFE3  push eax# }, o( O( s9 e5 M2 G2 M
0055CFE4  lea  edx, [ebp+var_A4]6 \* l0 U" U9 @1 e& n) M5 P
0055CFEA  mov  eax, ds:Serial_CryHex@Prt
( e( E4 ^/ @5 T* x: ]0055CFEF  mov  eax, [eax]2 |: D, q5 P1 C
0055CFF1  call CycleConversionStr
0 G* |" _* t( |( b0055CFF6  mov  eax, [ebp+var_A4]/ \. M" u( _- b: [4 y
0055CFFC  mov  ecx, 5
8 e8 Z/ W8 q. B0055D001  mov  edx, 17h                   ;取注册号23~27+ L$ B0 Z7 Z% n* B/ E: T( j" k( ?/ f
0055D006  call LStrCopy
, X4 w2 X  }9 Z9 l( p9 Y1 F& g1 M0055D00B  mov  eax, [ebp+var_A0]
% B5 m$ X. ?6 o3 i0055D011  lea  edx, [ebp+var_9C]
- E' a' N/ @# O7 P" K. `! K! O0055D017  call sub_4F0048# _- _7 Q. l3 g& ]0 H1 y6 b2 a, \
0055D01C  mov  edx, [ebp+var_9C]
6 k" F% A# T$ o! V0 O4 }9 V0055D022  mov  eax, [ebp+var_C]& u8 I9 N7 p# J0 [% B1 f6 f) \
0055D025  call LStrCmp                    ;关键比较,比较两种方式和数据计算得到的三个字符,和前面相同
# s, ?  P" D0 r3 L# R0055D02A  jnz  loc_55D0EA. L) b# q" h, p& ?2 o( m6 k8 y5 g
0055D030  lea  eax, [ebp+var_A8]
! x  L9 }" ]/ A& L0055D036  push eax
/ z) K! Q+ B9 I5 C0055D037  lea  edx, [ebp+var_AC]$ n9 T8 p( ~- |4 P% z
0055D03D  mov  eax, ds:Serial_CryHex@Prt# T- C5 |8 b" c* ?5 N- q2 G* J
0055D042  mov  eax, [eax]
& z+ L2 l4 U) d: C. D0055D044  call CycleConversionStr
7 ]' b3 G1 T8 a: L: g( I0055D049  mov  eax, [ebp+var_AC]
& [  I" W' K9 v  g- r) @( {7 J4 E0055D04F  mov  ecx, 3
$ ?- z- I+ R' a/ _2 v9 s4 \0055D054  mov  edx, 1Dh                   ;取注册号 29~31 位4 p# Q8 R! j! g; Z8 i
0055D059  call LStrCopy
$ Y4 V! H. P" _% C0055D05E  mov  eax, [ebp+var_A8]! _/ Q! a6 j0 u' R8 A! S. x
0055D064  call 31decimalToHex             ;对29~31位注册码进行31进制到十六进制的转换
  N- H/ V' R( \' r0055D069  mov  ebx, eax
9 H5 a* ~' D4 [: T4 i1 z0055D06B  lea  eax, [ebp+var_B0]
- ]3 z7 _2 w$ F% y2 v+ P! a, u0055D071  push eax. C8 ~9 z& b% r% _
0055D072  lea  edx, [ebp+var_B4]
5 C# F4 K6 @& ?" y& R0055D078  mov  eax, ds:Serial_CryHex@Prt  ;取注册号(经过1FH异或处理)& t2 x0 t8 D$ [! b, y
0055D07D  mov  eax, [eax]
3 m. V) ?8 b/ {7 l$ t0 v8 N0055D07F  call CycleConversionStr         ;经过相同的过程还原( f7 Y# q: W4 U4 b
0055D084  mov  eax, [ebp+var_B4]  K; b$ D" y7 `3 E) o
0055D08A  mov  ecx, 1Ch
2 ~: P3 h6 _$ j0055D08F  mov  edx, 1                     ;取注册号 1~28 位
6 {6 l3 U& F# B* s' P9 j& Y0055D094  call LStrCopy
4 |; l% s! H1 G6 \0055D099  mov  eax, [ebp+var_B0]: e, f3 J; H! r- F' O: K
0055D09F  call SumSerial_1to28            ;做 1~28 位累加(中间还有判断是否大于27000,见moon帮主的解释)
- ^( x( A* w5 s- V) p" H. X& d0055D0A4  cmp  ebx, eax                   ;关键比较,将前面进制转换得到的数和累加和比较,在这里下断点4 V* |& W) i  Y
0055D0A6  jnz  loc_55D157                 ;因为注册码没有完成,为了能够继续,暂时将这句 Nop 掉
( t' w( ], D; C. H6 v( _! q6 o0055D0AC  mov  eax, offset a111_2         ; "111": @& [. s9 _1 ^( c9 B, Z' Y
0055D0B1  call CheckSerial_17to22         ;这里是获取 17~22 位注册码的入口
6 V: u% L2 }& ?4 s3 p1 \& |& b0055D0B6  mov  [ebp+var_1], al! s0 u4 }1 j" y* r3 w
0055D0B9  cmp  [ebp+var_1], 0$ n9 N6 c! E+ ]  c8 I6 Y
0055D0BD  jz   short  loc_55D0CC8 a; K$ }+ m5 B1 E+ q
0055D0BF  lea  eax, [ebp+var_C]
2 |* [) x( @2 Q4 `3 C! O! F, g0055D0C2  mov  edx, offset a111_2         ;"111"
' ?, H4 }' D+ l  Z" i8 }0055D0C7  call LStrLAsg; b8 D8 J: p+ |1 \8 b
0055D0CC
. b  S+ Z! m6 q# V) [1 i0055D0CC loc_55D0CC:1 {9 u1 J+ O$ x/ \/ M3 P0 X
0055D0CC  cmp  [ebp+var_1], 0; u! H7 v9 d0 N; E- g
0055D0D0  jz   loc_55D157
8 _: C. \+ l' R7 p2 r6 x) n0055D0D6  mov  eax, [ebp+var_C]
1 F" l( V; V, M7 G0055D0D9  mov  edx, offset a111_2         ;"111"
/ B" y0 d4 T6 S0055D0DE  call LStrCmp% U" T8 A; U1 v) i) i5 _
0055D0E3  jnz  short  loc_55D0EA
1 x' ^' v0 W9 v* C0055D0E5  call CheckSerial_1to16          ;这里是获取 1~16 位注册码的入口在0055CF8A 处下断点,F9 运行,出现同益启动画面后选‘注册’->‘输入注册码',注册申请码是不能修改的,由你的机器的 CPU 和硬盘的参数变化而来。在【起名的姓氏】中输入你的姓氏,我这里是输入‘吕’,在【输入注册码】中将上面的 123456789ABCDEFGHIJKLMNOBWRSTUV 注册码拷贝到输入窗口。按【注册】键,中断在 0055CF8A ,清除断点(或关闭),由 [ebp - c] 中的内容,得到三个字符 VRB,记录下这三个字符,用moon帮主给出的方法:7 M5 K. }6 E4 \/ Y' x# d# D5 I" q

  w& x; H. {* P- Q& k9 X1 z+ u求逆方法:% u( I3 i* l( H7 {8 p( f6 D
1. 执行到00559D0A,然后下:d [ebp-c],记下数据区显示的正确值x,y,z;( p: z# J* ^/ B& ?2 d/ P
2. 对3个字节的正确值进行调位,得到5个字节a,b,c,d,e,调位方法为:
* m& e- L# n# l% Q6 n4 d0,0,0,x7,x6,x5,x4,x3( x! r$ `* }0 j
0,0,0,x2,x1,x0,y5,y4  P3 ?8 O' R9 B1 O) S
0,0,0,0 ,y3,y2,y1,y0. C$ X, g1 x% S4 V) d0 }/ h
0,0,0,y7,y6,z7,z6,z5
: P- I( A' W9 z0,0,0,z4,z3,z2,z1,z0
, F5 G/ Q# f% o+ D2 e# q: b# S3. 根据5个字节查表"0KMT1EIJ2AB34FGH56PYZ7NRS89CDUVX",得到5位注册码即为23~27位。
6 i( [% K2 \: b. H- l$ O--摘自 moon 帮主文- [  }; l9 c. q2 w& G# d6 I
: ~8 p; L/ T1 `& {+ [# q- x- e
我用Delphi写了几句小程序完成这个转换,程序如下: % O# V3 m. ^. n# R# A
复制内容到剪贴板 . a3 V/ v" k( l: Y
代码:procedure TForm1.Button1Click(Sender: TObject);& S8 ^. A  i$ ~  z1 K
const8 L' v2 w8 \. P; F
    Str = '0KMT1EIJ2AB34FGH56PYZ7NRS89CDUVX';
, z( R; ^' p+ a: ?8 @var+ t' k9 R" H, P
    X1, X2: Integer;; O+ Q: S0 q0 A6 [* O6 B
    x, y, z: Char;& s9 m0 A" z! \; I; P- z
    a, b, c, d, e: string;
' s4 u, L; C- k0 Q+ }6 f    Pin: string;6 L3 N/ Y) R6 |- Y" r8 F- J2 Y
begin/ }# U( j: P; y" b7 K/ i+ |
    Pin := Edit1.Text;4 j% I5 r5 O1 p! y
    x   := Pin[1];6 b: O8 Y6 x7 w; G2 a
    y   := Pin[2];* U- Q' U, ?9 v
    z   := Pin[3];
7 p! G) X+ N% C' L' M8 Q9 N9 Q% Y    x1  := (Byte(x) shr 3) and $1F;6 ]  p. k; y7 a& E7 C. Q6 _- D$ ]
    a   := Copy(Str, x1 + 1, 1);
: \# L$ C0 e# G. y6 N& Q. C  M    x1  := ((Byte(x) shl 2) and $1C) or ((Byte(y) shr 4) and $03);
" M& l5 [7 H% f6 L# L( Y    b   := Copy(Str, x1 + 1, 1);
/ \& }6 F! E4 G( h5 ]    x1  := Byte(y)  and $0F;6 f8 N& `; q# X
    c   := Copy(Str, x1 + 1, 1);
, a7 g$ S* [; u2 F1 p) C0 P: e    x1  := ((Byte(y) shr 3) and $18) + ((Byte(z) shr 5) and $07);
1 s! |/ M$ O! q" @3 ~    d   := Copy(Str, x1 + 1, 1);
  Q4 u/ @2 H+ T    x1  := (Byte(z) and $1F);
, C6 F3 @1 I1 E6 q    e   := Copy(Str, x1 + 1, 1);  u9 a* T: O. q6 X6 D
    Edit2.Text := a + b + c + d + e;1 e( b0 U0 P5 K1 ?, a3 w( |/ y
end;在 Edit1 输入 VRB 按 Button1 键,在 Edit2 窗口中给出我们要的结果 B8MBM 。现在来继续完善我们的注册码。将得到的字符串替换原注册码中第 23~27 位:& O2 a/ s, Q$ ~" U
1234567890123456789012 34567 8 901" s% B9 u4 {2 a1 @  [3 [: R
123456789ABCDEFGHIJKLM B8MBM B TUV
. t/ o6 a3 N7 o  [% ^3 Z1 s/ ^用前面的小程序进行调位,得新注册码如下:) q" \0 R4 o! n. u( t) O
1234567890123456789012345678901% f; T8 ?; E0 p% I% ]
42318675CAB9GEFDKIJH8MBLBBMMTVU
. a5 q, B9 Q, `+ ]三、 获得的 17~22 位注册码:
' m5 f; p: j: f: o: H1 W在OD中按 Ctrl-F2组合键,重新运行程序,将 0055D0A6 的 jnz loc_55D157 Nop 掉
3 |+ E( `+ N# o3 n复制内容到剪贴板 , A" }6 p4 A' w$ h, W2 x) r
代码:0055D0A6  jnz  loc_55D157             ;因为注册码没有完成,为了能够继续,暂时将这句 Nop 掉( H: F. k) X+ f3 c( ]
0055D0AC  mov  eax, offset a111_2     ;"111"
+ ?/ r; v5 [8 g# _0 {0055D0B1  call CheckSerial_17to22     ;这里是获取 17~22 位注册码的入口
- W/ o3 ^' _# O- U跟进 0055D0B1  call CheckSerial_17to22
: _( Q! |5 ^, @2 d4 T# _......
% ]& P2 H, Z1 `" h' W* k/ w...... 省略
: K# r' j& Z" M! x- o- d! W0050C705  mov  edx, [ebp+var_20]; c4 j, B! h, ~
0050C708  mov  eax, [ebp+var_1C]
' D; o8 C7 f6 i, j0 [# n- [) r0050C70B  call DES_EncryStr           ;在这里进行 DES 的 EncryStr 加密运算,运算结果再经过. M9 E! v* `4 Q  h1 Q
0050C70B                              ;另一过程处理,这个子过程我们后面还要用到
$ x( Z- _5 P6 d* P* b0050C710  mov  edx, [ebp+var_60]      ;moon 文中提到在这个位置获取 17~22 位注册码,可能
* b! J: v$ {( }% F9 U9 d; ?0050C710                              ;是帮主写文章时粗心了,正确的位置应该在下面删除第5位. i% o) l$ o1 W3 u- {
0050C710                              ;相同字母后才取结果。) r4 X1 }* y( m! o
0050C713  lea  eax, [ebp+var_20]% d7 T2 P  w* _# h4 \( ^
0050C716  call LStrLAsg8 c) [! H: N  @% a
0050C71B  lea  ecx, [ebp+var_64]" A8 q3 p: y6 r1 ?: e
0050C71E  mov  eax, [ebp+var_20]
: E" S. T1 D4 C, C0 s" J/ ~. b0050C721  mov  dl, [eax+5]            ;取出 EncryStr 运算结果的字符串的第 5 位
; n* Q7 i! k0 @1 `9 r0050C724  mov  eax, [ebp+var_20]  M, Y9 m9 I8 R
0050C727  call DelChr                 ;将 EncryStr 运算结果中凡是和第5位相同的字母删除+ Q* C! T* L7 Q! v
0050C72C  mov  edx, [ebp+var_64]
  V, O. P6 U6 V0050C72F  lea  eax, [ebp+var_20]      ;这里下断点,从Edx中取前6位,即我们要的第 17-22 位
1 g( Y+ n' ^2 m1 O6 j* k  C....../ ?& }6 A' F; O) o
......省略在 0050C72C 处下断点,按F9 运行,出现同益启动画面后选‘注册’->‘输入注册码',在【起名的姓氏】中输入你的姓氏,我这里是输入‘吕’,在【输入注册码】中将上面的最后得到的注册码(42318675CAB9GEFDKIJH8MBLBBMMTVU)拷贝过去。点击【注册】按键。中断在 0050C72F,在Edx 返回一个长度为30的字符串(这个字符串的长度是不一定为30的,要看删除相同字符的数目而定),取前 6 为,即为我们要的注册码的第 17~22位,在我们的例子中得到的字符串是:DEDAHI。现在我们来修改我们的注册码:
+ r" N  n) z% v3 Y% a1234567890123456 789012 34567 8 901
% x: ]0 n8 ~# A7 ]0 m123456789ABCDEFG DEDAHI B8MBM B TUV7 `3 ^( P" j; R6 G
用前面的小程序调位后得新注册码:9 G5 m$ |% M  @$ l6 e
1234567890123456789012345678901
3 b2 E" I2 H  a' ^, u3 a! v42318675CAB9GEFDAEDD8IBHBBMMTVU
  ?; i5 X0 V% o+ T- J1 E" N四、 获取 1~16 位注册码
- h* q5 ]; \; O5 h; N我们首先来看看程序的代码,从前面列出的程序最后一句:
! W3 F4 n  a. Y5 c+ I) G复制内容到剪贴板 0 D% x0 R. E8 U- ~3 Y+ u1 C
代码:0055D0E5  call  CheckSerial_1to16     ;这里是获取 1~16 位注册码的入口3 l5 h8 R2 I9 G0 n6 p; k$ j# n
跟进 call CheckSerial_1to16" o; ?8 h9 @0 O- R% ?
......
  F0 }6 f* _6 X9 g/ q......省略' k+ `6 |1 q: G+ `* H7 I3 m4 L" S6 _
00508EEB  lea  edx, [ebp+var_18]
. p$ z3 w+ e; o7 ~00508EEE  mov  eax, ds:AppIDAndName_CryHex@Prt/ `1 t7 Z. s' J2 z' C
00508EF3  mov  eax, [eax]
( U9 N3 L* \& m00508EF5  call ConversionHex10To161 ~! I/ t3 k) b' r# p! U) S4 X
00508EFA  lea  eax, [ebp+var_18]
! y- t& ~% s' S; _% E# j00508EFD  lea  edx, [ebp+var_8]
' a* w  L; \- s6 c, z+ ^00508F00  call ConversionHexAndFNameToStr
* R% M! v- r3 F, \8 v00508F05  lea  eax, [ebp+var_20]9 g# [. i- j% ], G
00508F08  push eax' [/ }$ j# N6 e3 W% I! {
00508F09  lea  edx, [ebp+var_24]
8 j7 }5 x% f6 p( @% D5 ^00508F0C  mov  eax, ds:Serial_CryHex@Prt6 \1 l% a  s; ~5 S
00508F11  mov  eax, [eax]6 }, R1 l' W1 v- Q" A4 [
00508F13  call CycleConversionStr
% r  Y! }& ~7 |! \- k( G00508F18  mov  eax, [ebp+var_24]
3 @% U- E+ a% j' h. @- S00508F1B  mov  ecx, 10h
- [5 D- m8 `7 l" z4 X00508F20  mov  edx, 1                     ;取注册号 1~16 位
9 T- Z- H5 A8 |( a. [00508F25  call LStrCopy
7 |6 b$ M0 B& ?) W8 d00508F2A  mov  eax, [ebp+var_20]# \6 A# A- G5 w6 j
00508F2D  lea  ecx, [ebp+var_1C]9 W! ?1 g% P1 @- v
00508F30  mov  edx, [ebp+var_8]
% D& \/ J: G% I& s, I+ M$ l( K00508F33  call DES_DecryStr               ;这是 DES 的逆运算,我们再跟进9 n$ o! V$ ~0 {1 j
00508F38  mov  eax, [ebp+var_1C]
4 v, _) c$ [% w+ ]3 q: G3 X8 e00508F3B  lea  edx, [ebp+var_18]
( f8 p* H# s% K( _+ @- w7 l2 O00508F3E  call ConversionHex10To16
5 P- D$ t) A3 M00508F43  lea  eax, [ebp+var_18]
# g7 g' X- C3 t, w, g8 }/ s' L1 {00508F46  push eax
, o" M; e- J0 c00508F47  lea  edx, [ebp+var_38]
% e0 E5 x* j) D0 _3 S# D00508F4A  mov  eax, ds:AppIDAndName_CryHex@Prt( e; ^( m- P, h0 j5 i; f7 n* O
00508F4F  mov  eax, [eax]/ o+ y( m' L3 M4 w. J
00508F51  call sub_4FBA70' Q& z2 m* Z* u5 R* T. D
00508F56  mov  eax, [ebp+var_38]8 e. p6 z8 L: ^1 r# t+ _) @1 x
00508F59  lea  edx, [ebp+var_34]          ;这里是我们要下断点的地方
$ c! c- C8 x* i, _6 a/ T6 J9 n' m......6 D5 Q9 A& _8 [5 O- o% t
...... 省略
' X7 F5 V7 d% F, i  q; o6 s跟进 call  DES_DecryStr
# _+ v# [* r# ]4 P) h6 n  _. q( E......
' t4 P8 O5 ?4 R......省略/ _0 r- |: {0 z: V! k( S! _
004F788E  lea  edx, [ebp+var_C]
2 O# Q* c( h# C7 L% d' z! o- R. Y004F7891  mov  eax, [ebp+var_4]% C" ^, O" I- N3 ~
004F7894  call  sub_4E97BC) f  b3 ]( f! C8 z7 m
004F7899  mov  ecx, ebx! G# Q2 q( V+ p$ x( f
004F789B  mov  edx, [ebp+var_8]
: j8 B9 c# K) @5 j1 t0 `004F789E  mov  eax, [ebp+var_C], ?6 v) c9 c0 W. K0 s
004F78A1  call DecryStr                   ;DES 逆运算( Y: a8 W* O7 o) G
004F78A6  xor  eax, eax                   ;这里是 moon 帮主提出下断点处,还有一些其他相应的做法, Z! h+ S' k, T1 e( C
                                                            ;请看 moon 原文。
  S; z; A) c% K' q3 j& V6 X......
, ^; b# e' A. J* q) \% \- f......省略在OD中按 Ctrl-F2,重新启动,在00508F59下断点,同上,将 0055D0A6 的 jnz loc_55D157 Nop 掉,按F9 运行,出现同益启动画面后选‘注册’->‘输入注册码',在【起名的姓氏】中输入你的姓氏,我这里是输入‘吕’,在【输入注册码】中将上面的最后得到的注册码(42318675CAB9GEFDAEDD8IBHBBMMTVU)拷贝过去。点击【注册】按键。中断在 00508F59,下面是堆栈内容: 9 d) R' `4 s  y+ ?: @4 O
复制内容到剪贴板
8 ^2 J5 S' [7 B% k! C+ \6 c$ [: I代码:EBP-38  0012F910    00F303D0    ASCII "5FF51115"
3 ?/ L/ p: K' O  }3 x1 W  XEBP-34  0012F914    00000000
& q* W+ z* b; C$ K4 s2 O; ^EBP-30  0012F918    00000000
" W. B% A4 A8 p" g# w$ AEBP-2C  0012F91C    00000000
# E. j9 A- k0 I" YEBP-28  0012F920    00000000
9 }7 j) x/ Q3 eEBP-24  0012F924    00F30038    ASCII "123456789ABCDEFGDEDAHIB8MBMBTUV", h! V* n3 X+ N7 c& d" t
EBP-20  0012F928    00F29F5C    ASCII "123456789ABCDEFG"7 W: a3 s8 `/ C
EBP-1C  0012F92C    00F3009C. r# ~) k3 {# Z* }9 @, v6 q
EBP-18  0012F930    C338FAD3
( x( |% D  [$ }, G5 aEBP-14  0012F934    DD5CB3D05 K% U( [- J8 m7 j1 e* @
EBP-10  0012F938    D5D42656
% {$ h6 Z8 U% N  F: g/ q' X+ ]EBP-C   0012F93C    A2BB6C94
/ a/ K" F& N+ _5 c9 t" K' n4 {EBP-8   0012F940    00F2FFF8    ASCII "M9BJBBRIDE88TNP4"" u5 _7 w' e0 l& r$ I# w
EBP-4   0012F944    00000000注意: EBP-38   0  00F2A130  ASCII "5FF51115"  这是我们要的 DES 加密的明文。! L+ ?1 {# Q* ^: ?  h
      EBP-8    0> 00F2FFE4    ASCII "M9BJBBRIDE88TNP4" 这是 Key。6 Y; G, f- C  [0 Z5 v) Y
按 moon 帮主的方法,修改两句代码,进行逆运算,但我经过努力,总是没有成功,可能是对 moon 的方法不能深刻的理解,于是决定改用其他的方法。我们注意到如下代码:
# c: c* \, a, L7 \4 d( h7 n+ p复制内容到剪贴板 ; R/ `5 }! Y, Q7 G; f/ ]+ s5 }
代码:004F788E  lea  edx, [ebp+var_C]; W8 g* c; P  z0 c
004F7891  mov  eax, [ebp+var_4]
: p  u6 |/ G# C7 W004F7894  call sub_4E97BC6 L/ b3 \# Z2 `) _
004F7899  mov  ecx, ebx
; t' \& X" C$ g* ?0 S' Y004F789B  mov  edx, [ebp+var_8]
( G" A7 Y) s; l5 G( @4 F7 Z( n004F789E  mov  eax, [ebp+var_C]
: X$ @! k. c; @. q2 b4 H+ b004F78A1  call DecryStr                   ;DES 逆运算在最后一句 Call DecryStr 做的其实是DES的逆运算,前面还有一个辅助的运算,我认为,同益的代码中一定有一个DES的正向运算,即EncryStr,所以我找了一下,其实就在上面第三节--【获得的 17~22 位注册码】中出现过,下面我们跟进这个Call: $ a- u& S0 u) F# T0 J/ o
复制内容到剪贴板 9 m% ?! j% m2 ^$ P- K% O
代码:0050C70B  call DES_EncryStr& l% w, K/ C8 B' J0 B$ ~8 |5 P
跟进! C" b  F0 z0 ]( ^$ d# F: v3 t
......" \( {7 M9 E- x
......省略
& K" r, d/ F5 `% B( }, i004F781A  lea  ecx, [ebp+var_C]           ; 返回地址
; _8 [2 p1 [0 ~8 D/ H- S5 v+ M004F781D  mov  edx, [ebp+var_8]           ; Key = M9BJBBRIDE88TNP4+ f, X2 |% p( y; Y) Z- r
004F7820  mov  eax, [ebp+var_4]           ; Str = 5FF51115
) ^3 O! b8 W& r7 d5 J0 K" f8 n004F7823  call EncryStr
. ~* I: O3 f+ m' c: r004F7828  mov  edx, ebx8 L! b8 v4 Y5 R' `
004F782A  mov  eax, [ebp+var_C], `' B* A$ t$ h6 P
004F782D  call sub_4E63F4! j- G& s1 d6 S. H
004F7832  xor  eax, eax                   ;这里下断点1 M/ G% z" U9 e  s8 K
......- m6 E; v# _' `) q
......省略可以看出,它和上面的代码正好相反,我们用下面的方法来获得 1~16 位的代码。) A3 w! c# P9 e3 ]0 m
接前面,我们中断在 ! X6 l' w. @( v
复制内容到剪贴板 & a( I0 k0 M7 v  p: }/ N
代码:00508F59  lea  edx, [ebp+var_34]在代码窗口中按 Ctrl-G,输入004F781A,转移到 004F781A。按 Ctrl-*,将Eip地址改到 004F781A。
" |2 S+ W9 L4 r$ N+ ?) D/ i我们要做的工作其实就是修改堆栈的地址,下面是具体操作。 . r$ P. W6 K8 l8 V  @9 j0 w
复制内容到剪贴板 - A8 y9 `1 a; m9 P9 V
代码:EBP-38  0012F910    00F303D0    ASCII "5FF51115"
" Q# w8 K8 B0 F/ X& F3 j0 B  P+ J3 xEBP-34  0012F914    000000004 e) g( B3 P. C
EBP-30  0012F918    00000000
8 u" \3 W9 _- B' qEBP-2C  0012F91C    00000000
# D! d! ]* Z6 n. [" J7 xEBP-28  0012F920    00000000+ T: |& f4 ?( u5 {
EBP-24  0012F924    00F30038    ASCII "123456789ABCDEFGDEDAHIB8MBMBTUV"
. n1 m* p0 s* bEBP-20  0012F928    00F29F5C    ASCII "123456789ABCDEFG"' }' o2 {% c' g$ w  S$ l( r3 e
EBP-1C  0012F92C    00F3009C7 j4 D' ?2 |8 o4 L% F" Y3 a
EBP-18  0012F930    C338FAD3% r+ o; l* ?' g
EBP-14  0012F934    DD5CB3D0
0 k5 k- q0 B: f0 J- dEBP-10  0012F938    D5D426568 S7 C# L9 ?% X# ~1 Q4 B2 N
EBP-C   0012F93C    A2BB6C94    结果返回地址,这里改为 0,程序运行时会自行分配新的内存
8 w# e6 z2 C1 I+ nEBP-8   0012F940    00F2FFF8    ASCII "M9BJBBRIDE88TNP4"
2 x; B- G$ A" O; v+ S! {EBP-4   0012F944    00000000    这里是 Str 所以将这里改为 00F303D0,也就是[EBP-38] 指向的地址。另外,最终返回结果在 Ebx 中,而Ebx 是由上一级的过程传递过来的参数,已经由入口程序做过初始化,所以,必须分配一个有效的返回地址,这点和 [EBP-C] 不同,需要要注意,这里我们将 [EBP-24] 的堆栈地址分配给 Ebx, 也就是Ebx = 0012F924
" R6 z" e: \; t" Z5 g, Y% p* f改完后堆栈如下: ( }$ f3 m* ^- q$ x' ^* |
复制内容到剪贴板
1 m' m) r0 R. U- o# \. i$ y代码:EBP-C    0> 000000002 ~% ^4 F7 w. {
EBP-8    0> 00F2FFF8    ASCII "M9BJBBRIDE88TNP4"    Key
; h( `; I# i* ?0 \, o8 j6 W! Z! {- [+ pEBP-4    0> 00F303D0    ASCII "5FF51115"            Str
- d, X4 @2 X+ D' n1 |; O在将 Ebx 的内容改为 EBP-24 的堆栈地址,即 Ebx = 0012F924   ASCII "123456789ABCDEFGDEDAHIB8MBMBTUV"在 004F7832 下断点,F9 运行,d [Ebx], [Ebx] =0VBMHYAMA260CSD1  第 1~16 位的注册码
3 _5 j! i0 N( w. V* Q1 C( x% u2 p现在我们来修改我们的注册码:1 X! F8 E6 N. q, B" D( J
1234567890123456 789012 34567 8 901
7 E" z% E5 h+ o+ e0 c; f0VBMHYAMA260CSD1 DEDAHI B8MBM B TUV8 M: Z3 \1 Z1 ?: S  e
用前面的小程序调位后得新注册码:
$ e/ c- t: F# k. H% |7 I12345678901234567890123456789010 x( m0 A/ P, Z4 ^
MVB0MYAH026A1SDCAEDD8IBHBBMMTVU1 q5 V8 x6 v: M- e% q8 `
五、 获取最后 29~31 位注册码3 u9 Y: V; M; C6 k5 }' K  V/ T
打开注册表编辑器:将Serial中的内容清除:3 T5 j. I7 A0 V/ D5 l4 e) |! j
[HKEY_LOCAL_MACHINE\SOFTWARE\GoodSoft\GoodName]5 r) t) D  l- j+ v+ ^
"Appid"=dword:059c09359 p$ ~( \. q  F/ ^
"Serial"="MVB0MYAH026A1SDCAEDD8IBHBBMMTVU"5 j5 k( y* I1 u6 }5 x
"Serial"="0"
0 w+ \  t" ^! z- @" C0 ^6 t在OD 中按 Ctrl-F2 重新启动,将下面两处 Nop 掉。 % t% L* ^( u, A$ Q
复制内容到剪贴板
( k& T% _* x( I+ x  M代码:0055CFD2  call LStrCmp            ;关键比较,比较两种方式和数据计算得到的三个字符+ N  R9 n1 J5 p3 }9 `+ _7 f" F& F
0055CFD7  jnz  loc_55D157         ;Nop 这里
' o$ j/ y! z7 D: ~% J8 X, {7 x0055D025  call LStrCmp            ;关键比较,比较两种方式和数据计算得到的三个字符,和前面相同9 a2 h4 \: R" H5 B
0055D02A  jnz  loc_55D0EA         ;Nop这里  _  y6 f. s! X  s9 i. _2 \: B
0055D0A4  cmp  ebx, eax           ;关键比较,将前面进制转换得到的数和累加和比较,在这里下断点在上面 0055D0A4 处下断点,F9运行,出现同益启动画面后选‘注册’->‘输入注册码',在【起名的姓氏】中输入你的姓氏,我这里是输入‘吕’,在【输入注册码】中将上面的最后得到的注册码(MVB0MYAH026A1SDCAEDD8IBHBBMMTVU)拷贝过去。点击【注册】按键。中断在 0055D0A4,记录下Eax寄存器的内容,我这里是 2C3AH,换算成十进制数为 11322
4 }0 X8 {4 n! C  r" _# S) D根据 moon 帮主的文章:
! ?. H' q: h; I; n+ h$ T9 P9 @$ G# h" o# T. \; q( P: o
求逆方法:& U# u* ~- y: F" H: k3 b5 }
1. 执行到00559E24,记下eax中的值x,或按照上面的方法计算出这个值;: k/ [9 c" |. b4 ~( d
2. x除以31,用余数查表"0AH6CD3BEF4TRS2PUV5K1MN78YZ9GIJ",所得字符作为第31位;, u8 c3 }& N4 H2 O! ?0 Y4 g+ c3 G
3. 第2步的商除以31,用余数查表,作为第30位;
9 Z, N" q4 M) H1 Q/ s. _4. 第3步的商查表,作为第29位。; |# A  i/ a# X6 W/ T# H- c
--摘自 moon 帮主的文章
+ ]) p* ]4 {% G  N" b

( w0 A3 s% Z+ i, S, @5 K( x) c+ I写如下Delphi 的小程序计算最后3位注册码。 : g' I8 Q" F: x2 O. o$ D
复制内容到剪贴板 7 {. Q6 f+ f1 a1 a# ]
代码:procedure TForm1.Button3Click(Sender: TObject);
/ W8 j: Q+ F5 ~5 {const
+ s$ M* \! _& k. s0 Y) y    Str = '0AH6CD3BEF4TRS2PUV5K1MN78YZ9GIJ';0 S* h* a$ |1 x  {
var& q. P' x/ ^4 Q& K5 q) ^
    x1, x2: Integer;% C6 ]5 J- ?& J' C: U7 [
    S1, S2: String;1 e: n1 n% b) _% b
begin
2 Y  p- E$ N  i- i" r. d/ O    x2 := StrToInt(Edit1.Text);
$ D" b/ `. _6 ~+ X! z% W5 u. _    x1 := x2 mod 31;/ T  G: }5 y( j( l! d
    S1 := Copy(Str, x1 + 1, 1);
* `2 u7 b, b7 W# |; g* G7 o2 j) ?    x1 := (x2 div 31) mod 31;
: s. f9 e4 G% z0 M% D    S2 := Copy(Str, x1 + 1, 1);
# p) v: W' }3 ?( v) H* K! x7 Q    S1 := S2 + S1;
8 v! d4 e% q; w    x1 := (x2 div 31) div 31;3 r) L/ R2 R# X8 C; A/ B
    S2 := Copy(Str, x1 + 1, 1);% h0 e  ^" q1 A) y* ?: h
    Edit2.Text := S2 + S1;# b3 C! z% g' z6 I
end;在 Edit1 中输入 11322,按 Button3 键,在 Edit2 中给出结果 T8B+ x: f; R, g, P9 a1 v% S
现在我们将获得最终的注册号:# _) v7 j, U, K0 t: d* u4 R
1234567890123456 789012 34567 8 901/ N3 g6 L6 w1 V% G! Z' G7 Y# I
0VBMHYAMA260CSD1 DEDAHI B8MBM B T8B
; m( L" @! ^& T! v用前面的小程序调位后得新注册码:0 m- u6 _* g# K, w0 G( q
1234567890123456789012345678901
1 T9 i9 D4 i( HMVB0MYAH026A1SDCAEDD8IBHBBMMTB8
8 X/ ?) q6 K/ Y4 `% l* z在我的机器上,注册号为 MVB0MYAH026A1SDCAEDD8IBHBBMMTB8 ,用未脱壳的原版注册后所有功能完全正常,公司后缀的分析类似,有兴趣的朋友可以自己试。
6 P2 U! H0 {4 \# g& b  {另外,对于Delphi的小程序,什么版本都可以,但编译开关 Huge String 要勾上,我使用的是 Delphi 7。+ N- r. R0 E7 u( G1 D
说明:1 u3 [( Y1 P9 N/ ~4 z" t. ?  U
9 _: t) x& u- }* e$ j. h9 n
1、对于调位操作,字符串长度必须是 31 位(不算空格),可以带空格输入,这样比较方便直接拷贝,如可以直接输入:) Z& w( V. }0 r) m* X7 U
"0VBMHYAMA260CSD1 DEDAHI B8MBM B T8B"' T" ^, r! a6 z& x) d: f
2、对于计算最后的第 29~31 位,可以直接输入十六进制数,不过要加 '$' 前缀,例如在我们这个例子中,可以直接输入 $2C3A (不分大小写)。$ V# L# n# f; z: }9 L
发表于 2009-1-7 22:54:30 | 显示全部楼层
LZ小宝宝的相片,有机会上个啊。让本站网友也瞧一瞧。。{{loves{{
tianchenqq 该用户已被删除
发表于 2009-1-15 12:35:03 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-3-24 09:00:34 | 显示全部楼层
厉害学习了
发表于 2009-3-24 09:39:48 | 显示全部楼层
看不懂,有没图解啊
lirize 该用户已被删除
发表于 2009-3-27 15:12:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
nnzqj 该用户已被删除
发表于 2009-4-9 00:00:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-4-10 11:25:41 | 显示全部楼层
有点晕{{gangzai24{{
发表于 2009-4-15 20:50:05 | 显示全部楼层
这个也太让人头晕了吧{{gangzai3{{
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

相关侵权、举报、投诉及建议等,请发 E-mail:yesdong@qq.com

Powered by Discuz! X5.0 Licensed © 2001-2026 Discuz! Team.44152102000001

在本版发帖QQ客服返回顶部