GGLHY 发表于 2014-2-14 18:30:48

WINNC注册算法分析实录

本帖最后由 GGLHY 于 2014-2-15 13:12 编辑

                                                                         WINNC注册算法分析实录

winnc,一款独具特色的文件管理类软件。

先放界面截图一张:


有兴趣的童靴可以移步其官网:www.winnc.com

又是一个实时验证的。呵呵。



闲话少叙,咱直奔主题:




                                                                                                 一、莽苍踏雪寻

寒风萧萧、飞雪飘零,长路漫漫,踏歌而行:
00C9EE4E|.8B83 AC030000 MOV EAX,DWORD PTR DS:
00C9EE54|.E8 CB8881FF   CALL WinNc.004B7724
00C9EE59|.8B45 F0       MOV EAX,DWORD PTR SS:       ;取用户名(UNICODE "gglhy")
00C9EE5C|.8D55 FC       LEA EDX,DWORD PTR SS:
00C9EE5F|.E8 285E78FF   CALL WinNc.00424C8C
00C9EE64|.8D55 EC       LEA EDX,DWORD PTR SS:
00C9EE67|.8B83 B4030000 MOV EAX,DWORD PTR DS:
00C9EE6D|.E8 B28881FF   CALL WinNc.004B7724
00C9EE72|.8B45 EC       MOV EAX,DWORD PTR SS:       ;取输入的假码(UNICODE "1598753046")
00C9EE75|.8D55 F8       LEA EDX,DWORD PTR SS:
00C9EE78|.E8 0F5E78FF   CALL WinNc.00424C8C
00C9EE7D|.8B45 FC       MOV EAX,DWORD PTR SS:
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:          ;用户名长度,本例为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:
(省略部分代码)
00C9EF04|>E8 9B85CAFF   CALL WinNc.009474A4
00C9EF09|.8B4D F8       MOV ECX,DWORD PTR SS:      ;输入的假码(UNICODE "1598753046")
00C9EF0C|.8B55 FC       MOV EDX,DWORD PTR SS:      ;用户名(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:
00C9EF20|.8B55 F4       MOV EDX,DWORD PTR SS:
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:
(省略部分代码)
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:
00C9EFA9|.E8 D28781FF   CALL WinNc.004B7780哎~~
00C9EF09|.8B4D F8       MOV ECX,DWORD PTR SS:      ;输入的假码(UNICODE "1598753046")
00C9EF0C|.8B55 FC       MOV EDX,DWORD PTR SS:      ;用户名(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:      ;用户名(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:          ;用户名长度,本例为5
00947AAA|>85C0          TEST EAX,EAX
00947AAC|.74 1A         JE SHORT WinNc.00947AC8
00947AAE|.8D55 F4       LEA EDX,DWORD PTR SS:
00947AB1|.8B45 FC       MOV EAX,DWORD PTR SS:      ;用户名(UNICODE "gglhy")
00947AB4|.E8 5FFFFFFF   CALL WinNc.00947A18               ;为谁开?茶花满路~
00947AB9|.8B45 F4       MOV EAX,DWORD PTR SS:      ;千万里,我追寻着你~
00947ABC|.8B55 F8       MOV EDX,DWORD PTR SS:      ;输入的假码("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:,EDX
00947AD0|.68 EA7A9400   PUSH WinNc.00947AEA
00947AD5|>8D45 F4       LEA EAX,DWORD PTR SS:
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:,EAX
00947A22|.8B45 FC       MOV EAX,DWORD PTR SS:      ;用户名(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:
00947A35|.64:8920       MOV DWORD PTR FS:,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:
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:,EDX
00947A53|.68 687A9400   PUSH WinNc.00947A68
00947A58|>8D45 FC       LEA EAX,DWORD PTR SS:
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:,EBX
00947892|.895D F8       MOV DWORD PTR SS:,EBX
00947895|.894D F0       MOV DWORD PTR SS:,ECX       ;0B,记住你了!
00947898|.8955 F4       MOV DWORD PTR SS:,EDX
0094789B|.8945 FC       MOV DWORD PTR SS:,EAX
0094789E|.8B45 FC       MOV EAX,DWORD PTR SS:
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:
009478B1|.64:8920       MOV DWORD PTR FS:,ESP
009478B4|.BF 03020000   MOV EDI,203                         ;好吧,还要记着这个203H
009478B9|.8B45 FC       MOV EAX,DWORD PTR SS:      ;用户名(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:          ;用户名长度,本例为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:       ;用户名(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:       ;用户名是否取完
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:
00947901|.8B55 FC       |MOV EDX,DWORD PTR SS:
00947904|.E8 4B26ACFF   |CALL WinNc.00409F54
00947909|>8B45 FC      MOV EAX,DWORD PTR SS:       ;用户名(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:
0094791E|>55            /PUSH EBP
0094791F|.8B45 FC       |MOV EAX,DWORD PTR SS:       ;自我复制后的用户名("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:       ;自我复制后的用户名长度,本例=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:      ;在这里会看到熟人0B哦!
0094794A|.7E 05         |JLE SHORT WinNc.00947951
0094794C|>E8 8BF4ABFF   |CALL WinNc.00406DDC
00947951|>8B4D F4       |MOV ECX,DWORD PTR SS:
00947954|.030491      |ADD EAX,DWORD PTR DS:   ;用户名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:,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:
00947987|.E8 D812ACFF   CALL WinNc.00408C64
0094798C|.BB 01000000   MOV EBX,1
00947991|.8D75 C0       LEA ESI,DWORD PTR SS:
00947994|>8D55 BC       /LEA EDX,DWORD PTR SS:
00947997|.8B06          |MOV EAX,DWORD PTR DS:         ;保存起来的12个结果
00947999|.E8 C2DCADFF   |CALL WinNc.00425660
0094799E|.8B55 BC       |MOV EDX,DWORD PTR SS:      ;转字符形式
009479A1|.8D45 F8       |LEA EAX,DWORD PTR SS:
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:
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:
009479CC|.8B55 F8       MOV EDX,DWORD PTR SS:
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:,EDX
009479DC|.68 FE799400   PUSH WinNc.009479FE
009479E1|>8D45 BC       LEA EAX,DWORD PTR SS:
009479E4|.E8 7B12ACFF   CALL WinNc.00408C64
009479E9|.8D45 F8       LEA EAX,DWORD PTR SS:
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:
00409F6F   .01FA          ADD EDX,EDI                      ;自己复制后再次复制~~~~!!!
00409F71   .F7C2 000000C0 TEST EDX,C0000000
c.第三个循环其实是依次取用户名每一位的ASC,查表、计算,得到12位数值。
d.第四个循环就很简单了,数值转字符,格式化为“XXXX-XXXX-XXXX”的形式。没啥可说的,也不解释~~~








                                                                                          五、水榭听香 指点群豪戏

**** Hidden Message *****



                                                                                              六、奈天昏地暗斗转星移

**** Hidden Message *****


                                                                                       七、悄立雁门,绝壁无余字!


没什么需要说的了。
燕云十八骑 奔腾如虎风烟举:

实时验证通过~~~~~

OK了

reged!






PS:本文首发于飘云阁论坛。转载请注明出处。谢谢~~{:handshake:}

fywy 发表于 2014-2-14 21:08:22

仔细拜读!!!!受益匪浅!!!!!感谢G大神!!!

GGLHY 发表于 2014-2-14 22:05:09

fywy 发表于 2014-2-14 21:08
仔细拜读!!!!受益匪浅!!!!!感谢G大神!!!

{:handshake:}
兄弟客气了~~

shizp 发表于 2014-2-14 23:54:22

看大神的文章就像在读武侠小说一样的峰回路转、荡气回肠。剑指江山。

yhym599 发表于 2014-2-15 00:30:05

屠龙刀,倚天剑,侠骨柔肠走江湖,好文,膜拜G兄!

飞天 发表于 2014-2-15 07:53:18

枯燥的代码用这样的方式写出来,有创意。

yunfeng 发表于 2014-2-15 10:07:27

写得很详细,也有条理,赞一下

Dxer 发表于 2014-2-15 10:55:08

{:lol:}分析的真好。谢谢楼主了

qinccckencn 发表于 2014-2-15 12:22:32

哈哈,G大,不写书,做作家,可惜了,谢谢,写得太令人心神舒畅啊,又能学到东西,看得又爽!太好了

Rooking 发表于 2014-2-15 12:26:15

膜拜GG 哥哥的又一次精彩分析 麻烦能分析一下PDF转换器么 VB的程序
页: [1] 2 3
查看完整版本: WINNC注册算法分析实录