【破解软件】Picture To Icon 1.914
【下载地址】http://www.onlinedown.net/soft/45891.htm
【运行环境】Win9x/Me/NT/2000/XP/2003
【保护方式】ASPack 壳、注册码 
【作者声明】初学Crack,只是感兴趣,没有其他目的。错误之处敬请诸位前辈不吝赐教
【调试环境】Winxp、OllyDBD、PEiD
【软件信息】能将图片或屏幕的一部分转化为ICON图标,调整图标大小以及从资源库中提取icon。支持BMP, JPEG, GIF, CUR, WMF。
【破解过程】常在论坛学习Crack,找了个简单的软件练习,增加学习的兴趣。

一、脱壳

PEiD 查壳:ASPack 2.001 -> Alexey Solodovnikov  OD载入,提示“入口点超出代码范围......”确定后,提示“代码段可能被压

缩、加密....”选否。停在下面:

00613001 >  60              PUSHAD              ; 入口代码
00613002    E8 72050000     CALL Pic2Ico.00613579       ; F8到此 ESP=12FFA4 
00613007    EB 4C           JMP SHORT Pic2Ico.00613055

下断:HR ESP  F9

006134F4   /75 08           JNZ SHORT Pic2Ico.006134FE        ; 断在此,F8跳
006134F6   |B8 01000000     MOV EAX,1
006134FB   |C2 0C00         RETN 0C
006134FE   \68 CC154000     PUSH Pic2Ico.004015CC       ; 跳到这儿
00613503    C3              RETN               ; F8返回到004015CC

004015CC   /EB 10           JMP SHORT Pic2Ico.004015DE    ; 到达OEP
004015CE   |66:623A         BOUND DI,DWORD PTR DS:[EDX]
004015D1   |43              INC EBX
004015D2   |2B2B            SUB EBP,DWORD PTR DS:[EBX]
004015D4   |48              DEC EAX
004015D5   |4F              DEC EDI
004015D6   |4F              DEC EDI
004015D7   |4B              DEC EBX

在004015CC处OllyDump方式1脱壳,保存文件后,运行正常。PEiD 再查: Borland C++ 1999


二、追码

OD载入脱壳后文件,查找字串参考,找到:register successfully!\nthank you,双击来到:00422BED处,向上翻很长一段代码,在
004228E8处下断,F9 在注册框里填用户名:wzwgp 注册码:127A31682B 点“OK”

004228E8  /.  55            PUSH EBP                         ;  断下
004228E9  |.  8BEC          MOV EBP,ESP
004228EB  |.  83C4 9C       ADD ESP,-64
      --------------中间省略------------------
00422926  |.  8B4D A4       MOV ECX,DWORD PTR SS:[EBP-5C]
00422929  |.  8B81 00030000 MOV EAX,DWORD PTR DS:[ECX+300]
0042292F  |.  E8 E4FE0900   CALL zt.004C2818
00422934  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]      ;  用户名地址指针入EAX
00422937  |.  E8 6032FEFF   CALL zt.00405B9C                  ;  取得用户名位数
0042293C  |.  83F8 03       CMP EAX,3                         ;  用户名位数与3比较大小
0042293F  |.  0F9CC2        SETL DL
00422942  |.  83E2 01       AND EDX,1
00422945  |.  52            PUSH EDX                          
00422946  |.  FF4D C4       DEC DWORD PTR SS:[EBP-3C]         
00422949  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]     
0042294C  |.  BA 02000000   MOV EDX,2                         
00422951  |.  E8 1E0F0D00   CALL zt.004F3874                  
00422956  |.  59            POP ECX
00422957  |.  84C9          TEST CL,CL
00422959  |.  74 3C         JE SHORT zt.00422997              ;  用户名位数大于3位跳
0042295B  |.  66:C745 B8 14>MOV WORD PTR SS:[EBP-48],14
00422961  |.  BA 6D275100   MOV EDX,zt.0051276D               ;  please input your full name!

00422997  |> \68 F4010000   PUSH 1F4                          ; /跳到此
0042299C  |.  E8 B7A40E00   CALL <JMP.&kernel32.Sleep>        ; \Sleep
004229A1  |.  66:C745 B8 20>MOV WORD PTR SS:[EBP-48],20
004229A7  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
004229AA  |.  E8 CD11FEFF   CALL zt.00403B7C
004229AF  |.  8BD0          MOV EDX,EAX
004229B1  |.  FF45 C4       INC DWORD PTR SS:[EBP-3C]
004229B4  |.  8B4D A4       MOV ECX,DWORD PTR SS:[EBP-5C]
004229B7  |.  8B81 04030000 MOV EAX,DWORD PTR DS:[ECX+304]
004229BD  |.  E8 56FE0900   CALL zt.004C2818                  ;  取假码
004229C2  |.  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]      ;  假码地址指针入EDX
004229C5  |.  FF32          PUSH DWORD PTR DS:[EDX]           ;  Arg1 = 00BA3684 (ASCII "127A31682B")
004229C7  |.  E8 24E7FFFF   CALL zt.004210F0                  ;  F7 进入算法

 004229C7 处F7 来到下面:

004210F0  /$  55            PUSH EBP
004210F1  |.  8BEC          MOV EBP,ESP
004210F3  |.  81C4 74FFFFFF ADD ESP,-8C
004210F9  |.  56            PUSH ESI
004210FA  |.  57            PUSH EDI
004210FB  |.  B8 C0285100   MOV EAX,zt.005128C0
00421100  |.  E8 7B760C00   CALL zt.004E8780
00421105  |.  C745 F8 01000>MOV DWORD PTR SS:[EBP-8],1
0042110C  |.  8D55 08       LEA EDX,DWORD PTR SS:[EBP+8]
0042110F  |.  8D45 08       LEA EAX,DWORD PTR SS:[EBP+8]
00421112  |.  E8 DD260D00   CALL zt.004F37F4
00421117  |.  FF45 F8       INC DWORD PTR SS:[EBP-8]
0042111A  |.  66:C745 EC 08>MOV WORD PTR SS:[EBP-14],8
00421120  |.  C645 DB 00    MOV BYTE PTR SS:[EBP-25],0
00421124  |.  8D45 08       LEA EAX,DWORD PTR SS:[EBP+8]
00421127  |.  E8 704AFEFF   CALL zt.00405B9C         ;  取假码位数
0042112C  |.  83F8 2C       CMP EAX,2C                       ;  注册码要44位,填入44位注册码重新来到此
0042112F      0F85 3E020000 JNZ zt.00421373
00421135  |.  BE D6245100   MOV ESI,zt.005124D6              ;  常数组入ESI (1z1h+2a0n-0g8y*9a1n|)
0042113A  |.  8D7D 88       LEA EDI,DWORD PTR SS:[EBP-78]
0042113D  |.  B9 05000000   MOV ECX,5
00421142  |.  F3:A5         REP MOVS DWORD PTR ES:[EDI],DWOR>; 常数入栈(12FA30-40)  
00421144  |.  A4            MOVS BYTE PTR ES:[EDI],BYTE PTR >
00421145  |.  8D45 08       LEA EAX,DWORD PTR SS:[EBP+8]     ; 假码地址入EAX
00421148  |.  E8 2B10FEFF   CALL zt.00402178         ; 取假码
0042114D  |.  0FBE50 28     MOVSX EDX,BYTE PTR DS:[EAX+28]  ; 假码41位入EDX
00421151  |.  83FA 50       CMP EDX,50                       ; 第41位注册码(50)
00421154      74 23         JE SHORT zt.00421179
00421156  |.  33C0          XOR EAX,EAX
00421158  |.  50            PUSH EAX
00421159  |.  FF4D F8       DEC DWORD PTR SS:[EBP-8]
0042115C  |.  8D45 08       LEA EAX,DWORD PTR SS:[EBP+8]
0042115F  |.  BA 02000000   MOV EDX,2
00421164  |.  E8 0B270D00   CALL zt.004F3874
00421169  |.  58            POP EAX
0042116A  |.  8B55 DC       MOV EDX,DWORD PTR SS:[EBP-24]
0042116D  |.  64:8915 00000>MOV DWORD PTR FS:[0],EDX
00421174      E9 19020000   JMP zt.00421392
00421179  |>  8D45 08       LEA EAX,DWORD PTR SS:[EBP+8]
0042117C  |.  E8 F70FFEFF   CALL zt.00402178
00421181  |.  0FBE50 29     MOVSX EDX,BYTE PTR DS:[EAX+29]
00421185  |.  83FA 32       CMP EDX,32            ; 第42位注册码(32)
00421188  |.  74 23         JE SHORT zt.004211AD
0042118A  |.  33C0          XOR EAX,EAX
0042118C  |.  50            PUSH EAX
0042118D  |.  FF4D F8       DEC DWORD PTR SS:[EBP-8]
00421190  |.  8D45 08       LEA EAX,DWORD PTR SS:[EBP+8]
00421193  |.  BA 02000000   MOV EDX,2
00421198  |.  E8 D7260D00   CALL zt.004F3874
0042119D  |.  58            POP EAX
0042119E  |.  8B55 DC       MOV EDX,DWORD PTR SS:[EBP-24]
004211A1  |.  64:8915 00000>MOV DWORD PTR FS:[0],EDX
004211A8  |.  E9 E5010000   JMP zt.00421392
004211AD  |>  8D45 08       LEA EAX,DWORD PTR SS:[EBP+8]
004211B0  |.  E8 C30FFEFF   CALL zt.00402178
004211B5  |.  0FBE50 2A     MOVSX EDX,BYTE PTR DS:[EAX+2A]
004211B9  |.  83FA 49       CMP EDX,49                        ; 第43位注册码(49)
004211BC  |.  74 23         JE SHORT zt.004211E1
004211BE  |.  33C0          XOR EAX,EAX
004211C0  |.  50            PUSH EAX
004211C1  |.  FF4D F8       DEC DWORD PTR SS:[EBP-8]
004211C4  |.  8D45 08       LEA EAX,DWORD PTR SS:[EBP+8]
004211C7  |.  BA 02000000   MOV EDX,2
004211CC  |.  E8 A3260D00   CALL zt.004F3874
004211D1  |.  58            POP EAX
004211D2  |.  8B55 DC       MOV EDX,DWORD PTR SS:[EBP-24]
004211D5  |.  64:8915 00000>MOV DWORD PTR FS:[0],EDX
004211DC  |.  E9 B1010000   JMP zt.00421392
004211E1  |>  8D45 08       LEA EAX,DWORD PTR SS:[EBP+8]
004211E4  |.  E8 8F0FFEFF   CALL zt.00402178
004211E9  |.  0FBE50 2B     MOVSX EDX,BYTE PTR DS:[EAX+2B]
004211ED  |.  83FA 31       CMP EDX,31                        ;  第44位注册码(31)
004211F0  |.  74 23         JE SHORT zt.00421215       ;  相等就跳

00421215  |> \8D45 08       LEA EAX,DWORD PTR SS:[EBP+8]      ;  跳到此
00421218  |.  E8 5B0FFEFF   CALL zt.00402178
0042121D  |.  50            PUSH EAX                           
0042121E  |.  8D55 A0       LEA EDX,DWORD PTR SS:[EBP-60]     
00421221  |.  52            PUSH EDX                           
00421222  |.  E8 B5720C00   CALL zt.004E84DC                   
00421227  |.  83C4 08       ADD ESP,8
0042122A  |.  0FBE4D A1     MOVSX ECX,BYTE PTR SS:[EBP-5F]  ; 取假码第2位
0042122E  |.  83F9 30       CMP ECX,30                        ; 第2位注册码(30)
00421231      0F85 3C010000 JNZ zt.00421373                    
00421237  |.  C645 A1 23    MOV BYTE PTR SS:[EBP-5F],23       ; 常数32替换第2位注册码
0042123B  |.  C645 DB 01    MOV BYTE PTR SS:[EBP-25],1
0042123F  |.  C745 D4 02000>MOV DWORD PTR SS:[EBP-2C],2
 
 进入第一个循环
00421246  |> /8B45 D4       /MOV EAX,DWORD PTR SS:[EBP-2C]
00421249  |. |0FBE5405 88   |MOVSX EDX,BYTE PTR SS:[EBP+EAX-78]      ;  edx=31(常数组第三位)(逐位取常数组)
0042124E  |. |8B4D D4       |MOV ECX,DWORD PTR SS:[EBP-2C]           ;  [ebp-2c]=2
00421251  |. |0FBE440D 9F   |MOVSX EAX,BYTE PTR SS:[EBP+ECX-61]      ;  eax=23(替换后的假码第二位、逐位取假码)
00421256  |. |03D0          |ADD EDX,EAX                             ;  edx=54
00421258  |. |8B4D D4       |MOV ECX,DWORD PTR SS:[EBP-2C]
0042125B  |. |0FBE440D A0   |MOVSX EAX,BYTE PTR SS:[EBP+ECX-60]      ;  eax=37(假码第三位、逐位取假码)
00421260  |. |33D0          |XOR EDX,EAX                             ;  edx=63
00421262  |. |8B4D D4       |MOV ECX,DWORD PTR SS:[EBP-2C]
00421265  |. |0FBE440D 88   |MOVSX EAX,BYTE PTR SS:[EBP+ECX-78]      ;  eax=31
0042126A  |. |33D0          |XOR EDX,EAX                             ;  edx=52
0042126C  |. |52            |PUSH EDX                                
0042126D  |. |E8 26010000   |CALL zt.00421398                        
00421272  |. |59            |POP ECX
00421273  |. |B9 1A000000   |MOV ECX,1A
00421278  |. |99            |CDQ
00421279  |. |F7F9          |IDIV ECX                                ;  eax=3  edx=4 (52 IDIV 1A)
0042127B  |. |83C2 41       |ADD EDX,41                              ;  edx=4+41=45
0042127E  |. |8B45 D4       |MOV EAX,DWORD PTR SS:[EBP-2C]
00421281  |. |0FBE4C05 A9   |MOVSX ECX,BYTE PTR SS:[EBP+EAX-57]      ;  假码第12位入ecx
00421286  |. |3BD1          |CMP EDX,ECX               ;  注册码第12位=45
00421288     |75 06          JZ SHORT zt.00421290                    ;  将JN改成JNZ可以走完循环
0042128A  |. |C645 DB 00    |MOV BYTE PTR SS:[EBP-25],0
0042128E  |. |EB 09         |JMP SHORT zt.00421299
00421290  |> |FF45 D4       |INC DWORD PTR SS:[EBP-2C]               ;  [ebp-2c]=2+1(计数器)
00421293  |. |837D D4 0A    |CMP DWORD PTR SS:[EBP-2C],0A
00421297  |.^\7C AD         \JL SHORT zt.00421246                    ;  [ebp-2c]小于0A循环

 通过该循环计算出44位注册码中的8个数(45 41 4D 59 50 47 51 57),第12位到第19位。
 走出第一个循环来到第二个循环,将已知的注册码填到对应位置,来到第二个循环。

004212B6  |> /8B55 D0       /MOV EDX,DWORD PTR SS:[EBP-30]           ;  18入EDX [EBP-30]计数器
004212B9  |. |0FBE4415 89   |MOVSX EAX,BYTE PTR SS:[EBP+EDX-77]      ;  替换后的假码第二位入EAX (逐位取假码)
004212BE  |. |B9 06000000   |MOV ECX,6
004212C3  |. |99            |CDQ
004212C4  |. |F7F9          |IDIV ECX                                ;  EAX=5 EDX=5 (23 IDIV 6)
004212C6  |. |8BCA          |MOV ECX,EDX                             ;  ECX=5
004212C8  |. |8B45 D0       |MOV EAX,DWORD PTR SS:[EBP-30]
004212CB  |. |0FBE5405 8A   |MOVSX EDX,BYTE PTR SS:[EBP+EAX-76]      ;  假码第3位入EDX (逐位取假码)
004212D0  |. |D3E2          |SHL EDX,CL                              ;  EDX=6E0  Cl=5 (逻辑右移)
004212D2  |. |8B45 D0       |MOV EAX,DWORD PTR SS:[EBP-30]
004212D5  |. |0FBE4C05 8B   |MOVSX ECX,BYTE PTR SS:[EBP+EAX-75]      ;  假码第4位入ECX=41 (A)
004212DA  |. |0BD1          |OR EDX,ECX                              ;  EDX=6E1 (6E0 OR 41)
004212DC  |. |52            |PUSH EDX                                
004212DD  |. |E8 B6000000   |CALL zt.00421398                        ;  EDX的值存入EAX
004212E2  |. |59            |POP ECX
004212E3  |. |B9 1A000000   |MOV ECX,1A
004212E8  |. |99            |CDQ
004212E9  |. |F7F9          |IDIV ECX                                ;  eax=43 edx=13 (6E1 IDIV 1A)
004212EB  |. |80C2 61       |ADD DL,61                               ;  DL=13+61=74
004212EE  |. |8B45 D0       |MOV EAX,DWORD PTR SS:[EBP-30]
004212F1  |. |889405 5CFFFF>|MOV BYTE PTR SS:[EBP+EAX-A4],DL         ;  保存计算结果
004212F8  |. |FF45 D0       |INC DWORD PTR SS:[EBP-30]               ;  计数器加1
004212FB  |. |837D D0 28    |CMP DWORD PTR SS:[EBP-30],28            ;  计数器的数值小于28继续循环
004212FF  |.^\7C B5         \JL SHORT zt.004212B6                    ;  循环

  通过第二个循环计算出一组中间数,共16个(74 78 6C 65 75 67 75 68 70 6C 72 66 71 66 6C 62 )。

00421301  |> \C645 84 5A    MOV BYTE PTR SS:[EBP-7C],5A              ; 5A加入中间数第17个 
00421305  |.  C645 85 59    MOV BYTE PTR SS:[EBP-7B],59       ; 59加入中间数第18个
00421309  |.  C745 CC 18000>MOV DWORD PTR SS:[EBP-34],18
00421310  |.  66:C745 EC 08>MOV WORD PTR SS:[EBP-14],8
00421316  |.  837D CC 28    CMP DWORD PTR SS:[EBP-34],28
0042131A  |.  7D 4A         JGE SHORT zt.00421366

  走出第二个循环来到第三个循环。

0042131C  |> /8B55 CC       /MOV EDX,DWORD PTR SS:[EBP-34]           ;  [ebp-34]=18 计数器
0042131F  |. |0FBE8415 5CFF>|MOVSX EAX,BYTE PTR SS:[EBP+EDX-A4]      ;  中间数第一位入EAX=74(逐位取数)
00421327  |. |C1E0 04       |SHL EAX,4                               ;  逻辑左移4位
0042132A  |. |8B55 CC       |MOV EDX,DWORD PTR SS:[EBP-34]
0042132D  |. |0FBE8C15 5DFF>|MOVSX ECX,BYTE PTR SS:[EBP+EDX-A3]      ;  中间数第2位入ECX=78(逐位取数)
00421335  |. |D1F9          |SAR ECX,1                               ;  算术右移1位
00421337  |. |33C1          |XOR EAX,ECX                             ;  EAX=77C
00421339  |. |50            |PUSH EAX                                
0042133A  |. |E8 59000000   |CALL zt.00421398                        
0042133F  |. |59            |POP ECX
00421340  |. |B9 1A000000   |MOV ECX,1A
00421345  |. |99            |CDQ
00421346  |. |F7F9          |IDIV ECX                                ;  EAX=49 EDX=12
00421348  |. |83C2 41       |ADD EDX,41                              ;  EDX=12+41=53
0042134B  |. |8B45 CC       |MOV EAX,DWORD PTR SS:[EBP-34]
0042134E  |. |0FBE4405 A0   |MOVSX EAX,BYTE PTR SS:[EBP+EAX-60]      ;  取第25位假码(逐位比较注册码)
00421353  |. |3BD0          |CMP EDX,EAX
00421355     |74 06         JE SHORT zt.0042135D
00421357  |. |C645 DB 00    |MOV BYTE PTR SS:[EBP-25],0
0042135B  |. |EB 09         |JMP SHORT zt.00421366
0042135D  |> |FF45 CC       |INC DWORD PTR SS:[EBP-34]
00421360  |. |837D CC 28    |CMP DWORD PTR SS:[EBP-34],28
00421364  |.^\7C B6         \JL SHORT zt.0042131C          ; [ebp-34]小于28继续循环

 通过第三个循环计算出44位注册码中的16个数(53 59 4B 45 54 59 55 45 41 52 52 4D 48 4B 4A 50),第25位到第40位。

00421366  |> \0FBE55 AA     MOVSX EDX,BYTE PTR SS:[EBP-56]           ;  取假码11位入EDX
0042136A  |.  83FA 59       CMP EDX,59                               ;  注册码第11位=59
0042136D      74 04         JE SHORT zt.00421373
0042136F  |.  C645 DB 00    MOV BYTE PTR SS:[EBP-25],0
00421373  |>  8A45 DB       MOV AL,BYTE PTR SS:[EBP-25]
00421376  |.  50            PUSH EAX
00421377  |.  FF4D F8       DEC DWORD PTR SS:[EBP-8]
0042137A  |.  8D45 08       LEA EAX,DWORD PTR SS:[EBP+8]             ;  取假码地址入EAX
0042137D  |.  BA 02000000   MOV EDX,2
00421382  |.  E8 ED240D00   CALL zt.004F3874
00421387  |.  58            POP EAX
00421388  |.  8B55 DC       MOV EDX,DWORD PTR SS:[EBP-24]
0042138B  |.  64:8915 00000>MOV DWORD PTR FS:[0],EDX
00421392  |>  5F            POP EDI
00421393  |.  5E            POP ESI
00421394  |.  8BE5          MOV ESP,EBP
00421396  |.  5D            POP EBP
00421397  \.  C3            RETN                                     ; 返回到 004229CC

走完 004229C7处 CALL zt.004210F0  返回到下面:

004229C7  |.  E8 24E7FFFF   CALL zt.004210F0                         
004229CC  |.  59            POP ECX                 ; 返回到此
004229CD  |.  8B0D FCAE5100 MOV ECX,DWORD PTR DS:[51AEFC]            
004229D3  |.  8B11          MOV EDX,DWORD PTR DS:[ECX]
004229D5  |.  8882 E4030000 MOV BYTE PTR DS:[EDX+3E4],AL
   --------------中间省略------------------
00422A48  |.  E8 2BF7FDFF   CALL zt.00402178
00422A4D  |.  0FBE50 17     MOVSX EDX,BYTE PTR DS:[EAX+17]           ; 取假码第24位入EDX
00422A51  |.  83FA 30       CMP EDX,30
00422A54  |.  7C 16         JL SHORT zt.00422A6C
00422A56  |.  8B45 A4       MOV EAX,DWORD PTR SS:[EBP-5C]
00422A59  |.  05 20030000   ADD EAX,320
00422A5E  |.  E8 15F7FDFF   CALL zt.00402178
00422A63  |.  0FBE50 17     MOVSX EDX,BYTE PTR DS:[EAX+17]      ; 取假码第24位入EDX
00422A67  |.  83FA 39       CMP EDX,39
00422A6A      7E 0F         JLE SHORT zt.00422A7B

  注册码第24位是0-9(十进制)之间的任意数
 一路往下走就到了"register successfully!\nthank you."

00422BDE  |.  FF51 FC       CALL NEAR DWORD PTR DS:[ECX-4]
00422BE1  |.  66:C745 B8 5C>MOV WORD PTR SS:[EBP-48],5C
00422BE7  |>  66:C745 B8 74>MOV WORD PTR SS:[EBP-48],74
00422BED  |.  BA A8275100   MOV EDX,zt.005127A8                      ;  register successfully!\nthank you.

三、追码总结

1.用户名要3位以上,与注册码无关。
2.注册码位数是44位(ASCII字符)。
3.注册码第1位、第3到10位(参与不固定注册码运算)、第20到23位可以取任意字符。
4.注册码第2位、第41到44位是固定字符:0 P 2 I 1
5.注册码第24位是0-9(十进制)之间的任意字符
6.第2位〔常数23(h)替换〕到10位注册码与常数组(1z1h+2a0n-0g8y*9a1n|)
  通过循环逐位运算得到注册码第12到19位注册码。
7.第2位〔常数23(h)替换〕到19位注册码通过循环逐位运算得到一组中间数16个,
  再加上固定数5A 59, 中间数组共计有18个。
8.18个中间数通过循环逐位运算得到第25位到第40位注册码。

我的用户名:wzwgp
  注册码:107A31682BYEAMYPGQW56787SYKETYUEARRMHKJPP2I1

注册信息保存在注册表:HKEY_USERS\S-1-5-21-1123561945-492894223-1060284298-1002\Software\XTZY\Pic2Ico

 破文写得很乱,感谢你看完。