| 
TA的每日心情|  | 开心 2015-8-23 23:49
 | 
|---|
 签到天数: 27 天 [LV.4]偶尔看看III | 
 
| 本帖最后由 GGLHY 于 2014-2-15 13:12 编辑 
 WINNC注册算法分析实录
 
 winnc,一款独具特色的文件管理类软件。
 
 先放界面截图一张:
 
   
 有兴趣的童靴可以移步其官网:www.winnc.com
 
 又是一个实时验证的。
  呵呵。 
 
 
 闲话少叙,咱直奔主题:
 
 
 
 
 一、莽苍踏雪寻
 
 寒风萧萧、飞雪飘零,长路漫漫,踏歌而行:
 
 哎~~复制代码00C9EE4E  |.  8B83 AC030000 MOV EAX,DWORD PTR DS:[EBX+3AC]
00C9EE54  |.  E8 CB8881FF   CALL WinNc.004B7724
00C9EE59  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]       ;  取用户名(UNICODE "gglhy")
00C9EE5C  |.  8D55 FC       LEA EDX,DWORD PTR SS:[EBP-4]
00C9EE5F  |.  E8 285E78FF   CALL WinNc.00424C8C
00C9EE64  |.  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
00C9EE67  |.  8B83 B4030000 MOV EAX,DWORD PTR DS:[EBX+3B4]
00C9EE6D  |.  E8 B28881FF   CALL WinNc.004B7724
00C9EE72  |.  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]       ;  取输入的假码(UNICODE "1598753046")
00C9EE75  |.  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
00C9EE78  |.  E8 0F5E78FF   CALL WinNc.00424C8C
00C9EE7D  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00C9EE80  |.  85C0          TEST EAX,EAX
00C9EE82  |.  74 05         JE SHORT WinNc.00C9EE89
00C9EE84  |.  83E8 04       SUB EAX,4
00C9EE87  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]          ;  用户名长度,本例为5
00C9EE89  |>  83F8 04       CMP EAX,4                           ;  用户名长度不得小于4!
00C9EE8C  |.  7D 3C         JGE SHORT WinNc.00C9EECA
00C9EE8E  |.  BA 50F0C900   MOV EDX,WinNc.00C9F050              ;  UNICODE "Please enter a valid registration name"
00C9EE93  |.  8B83 D4030000 MOV EAX,DWORD PTR DS:[EBX+3D4]
(省略部分代码)
00C9EF04  |>  E8 9B85CAFF   CALL WinNc.009474A4
00C9EF09  |.  8B4D F8       MOV ECX,DWORD PTR SS:[EBP-8]        ;  输入的假码(UNICODE "1598753046")
00C9EF0C  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]        ;  用户名(UNICODE "gglhy")
00C9EF0F  |.  E8 588BCAFF   CALL WinNc.00947A6C                 ;  莽苍踏雪寻
00C9EF14  |.  84C0          TEST AL,AL                          ;  玉壁月华明
00C9EF16  |.  75 14         JNZ SHORT WinNc.00C9EF2C            ;  谁家子弟谁家院?无计悔多情!
00C9EF18  |.  E8 8785CAFF   CALL WinNc.009474A4
00C9EF1D  |.  8B4D F8       MOV ECX,DWORD PTR SS:[EBP-8]
00C9EF20  |.  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]
00C9EF23  |.  E8 448BCAFF   CALL WinNc.00947A6C
00C9EF28  |.  84C0          TEST AL,AL
00C9EF2A  |.  74 72         JE SHORT WinNc.00C9EF9E
00C9EF2C  |>  33D2          XOR EDX,EDX
00C9EF2E  |.  8B83 D0030000 MOV EAX,DWORD PTR DS:[EBX+3D0]
(省略部分代码)
00C9EF97  |.  E8 2C117FFF   CALL WinNc.004900C8
00C9EF9C  |.  EB 70         JMP SHORT WinNc.00C9F00E
00C9EF9E  |>  BA ACF0C900   MOV EDX,WinNc.00C9F0AC              ;  UNICODE "Please enter a valid key"
00C9EFA3  |.  8B83 D0030000 MOV EAX,DWORD PTR DS:[EBX+3D0]
00C9EFA9  |.  E8 D28781FF   CALL WinNc.004B7780
 复制代码00C9EF09  |.  8B4D F8       MOV ECX,DWORD PTR SS:[EBP-8]        ;  输入的假码(UNICODE "1598753046")
00C9EF0C  |.  8B55 FC       MOV EDX,DWORD PTR SS:[EBP-4]        ;  用户名(UNICODE "gglhy")
00C9EF0F  |.  E8 588BCAFF   CALL WinNc.00947A6C                 ;  莽苍踏雪寻
00C9EF14  |.  84C0          TEST AL,AL                          ;  玉壁月华明
00C9EF16  |.  75 14         JNZ SHORT WinNc.00C9EF2C            ;  谁家子弟谁家院?无计悔多情!
枯井底、污泥处 念枉求美眷良缘安在?元芳你怎么看?
 
 
 二、  青衫磊落险峰行
 
 好吧,莽苍踏雪寻!让我们轻踏“凌波微步”,到00C9EF0F CALL WinNc.00947A6C处
 
 F7进入:
 
 复制代码00947A6C  /[        DISCUZ_CODE_67        ]nbsp; 55            PUSH EBP
(省略部分代码)
00947A9C  |.  33DB          XOR EBX,EBX
00947A9E  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]        ;  用户名(UNICODE "gglhy")
00947AA1  |.  85C0          TEST EAX,EAX
00947AA3  |.  74 05         JE SHORT WinNc.00947AAA
00947AA5  |.  83E8 04       SUB EAX,4
00947AA8  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]          ;  用户名长度,本例为5
00947AAA  |>  85C0          TEST EAX,EAX
00947AAC  |.  74 1A         JE SHORT WinNc.00947AC8
00947AAE  |.  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]
00947AB1  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]        ;  用户名(UNICODE "gglhy")
00947AB4  |.  E8 5FFFFFFF   CALL WinNc.00947A18                 ;  为谁开?茶花满路~
00947AB9  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]        ;  千万里,我追寻着你~
00947ABC  |.  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]        ;  输入的假码("1598753046")
00947ABF  |.  E8 8026ACFF   CALL WinNc.0040A144    
00947AC4  |.  75 02         JNZ SHORT WinNc.00947AC8            ;  风骤紧,缥缈峰头云乱
00947AC6  |.  B3 01         MOV BL,1                            ;  却试问,几时把痴心?
00947AC8  |>  33C0          XOR EAX,EAX
00947ACA  |.  5A            POP EDX
00947ACB  |.  59            POP ECX
00947ACC  |.  59            POP ECX
00947ACD  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
00947AD0  |.  68 EA7A9400   PUSH WinNc.00947AEA
00947AD5  |>  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
00947AD8  |.  BA 03000000   MOV EDX,3
00947ADD  |.  E8 E211ACFF   CALL WinNc.00408CC4
00947AE2  \.  C3            RETN
显然,爆破的地方很明显~~,这也不是本文的目的。
 
 
   
 昔时因、今日意、且自逍遥没谁管,输赢成败又争由人算?
 
 
 
 三、杏子林中 商略平生义
 看完第二部分我们很容易得出一个结论,那就是:
 00947AB4处CALL WinNc.00947A18这里是我们必须进去的:
 F7后:
 
 复制代码00947A18  /[        DISCUZ_CODE_68        ]nbsp; 55            PUSH EBP
00947A19  |.  8BEC          MOV EBP,ESP
00947A1B  |.  51            PUSH ECX
00947A1C  |.  53            PUSH EBX
00947A1D  |.  8BDA          MOV EBX,EDX
00947A1F  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
00947A22  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]        ;  用户名(UNICODE "gglhy")
00947A25  |.  E8 1E13ACFF   CALL WinNc.00408D48
00947A2A  |.  33C0          XOR EAX,EAX
00947A2C  |.  55            PUSH EBP
00947A2D  |.  68 617A9400   PUSH WinNc.00947A61
00947A32  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
00947A35  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
00947A38  |.  53            PUSH EBX
00947A39  |.  BA B899E700   MOV EDX,WinNc.00E799B8
00947A3E  |.  B9 0B000000   MOV ECX,0B                          ;  记住这个0B吧!
00947A43  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00947A46  |.  E8 39FEFFFF   CALL WinNc.00947884                 ;  赤手屠熊博虎~,金戈荡寇鏖兵!
00947A4B  |.  33C0          XOR EAX,EAX
00947A4D  |.  5A            POP EDX
00947A4E  |.  59            POP ECX
00947A4F  |.  59            POP ECX
00947A50  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
00947A53  |.  68 687A9400   PUSH WinNc.00947A68
00947A58  |>  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
00947A5B  |.  E8 0412ACFF   CALL WinNc.00408C64
00947A60  \.  C3            RETN
00947A61   .^ E9 FA07ACFF   JMP WinNc.00408260
00947A66   .^ EB F0         JMP SHORT WinNc.00947A58
00947A68   .  5B            POP EBX
00947A69   .  59            POP ECX
00947A6A   .  5D            POP EBP
00947A6B   .  C3            RETN
 
 
 
 四、 酒罢问君三语
 
 不入虎穴,焉得虎子?我们再向虎山行:
 
 复制代码00947884  /[        DISCUZ_CODE_69        ]nbsp; 55            PUSH EBP
00947885  |.  8BEC          MOV EBP,ESP
00947887  |.  83C4 BC       ADD ESP,-44
0094788A  |.  53            PUSH EBX
0094788B  |.  56            PUSH ESI
0094788C  |.  57            PUSH EDI
0094788D  |.  33DB          XOR EBX,EBX
0094788F  |.  895D BC       MOV DWORD PTR SS:[EBP-44],EBX
00947892  |.  895D F8       MOV DWORD PTR SS:[EBP-8],EBX
00947895  |.  894D F0       MOV DWORD PTR SS:[EBP-10],ECX       ;  0B,记住你了!
00947898  |.  8955 F4       MOV DWORD PTR SS:[EBP-C],EDX
0094789B  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
0094789E  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
009478A1  |.  E8 A214ACFF   CALL WinNc.00408D48
009478A6  |.  33C0          XOR EAX,EAX
009478A8  |.  55            PUSH EBP
009478A9  |.  68 F7799400   PUSH WinNc.009479F7
009478AE  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
009478B1  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
009478B4  |.  BF 03020000   MOV EDI,203                         ;  好吧,还要记着这个203H
009478B9  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]        ;  用户名(UNICODE "gglhy")
009478BC  |.  85C0          TEST EAX,EAX
009478BE  |.  74 05         JE SHORT WinNc.009478C5
009478C0  |.  83E8 04       SUB EAX,4
009478C3  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]          ;  用户名长度,本例为5
009478C5  |>  8BF0          MOV ESI,EAX
009478C7  |.  85F6          TEST ESI,ESI
009478C9  |.  7E 3E         JLE SHORT WinNc.00947909
009478CB  |.  BB 01000000   MOV EBX,1                           ;  计数器初始化为1
009478D0  |>  55            /PUSH EBP
009478D1  |.  8B45 FC       |MOV EAX,DWORD PTR SS:[EBP-4]       ;  用户名(UNICODE "gglhy")
009478D4  |.  4B            |DEC EBX
009478D5  |.  85C0          |TEST EAX,EAX
009478D7  |.  74 05         |JE SHORT WinNc.009478DE
009478D9  |.  3B58 FC       |CMP EBX,DWORD PTR DS:[EAX-4]       ;  用户名是否取完
009478DC  |.  72 05         |JB SHORT WinNc.009478E3
009478DE  |>  E8 F9F4ABFF   |CALL WinNc.00406DDC
009478E3  |>  43            |INC EBX
009478E4  |.  0FB74458 FE   |MOVZX EAX,WORD PTR DS:[EAX+EBX*2-2>;  用户名依次每一位
009478E9  |.  E8 4EFFFFFF   |CALL WinNc.0094783C                ;  来吧,来吧,一起舞蹈~~
009478EE  |.  59            |POP ECX
009478EF  |.  03F8          |ADD EDI,EAX                        ;  跳舞后的结果累加(EDI初始为203H)
009478F1  |.  71 05         |JNO SHORT WinNc.009478F8
009478F3  |.  E8 ECF4ABFF   |CALL WinNc.00406DE4
009478F8  |>  43            |INC EBX
009478F9  |.  4E            |DEC ESI
009478FA  |.^ 75 D4         \JNZ SHORT WinNc.009478D0           ;  循环结束,累加的结果为21D
009478FC  |.  EB 0B         JMP SHORT WinNc.00947909
009478FE  |>  8D45 FC       /LEA EAX,DWORD PTR SS:[EBP-4]
00947901  |.  8B55 FC       |MOV EDX,DWORD PTR SS:[EBP-4]
00947904  |.  E8 4B26ACFF   |CALL WinNc.00409F54
00947909  |>  8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]       ;  用户名(UNICODE "gglhy")
0094790C  |.  E8 4B18ACFF   |CALL WinNc.0040915C
00947911  |.  83F8 0C       |CMP EAX,0C                         ;  用户名长度:12
00947914  |.^ 7C E8         \JL SHORT WinNc.009478FE            ;  用户名自我复制到不小于12为止!!!!!
00947916  |.  BB 01000000   MOV EBX,1
0094791B  |.  8D75 C0       LEA ESI,DWORD PTR SS:[EBP-40]
0094791E  |>  55            /PUSH EBP
0094791F  |.  8B45 FC       |MOV EAX,DWORD PTR SS:[EBP-4]       ;  自我复制后的用户名("gglhygglhygglhygglhy")
00947922  |.  4B            |DEC EBX
00947923  |.  85C0          |TEST EAX,EAX
00947925  |.  74 05         |JE SHORT WinNc.0094792C
00947927  |.  3B58 FC       |CMP EBX,DWORD PTR DS:[EAX-4]       ;  自我复制后的用户名长度,本例=20取完没有
0094792A  |.  72 05         |JB SHORT WinNc.00947931
0094792C  |>  E8 ABF4ABFF   |CALL WinNc.00406DDC
00947931  |>  43            |INC EBX
00947932  |.  0FB74458 FE   |MOVZX EAX,WORD PTR DS:[EAX+EBX*2-2>;  复制后的用户名依次每一位
00947937  |.  8BD3          |MOV EDX,EBX
00947939  |.  83EA 01       |SUB EDX,1                          ;  计数器-1
0094793C  |.  71 05         |JNO SHORT WinNc.00947943
0094793E  |.  E8 A1F4ABFF   |CALL WinNc.00406DE4
00947943  |>  85D2          |TEST EDX,EDX
00947945  |.  7C 05         |JL SHORT WinNc.0094794C
00947947  |.  3B55 F0       |CMP EDX,DWORD PTR SS:[EBP-10]      ;  在这里会看到熟人0B哦!
0094794A  |.  7E 05         |JLE SHORT WinNc.00947951
0094794C  |>  E8 8BF4ABFF   |CALL WinNc.00406DDC
00947951  |>  8B4D F4       |MOV ECX,DWORD PTR SS:[EBP-C]
00947954  |.  030491        |ADD EAX,DWORD PTR DS:[ECX+EDX*4]   ;  用户名ASC相加,[]里查表,初始为37
00947957  |.  71 05         |JNO SHORT WinNc.0094795E
00947959  |.  E8 86F4ABFF   |CALL WinNc.00406DE4
0094795E  |>  03C7          |ADD EAX,EDI                        ;  再次累加,还记得前面跳完舞的21D吗?
00947960  |.  71 05         |JNO SHORT WinNc.00947967
00947962  |.  E8 7DF4ABFF   |CALL WinNc.00406DE4
00947967  |>  99            |CDQ
00947968  |.  33C2          |XOR EAX,EDX                        ;  累加结果 XOR 0
0094796A  |.  2BC2          |SUB EAX,EDX                        ;  再-0
0094796C  |.  71 05         |JNO SHORT WinNc.00947973
0094796E  |.  E8 71F4ABFF   |CALL WinNc.00406DE4
00947973  |>  E8 C4FEFFFF   |CALL WinNc.0094783C                ;  又去前面的广场跳舞了~~
00947978  |.  59            |POP ECX
00947979  |.  8906          |MOV DWORD PTR DS:[ESI],EAX         ;  每次跳完舞蹈后的结果保存起来
0094797B  |.  43            |INC EBX
0094797C  |.  83C6 04       |ADD ESI,4
0094797F  |.  83FB 0D       |CMP EBX,0D                         ;  12位运算完了吗?
00947982  |.^ 75 9A         \JNZ SHORT WinNc.0094791E
00947984  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
00947987  |.  E8 D812ACFF   CALL WinNc.00408C64
0094798C  |.  BB 01000000   MOV EBX,1
00947991  |.  8D75 C0       LEA ESI,DWORD PTR SS:[EBP-40]
00947994  |>  8D55 BC       /LEA EDX,DWORD PTR SS:[EBP-44]
00947997  |.  8B06          |MOV EAX,DWORD PTR DS:[ESI]         ;  保存起来的12个结果
00947999  |.  E8 C2DCADFF   |CALL WinNc.00425660
0094799E  |.  8B55 BC       |MOV EDX,DWORD PTR SS:[EBP-44]      ;  转字符形式
009479A1  |.  8D45 F8       |LEA EAX,DWORD PTR SS:[EBP-8]
009479A4  |.  E8 AB25ACFF   |CALL WinNc.00409F54
009479A9  |.  83FB 04       |CMP EBX,4
009479AC  |.  74 05         |JE SHORT WinNc.009479B3            ;  分段
009479AE  |.  83FB 08       |CMP EBX,8
009479B1  |.  75 0D         |JNZ SHORT WinNc.009479C0           ;  分段
009479B3  |>  8D45 F8       |LEA EAX,DWORD PTR SS:[EBP-8]
009479B6  |.  BA 147A9400   |MOV EDX,WinNc.00947A14
009479BB  |.  E8 9425ACFF   |CALL WinNc.00409F54
009479C0  |>  43            |INC EBX
009479C1  |.  83C6 04       |ADD ESI,4
009479C4  |.  83FB 0D       |CMP EBX,0D
009479C7  |.^ 75 CB         \JNZ SHORT WinNc.00947994           ;  12位平均分成3段,每段4位
009479C9  |.  8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]
009479CC  |.  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]
009479CF  |.  E8 7016ACFF   CALL WinNc.00409044
009479D4  |.  33C0          XOR EAX,EAX
009479D6  |.  5A            POP EDX
009479D7  |.  59            POP ECX
009479D8  |.  59            POP ECX
009479D9  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
009479DC  |.  68 FE799400   PUSH WinNc.009479FE
009479E1  |>  8D45 BC       LEA EAX,DWORD PTR SS:[EBP-44]
009479E4  |.  E8 7B12ACFF   CALL WinNc.00408C64
009479E9  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
009479EC  |.  BA 02000000   MOV EDX,2
009479F1  |.  E8 CE12ACFF   CALL WinNc.00408CC4
009479F6  \.  C3            RETN
009479F7   .^ E9 6408ACFF   JMP WinNc.00408260
009479FC   .^ EB E3         JMP SHORT WinNc.009479E1
009479FE   .  5F            POP EDI
009479FF   .  5E            POP ESI
00947A00   .  5B            POP EBX
00947A01   .  8BE5          MOV ESP,EBP
00947A03   .  5D            POP EBP
00947A04   .  C2 0400       RETN 4
其实上面我已经注释的比较详细了~~~,这里小结一下:
 a.第一个循环得到一个数值,并参与第三个循环的计算,其来历详见下面的第五部分。
 b.第二个循环是对用户名的判断与处理。用户名长度不足12位则自我复制一直到不小于12位为止。
 这里要说明的是,用户名的自我复制是以新用户名为准来复制。比如用户名"ABCD",则自我复制的过程为:
 ABCD--->ABCDABCD--->ABCDABCDABCDABCD
 这里需要大家注意下即可~~
 不信,可以去这里看看:
 
 复制代码00409F6C   .  8B56 FC       MOV EDX,DWORD PTR DS:[ESI-4]
  00409F6F   .  01FA          ADD EDX,EDI                      ;  自己复制后再次复制~~~~!!!
  00409F71   .  F7C2 000000C0 TEST EDX,C0000000
c.第三个循环其实是依次取用户名每一位的ASC,查表、计算,得到12位数值。
 d.第四个循环就很简单了,数值转字符,格式化为“XXXX-XXXX-XXXX”的形式。没啥可说的,也不解释~~~
 
 
   
 
 
 
 
 
 五、水榭听香 指点群豪戏
 
 
 
 
 
 六、奈天昏地暗斗转星移
 
 
 
 
 七、悄立雁门,绝壁无余字!
 
 
 没什么需要说的了。
 燕云十八骑 奔腾如虎风烟举:
 
 
  实时验证通过~~~~~ 
 
  OK了 
 
  reged! 
 
 
 
 
 
 PS:本文首发于飘云阁论坛。转载请注明出处。谢谢~~
  
 
 | 
 评分
查看全部评分
 |