好友
阅读权限10
听众
最后登录1970-1-1
|
GGLHY
发表于 2014-2-17 18:00
本帖最后由 GGLHY 于 2014-2-17 18:04 编辑
向来痴 从此醉 闲析WINNC
----记某软件的注册算法分析实录
俺老G学业不精~~~,只能无尽的PS+忽悠~~~~各位看官轻点喷哈~~
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 /$ 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
千万里的追寻,只为那BL要为1!
昔时因、今日意、输赢成败又争由人算?且自逍遥没谁管,却试问几时把痴心?
三、杏子林中 商略平生义
青青子衿,悠悠我心!但为“1”故,且入杏林:00947A18 /$ 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 /$ 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] ; 自我复制后的用户名长度
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
千里茫茫若梦,循环有四实三!剧饮千杯男儿事,且把剑气问循环。
第一问:第一个循环所为何事?
答:得到一个数值,并参与第三个循环的计算,其来历详见下面的第五部分——“水榭听香 指点群豪戏”。
第二问:第二个循环所为何事?
答:第二个循环是对用户名的判断与处理。用户名长度不足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
第三问:第三个循环所为何事?
答:第三个循环其实是依次取用户名每一位的ASC,查表、计算,得到12位数值。
至于第四个循环就很简单了。不涉及算法,数值转字符,格式化为“XXXX-XXXX-XXXX”的形式。没啥可说的,也不解释~~~
五、水榭听香 指点群豪戏
鸾凤如何换巢,且听龙吟虎啸:0094783C /$ 55 PUSH EBP ; 来吧,看看我们的用户名是如何翩翩起舞的
0094783D |. 8BEC MOV EBP,ESP
0094783F |. 53 PUSH EBX
00947840 |. 56 PUSH ESI
00947841 |. 8BD8 MOV EBX,EAX
00947843 |. 33F6 XOR ESI,ESI
00947845 |> 8BC3 /MOV EAX,EBX ; 所取的用户名ASC或(商)
00947847 |. B9 0A000000 |MOV ECX,0A
0094784C |. 99 |CDQ
0094784D |. F7F9 |IDIV ECX ; mod 0A
0094784F |. 03F2 |ADD ESI,EDX ; 余数累加~~~
00947851 |. 71 05 |JNO SHORT WinNc.00947858
00947853 |. E8 8CF5ABFF |CALL WinNc.00406DE4
00947858 |> B9 0A000000 |MOV ECX,0A
0094785D |. 8BC3 |MOV EAX,EBX ; 所取的用户名ASC
0094785F |. 99 |CDQ
00947860 |. F7F9 |IDIV ECX ; /0A
00947862 |. 89C3 |MOV EBX,EAX ; 商为0吗?非0则继续~~
00947864 |. 85DB |TEST EBX,EBX
00947866 |.^ 75 DD \JNZ SHORT WinNc.00947845
00947868 |. 83FE 09 CMP ESI,9 ; 余数累加和:9
0094786B |. 7E 0E JLE SHORT WinNc.0094787B
0094786D |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
00947870 |. 50 PUSH EAX
00947871 |. 8BC6 MOV EAX,ESI
00947873 |. E8 C4FFFFFF CALL WinNc.0094783C ; 如果大于9,则继续上面取余的循环
00947878 |. 59 POP ECX
00947879 |. 8BF0 MOV ESI,EAX
0094787B |> 8BC6 MOV EAX,ESI
0094787D |. 5E POP ESI
0094787E |. 5B POP EBX
0094787F |. 5D POP EBP
00947880 \. C3 RETN
对这个循环我们举个例子来演示说明一下:
比如取的用户名第一位“g”,其ASC为67H,十进制为103。那么103 除以10,得商为10,余数为3
则 商10 再除以10,得商为1, 余数为0
商1 再除以10,得商为0, 余数为1
余数相加 3 + 0 + 1 =4
换句话说,一个数除以10开始,直到其商为0为止的所有余数相加~~
嗯?那个“ CMP ESI,9 ”如果大于9呢?
Good question!
我最欣赏边看破文边动脑筋而且还能发现问题的朋友了!这里大家看看:00947873 |. E8 C4FFFFFF CALL WinNc.0094783C
再看看本小节的开头:0094783C /$ 55 PUSH EBP ; 来吧,看看我们的用户名是如何翩翩起舞的
这不正是 适闻虎啸龙吟,又见换巢鸾凤?
六、奈天昏地暗斗转星移
糊涂醉情长计短,梦里真真语真幻。
我们这里把第四部分的第三个循环以实例“斗转星移”下,给大家更直观的代入感: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] ; 自我复制后的用户名长度
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
附表:00E799B8 37 00 00 00 54 00 00 00 7...T...
00E799C0 7C 00 00 00 F1 00 00 00 |...?..
00E799C8 19 00 00 00 91 00 00 00 ...?..
00E799D0 5F 85 03 00 F4 00 00 00 _?.?..
00E799D8 C6 00 00 00 58 00 00 00 ?..X...
00E799E0 D2 00 00 00 93 00 00 00 ?..?..
再次浏览了下这段循环代码后,我们仍以实例来演示。
有请用户名的第1和第2位出场:
第一位“g”,ASC为67H,十进制103。
第一次查表,得“37” ,相加: 67 + 37 = 9E
还记得第一个循环得到的21D吗?21D + 9E = 2BB
再进入第五部分,指点群豪戏,得到结果为06,保存起来。
第二位“g”,
第二次查表,得“54” , 相加:67 + 54 = BB
还是那个21D, 21D + BB = 2D8
又去第五部分,指点群豪戏,得到结果为08,保存起来~~~
好了。为简化,我省略了下面的代码操作:
00947968 |. 33C2 |XOR EAX,EDX ; 累加结果 XOR 0
0094796A |. 2BC2 |SUB EAX,EDX ; 再-0
why?
嗯,自己去想why吧
这里要注意的是第7次查表的值是03855F。
很好,当运算完自我复制后的用户名的1~12位后,我们得到了12个数值:
看看这得到的12位:0012F418 06 00 00 00 08 00 00 00 ......
0012F420 08 00 00 00 04 00 00 00 ......
0012F428 03 00 00 00 06 00 00 00 ......
0012F430 05 00 00 00 02 00 00 00 ......
0012F438 06 00 00 00 03 00 00 00 ......
0012F440 08 00 00 00 08 00 00 00 ......
归纳下:06 08 08 04 03 06 05 02 06 03 08 08
接下来呢?转化为字符形式后格式化输出为“6884-3652-6388”。
烛畔鬓云有旧盟~试把此串入框中~~
七、悄立雁门,绝壁无余字!
没什么需要说的了。
烟云十八骑 奔腾如虎风烟举:
敬请方家指点~~~
|
免费评分
-
查看全部评分
|