• 标 题:PowerArchiver破解过程。
  • 作 者:zdd
  • 时 间:2003年10月30日 07:20
  • 链 接:http://bbs.pediy.com

软件介绍:
    相当值得推荐的压缩程序,除了一般压缩与解压缩的功能外,它并可设立密码及分片压缩功能,且支持鼠标右键的快显功能、可立即压缩与解压缩或制成自动解压缩文件、功能比起WinZip、丝毫不逊色。支持ZIP、RAR、CAB、ARJ、LHA、ACE、ARC、TAR、GZ、ZOO、XXE、UUE等格式。
下载地址:http://soft.563.cn/soft/639.html
破解工具:ollydbg1.09,W32Dasm黄金版
用W32Dasm查找字符串的过程我就不说了。大家都知道。
005F8EE8  /. 55             PUSH EBP  //断在这里。
005F8EE9  |. 8BEC           MOV EBP,ESP
005F8EEB  |. 6A 00          PUSH 0
005F8EED  |. 6A 00          PUSH 0
005F8EEF  |. 53             PUSH EBX
005F8EF0  |. 56             PUSH ESI
005F8EF1  |. 8BD8           MOV EBX,EAX
005F8EF3  |. 33C0           XOR EAX,EAX
005F8EF5  |. 55             PUSH EBP
005F8EF6  |. 68 E5905F00    PUSH POWERARC.005F90E5
005F8EFB  |. 64:FF30        PUSH DWORD PTR FS:[EAX]
005F8EFE  |. 64:8920        MOV DWORD PTR FS:[EAX],ESP
005F8F01  |. 8D55 FC        LEA EDX,DWORD PTR SS:[EBP-4]
005F8F04  |. 8B83 F0020000  MOV EAX,DWORD PTR DS:[EBX+2F0]
005F8F0A  |. E8 15CEE3FF    CALL POWERARC.00435D24
005F8F0F  |. 8D55 F8        LEA EDX,DWORD PTR SS:[EBP-8]
005F8F12  |. 8B83 F4020000  MOV EAX,DWORD PTR DS:[EBX+2F4]
005F8F18  |. E8 07CEE3FF    CALL POWERARC.00435D24
005F8F1D  |. A1 00EC6900    MOV EAX,DWORD PTR DS:[69EC00]
005F8F22  |. 8038 00        CMP BYTE PTR DS:[EAX],0
005F8F25  |. 74 37          JE SHORT POWERARC.005F8F5E
005F8F27  |. A1 C0EB6900    MOV EAX,DWORD PTR DS:[69EBC0]
005F8F2C  |. 8B00           MOV EAX,DWORD PTR DS:[EAX]
005F8F2E  |. E8 51BCE0FF    CALL POWERARC.00404B84
005F8F33  |. 8BF0           MOV ESI,EAX
005F8F35  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
005F8F38  |. E8 47BCE0FF    CALL POWERARC.00404B84
005F8F3D  |. 3BF0           CMP ESI,EAX
005F8F3F  |. 75 1D          JNZ SHORT POWERARC.005F8F5E
005F8F41  |. 8B55 F8        MOV EDX,DWORD PTR SS:[EBP-8]
005F8F44  |. B8 FC905F00    MOV EAX,POWERARC.005F90FC
005F8F49  |. E8 22BFE0FF    CALL POWERARC.00404E70
005F8F4E  |. 85C0           TEST EAX,EAX
005F8F50  |. 7E 0C          JLE SHORT POWERARC.005F8F5E
005F8F52  |. 8BC3           MOV EAX,EBX
005F8F54  |. E8 3F8EE5FF    CALL POWERARC.00451D98
005F8F59  |. E9 6C010000    JMP POWERARC.005F90CA
005F8F5E  |> 8B55 F8        MOV EDX,DWORD PTR SS:[EBP-8]
005F8F61  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
005F8F64  |. E8 07FFFFFF    CALL POWERARC.005F8E70                   //关键call,进入。
005F8F69  |. 84C0           TEST AL,AL
005F8F6B  |. 0F85 9D000000  JNZ POWERARC.005F900E
005F8F71  |. FE05 40F3BE00  INC BYTE PTR DS:[BEF340]

===========================================================================================
===========================================================================================

进入005F8F64 处的关键call处后,代码如下:


005F8E70  /$ 55             PUSH EBP
005F8E71  |. 8BEC           MOV EBP,ESP
005F8E73  |. 83C4 F4        ADD ESP,-0C
005F8E76  |. 53             PUSH EBX
005F8E77  |. 33C9           XOR ECX,ECX
005F8E79  |. 894D F4        MOV DWORD PTR SS:[EBP-C],ECX
005F8E7C  |. 8955 F8        MOV DWORD PTR SS:[EBP-8],EDX
005F8E7F  |. 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX
005F8E82  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
005F8E85  |. E8 AEBEE0FF    CALL POWERARC.00404D38                   ;  guanjian
005F8E8A  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
005F8E8D  |. E8 A6BEE0FF    CALL POWERARC.00404D38
005F8E92  |. 33C0           XOR EAX,EAX
005F8E94  |. 55             PUSH EBP
005F8E95  |. 68 D98E5F00    PUSH POWERARC.005F8ED9
005F8E9A  |. 64:FF30        PUSH DWORD PTR FS:[EAX]
005F8E9D  |. 64:8920        MOV DWORD PTR FS:[EAX],ESP
005F8EA0  |. 8D55 F4        LEA EDX,DWORD PTR SS:[EBP-C]
005F8EA3  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
005F8EA6  |. E8 95650500    CALL POWERARC.0064F440                //关键call,进入。
005F8EAB  |. 8B55 F4        MOV EDX,DWORD PTR SS:[EBP-C]
005F8EAE  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]


======================================================================
======================================================================

进入005F8EA6处的关键call后,代码如下:

0064F440  /$ 55             PUSH EBP
0064F441  |. 8BEC           MOV EBP,ESP
0064F443  |. 81C4 CCFDFFFF  ADD ESP,-234
0064F449  |. 53             PUSH EBX
0064F44A  |. 56             PUSH ESI
0064F44B  |. 57             PUSH EDI
0064F44C  |. 33C9           XOR ECX,ECX                       //ecx清零。
0064F44E  |. 898D D0FDFFFF  MOV DWORD PTR SS:[EBP-230],ECX
0064F454  |. 898D CCFDFFFF  MOV DWORD PTR SS:[EBP-234],ECX
0064F45A  |. 898D DCFDFFFF  MOV DWORD PTR SS:[EBP-224],ECX
0064F460  |. 898D D8FDFFFF  MOV DWORD PTR SS:[EBP-228],ECX
0064F466  |. 898D E0FDFFFF  MOV DWORD PTR SS:[EBP-220],ECX
0064F46C  |. 894D F0        MOV DWORD PTR SS:[EBP-10],ECX     //以上是一系列的清零操作。
0064F46F  |. 8955 F8        MOV DWORD PTR SS:[EBP-8],EDX
0064F472  |. 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX
0064F475  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]      //[ebp-4]=zddddz送eax。
0064F478  |. E8 BB58DBFF    CALL POWERARC.00404D38            //测试用户名是否为零。
0064F47D  |. 33C0           XOR EAX,EAX                       //eax 清零。
0064F47F  |. 55             PUSH EBP
0064F480  |. 68 8FF66400    PUSH POWERARC.0064F68F
0064F485  |. 64:FF30        PUSH DWORD PTR FS:[EAX]
0064F488  |. 64:8920        MOV DWORD PTR FS:[EAX],ESP
0064F48B  |. BE A0F66400    MOV ESI,POWERARC.0064F6A0         // ASCII 0B,"IP-POWERARC"  关键,后面计算用。
0064F490  |. 8DBD ECFEFFFF  LEA EDI,DWORD PTR SS:[EBP-114]
0064F496  |. A5             MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ES>
0064F497  |. A5             MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ES>
0064F498  |. A5             MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ES>
0064F499  |. 8D85 ECFDFFFF  LEA EAX,DWORD PTR SS:[EBP-214]
0064F49F  |. 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]       //[ebp-4]=zddddz送edx。
0064F4A2  |. B9 FF000000    MOV ECX,0FF                        //0FF(十六进制11111111)送ecx。
0064F4A7  |. E8 B456DBFF    CALL POWERARC.00404B60             //此call未分析。好象没有什么大用处。
0064F4AC  |. 33C0           XOR EAX,EAX                        //eax清零。
0064F4AE  |. 8A85 ECFEFFFF  MOV AL,BYTE PTR SS:[EBP-114]      
0064F4B4  |. 8945 F4        MOV DWORD PTR SS:[EBP-C],EAX        //eax=0送[ebp-c]。
0064F4B7  |. 33FF           XOR EDI,EDI                         //edi清零。
0064F4B9  |. BE 03140000    MOV ESI,1403                        //1403送esi。
0064F4BE  |. 8D45 F0        LEA EAX,DWORD PTR SS:[EBP-10]          
0064F4C1  |. 50             PUSH EAX                                 
0064F4C2  |. 89B5 E4FDFFFF  MOV DWORD PTR SS:[EBP-21C],ESI     //esi=1403送[ebp-21c]。      
0064F4C8  |. C685 E8FDFFFF >MOV BYTE PTR SS:[EBP-218],0         //[ebp-218]置零。     
0064F4CF  |. 8D95 E4FDFFFF  LEA EDX,DWORD PTR SS:[EBP-21C]      //[ebp-21c]=1403送edx。  
0064F4D5  |. 33C9           XOR ECX,ECX                         //eca清零。  
0064F4D7  |. B8 B4F66400    MOV EAX,POWERARC.0064F6B4           //
0064F4DC  |. E8 77D0DBFF    CALL POWERARC.0040C558                  
0064F4E1  |. 33C0           XOR EAX,EAX                         //eax清零。
0064F4E3  |. 8A85 ECFDFFFF  MOV AL,BYTE PTR SS:[EBP-214]        //用户名长度送eax。
0064F4E9  |. 85C0           TEST EAX,EAX                        //测试长度是否为零。
0064F4EB  |. 7E 6B          JLE SHORT POWERARC.0064F558          //为零则跳。条就over。(未验证。)
0064F4ED  |. 8945 EC        MOV DWORD PTR SS:[EBP-14],EAX       //eax=6送[ebp-14]。
0064F4F0  |. 8D9D EDFDFFFF  LEA EBX,DWORD PTR SS:[EBP-213]      //[ebp-213]=zddddz送ebx。
===============================================================================================
以下是计算注册码的核心地区,所加注释均以第一次循环为准。
===============================================================================================

0064F4F6  |> 33C0           /XOR EAX,EAX                       //eax清零。
0064F4F8  |. 8A03           |MOV AL,BYTE PTR DS:[EBX]          //ebx=zddddz按字节依次送入al。
0064F4FA  |. 03C6           |ADD EAX,ESI                       //第一位‘z’=7A与esi=1403相加。结果147D送eax。
0064F4FC  |. B9 FF000000    |MOV ECX,0FF                       //ecx=0FF(十六进制11111111)送ecx。
0064F501  |. 99             |CDQ                               //eax符号扩展到edx。
0064F502  |. F7F9           |IDIV ECX                          //eax/ecx结果14送eax。
0064F504  |. 8BF2           |MOV ESI,EDX                       edx=91送esi。
0064F506  |. 3B7D F4        |CMP EDI,DWORD PTR SS:[EBP-C]      
0064F509  |. 7D 03          |JGE SHORT POWERARC.0064F50E
0064F50B  |. 47             |INC EDI                          //edi=2。
0064F50C  |. EB 05          |JMP SHORT POWERARC.0064F513
0064F50E  |> BF 01000000    |MOV EDI,1
0064F513  |> 33C0           |XOR EAX,EAX                     //eax清零。
0064F515  |. 8A843D ECFEFFF>|MOV AL,BYTE PTR SS:[EBP+EDI-114] //‘i’=49送al。这里“IP-POWERARC”逐位送入al。与esi异或。
0064F51C  |. 33F0           |XOR ESI,EAX                      //(esi=91)xor(eax=49)=D8送esi。
0064F51E  |. 8D85 E0FDFFFF  |LEA EAX,DWORD PTR SS:[EBP-220]
0064F524  |. 50             |PUSH EAX                            
0064F525  |. 89B5 E4FDFFFF  |MOV DWORD PTR SS:[EBP-21C],ESI    //D8送[ebp-21c]     
0064F52B  |. C685 E8FDFFFF >|MOV BYTE PTR SS:[EBP-218],0            
0064F532  |. 8D95 E4FDFFFF  |LEA EDX,DWORD PTR SS:[EBP-21C]    //D8送edx。
0064F538  |. 33C9           |XOR ECX,ECX                       //ecx清零。     
0064F53A  |. B8 B4F66400    |MOV EAX,POWERARC.0064F6B4              
0064F53F  |. E8 14D0DBFF    |CALL POWERARC.0040C558             
0064F544  |. 8B95 E0FDFFFF  |MOV EDX,DWORD PTR SS:[EBP-220]   //D8送edx。
0064F54A  |. 8D45 F0        |LEA EAX,DWORD PTR SS:[EBP-10]
0064F54D  |. E8 3A56DBFF    |CALL POWERARC.00404B8C
0064F552  |. 43             |INC EBX                          //ebx加1。
0064F553  |. FF4D EC        |DEC DWORD PTR SS:[EBP-14]        //用户名长度减1。     
0064F556  |.^75 9E          JNZ SHORT POWERARC.0064F4F6      //长度不为零则向前跳。继续循环。

0064F558  |> 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]           把1403与每次esi中的结果连接起来 = 1403D86DF31DA02
0064F55B  |. E8 2456DBFF    CALL POWERARC.00404B84
0064F560  |. 8BF0           MOV ESI,EAX
0064F562  |. 85F6           TEST ESI,ESI                     //esi清零。
0064F564  |. 79 03          JNS SHORT POWERARC.0064F569      
0064F566  |. 83C6 03        ADD ESI,3
0064F569  |> C1FE 02        SAR ESI,2                       //esi算术右移两位。
0064F56C  |. C685 ECFDFFFF >MOV BYTE PTR SS:[EBP-214],0     //[ebp-214]置1。
0064F573  |. BB 01000000    MOV EBX,1                       //ebx置1。
0064F578  |> 8D85 DCFDFFFF  /LEA EAX,DWORD PTR SS:[EBP-224] //
0064F57E  |. 8D95 ECFDFFFF  |LEA EDX,DWORD PTR SS:[EBP-214]
0064F584  |. E8 9F55DBFF    |CALL POWERARC.00404B28          
0064F589  |. 8D85 DCFDFFFF  |LEA EAX,DWORD PTR SS:[EBP-224]
0064F58F  |. 50             |PUSH EAX
0064F590  |. 8D85 D4FDFFFF  |LEA EAX,DWORD PTR SS:[EBP-22C]
0064F596  |. 8BFB           |MOV EDI,EBX                     //ebx=1==>esi=6。
0064F598  |. 0FAFFE         |IMUL EDI,ESI                    //edi*esi=1*4=4。
0064F59B  |. 8B55 F0        |MOV EDX,DWORD PTR SS:[EBP-10]   //1403D86DFC31DA02==>edx。
0064F59E  |. 8A543A FF      |MOV DL,BYTE PTR DS:[EDX+EDI-1]  //取1403D86DFC31DA02的第四位3==>dl。
0064F5A2  |. 8850 01        |MOV BYTE PTR DS:[EAX+1],DL      ‘3’=33==>[eax+1]。
0064F5A5  |. C600 01        |MOV BYTE PTR DS:[EAX],1         //1==>eax。
0064F5A8  |. 8D95 D4FDFFFF  |LEA EDX,DWORD PTR SS:[EBP-22C]
0064F5AE  |. 8D85 D8FDFFFF  |LEA EAX,DWORD PTR SS:[EBP-228]
0064F5B4  |. E8 6F55DBFF    |CALL POWERARC.00404B28           
0064F5B9  |. 8B95 D8FDFFFF  |MOV EDX,DWORD PTR SS:[EBP-228]
0064F5BF  |. 58             |POP EAX
0064F5C0  |. E8 C755DBFF    |CALL POWERARC.00404B8C
0064F5C5  |. 8B95 DCFDFFFF  |MOV EDX,DWORD PTR SS:[EBP-224]
0064F5CB  |. 8D85 ECFDFFFF  |LEA EAX,DWORD PTR SS:[EBP-214]
0064F5D1  |. B9 FF000000    |MOV ECX,0FF                     //0FF==>ecx。
0064F5D6  |. E8 8555DBFF    |CALL POWERARC.00404B60
0064F5DB  |. 8D85 D0FDFFFF  |LEA EAX,DWORD PTR SS:[EBP-230]
0064F5E1  |. 8D95 ECFDFFFF  |LEA EDX,DWORD PTR SS:[EBP-214]  //3ddddz==>edx。
0064F5E7  |. E8 3C55DBFF    |CALL POWERARC.00404B28
0064F5EC  |. 8D85 D0FDFFFF  |LEA EAX,DWORD PTR SS:[EBP-230]
0064F5F2  |. 50             |PUSH EAX
0064F5F3  |. 8D85 D4FDFFFF  |LEA EAX,DWORD PTR SS:[EBP-22C]
0064F5F9  |. 8B55 F0        |MOV EDX,DWORD PTR SS:[EBP-10]   //1403D86DFC31DA02==>edx。
0064F5FC  |. 8A543A FE      |MOV DL,BYTE PTR DS:[EDX+EDI-2]  //取1403D86DFC31DA02第三位零==>dl。
0064F600  |. 8850 01        |MOV BYTE PTR DS:[EAX+1],DL      //‘0’=30==>[eax+1]。
0064F603  |. C600 01        |MOV BYTE PTR DS:[EAX],1         //eax置1。
0064F606  |. 8D95 D4FDFFFF  |LEA EDX,DWORD PTR SS:[EBP-22C]
0064F60C  |. 8D85 CCFDFFFF  |LEA EAX,DWORD PTR SS:[EBP-234]
0064F612  |. E8 1155DBFF    |CALL POWERARC.00404B28          
0064F617  |. 8B95 CCFDFFFF  |MOV EDX,DWORD PTR SS:[EBP-234]
0064F61D  |. 58             |POP EAX
0064F61E  |. E8 6955DBFF    |CALL POWERARC.00404B8C
0064F623  |. 8B95 D0FDFFFF  |MOV EDX,DWORD PTR SS:[EBP-230]
0064F629  |. 8D85 ECFDFFFF  |LEA EAX,DWORD PTR SS:[EBP-214]
0064F62F  |. B9 FF000000    |MOV ECX,0FF
0064F634  |. E8 2755DBFF    |CALL POWERARC.00404B60
0064F639  |. 43             |INC EBX                        //ebx加1。
0064F63A  |. 83FB 05        |CMP EBX,5
0064F63D  |.^0F85 35FFFFFF  JNZ POWERARC.0064F578          //第二次循环则取8,7两位,第三次取12,11两位。最后取16,15两位。
0064F643  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]   
0064F646  |. 8D95 ECFDFFFF  LEA EDX,DWORD PTR SS:[EBP-214]  //30D61320==>edx。//呵呵,这个就是真正的注册码了,可以注册了
0064F64C  |. E8 D754DBFF    CALL POWERARC.00404B28
0064F651  |. 33C0           XOR EAX,EAX
0064F653  |. 5A             POP EDX
0064F654  |. 59             POP ECX
0064F655  |. 59             POP ECX
0064F656  |. 64:8910        MOV DWORD PTR FS:[EAX],EDX
0064F659  |. 68 96F66400    PUSH POWERARC.0064F696
0064F65E  |> 8D85 CCFDFFFF  LEA EAX,DWORD PTR SS:[EBP-234]
0064F664  |. BA 02000000    MOV EDX,2
0064F669  |. E8 8252DBFF    CALL POWERARC.004048F0
0064F66E  |. 8D85 D8FDFFFF  LEA EAX,DWORD PTR SS:[EBP-228]
0064F674  |. BA 03000000    MOV EDX,3
0064F679  |. E8 7252DBFF    CALL POWERARC.004048F0
0064F67E  |. 8D45 F0        LEA EAX,DWORD PTR SS:[EBP-10]
0064F681  |. E8 4652DBFF    CALL POWERARC.004048CC
0064F686  |. 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
0064F689  |. E8 3E52DBFF    CALL POWERARC.004048CC
0064F68E  . C3             RETN
0064F68F   .^E9 304BDBFF    JMP POWERARC.004041C4
0064F694   .^EB C8          JMP SHORT POWERARC.0064F65E
0064F696   . 5F             POP EDI
0064F697   . 5E             POP ESI
0064F698   . 5B             POP EBX
0064F699   . 8BE5           MOV ESP,EBP
0064F69B   . 5D             POP EBP
0064F69C   . C3             RETN
=================================================================================================================
=================================================================================================================

一个可用的注册码
用户名:zddddz
注册码;30D61320
试试吧。