• 标 题:美萍反黄专家V4.5(标准版)
  • 作 者:二点
  • 时 间:2003/08/30 09:02pm
  • 链 接:http://bbs.pediy.com

【软件名称】:美萍反黄专家V4.5(标准版)
【软件限制】:进入美萍反黄专家系统设置时需要密码验证。
【破解声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
【操作系统】:Win98
【破解工具】:TRW OllyDbg
【破解的人】:二点 (BrOKeN)
【前面的话】:这是我第一篇破文,也是我的第一次算法分析,由于以前没什么经验,所以分析美萍反黄专家算法花了我不少于10小时的时间,但是由于精力有限,最后还是没有完全分析它的算法,在这个破解的过程中,我有想过要放弃,可是最后我还是大体上把这个算法了解了,做Cracker是一件很辛苦的差事,特别是做为一名不高明的Cracker,但是我想我,我们还是要把Crack 进行到底,这就是Cracker的执着。

【破解过程】:
该软件是用aspack加壳的,用aspackdie脱之,
而且该美萍反黄专家还会侦察trw,所以先用winhex打开美萍反黄专家查找trw和TRW,将其替换为空格。
这样就可以用TRW安心调试了。
 
【爆破】:
用TRW加载美萍反黄专家,调出密码验证框,输入假密码,CTRL+N回到TRW:
bpx getwindowtexta
CTRL+N回到密码验证框,按确定,没有反应,
再一次;
bpx getdlgitemtext
还是没有反应,
只好用:
bpx hmemcpy
CTRL+N回到密码验证框,按确定,拦截到断点。
执行 bd * 使断点失效,
开始按 F12,
若干次后看见已经来到 004*****
开始用 F10单步跟踪,
经过几个RET后来到这里:
00479C82  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]   ;EDX=我们输入的假密码,
00479C85  |. 8B15 DCF24700  MOV EDX,DWORD PTR DS:[47F2DC]  ;EDX=真的密码,d edx.
00479C8B  |. E8 4CA3F8FF    CALL UNPACKED.00403FDC         ;真假比较
00479C90  |. 75 07          JNZ SHORT UNPACKED.00479C99    ;不相等就跳,
用Winhex的编辑软件将75 07 改为 90 90,保存,输入任意密码就可以进入美萍反黄专家设置界面了,
进入设置界面后我们还可以看到变成***的密码,这可以就是真的密码了,虽然可以用***显示之类的看***的密码,不过这是否麻烦了一点,由于美萍反黄专家是用DELPHI写的,DELPHI里显示为***的密码框属性是这里的:
PasswordChar = '*'
用ResHack打开软件,查找
PasswordChar = '*'
将其删掉。
就可以显示原来真正的密码了,
经过上面的修改后,我们就有了一个可以看密码的美萍反黄专家了。
【算法不完全分析】
用OllyDbg加载美萍反黄专家,由上面我们已经知道,美萍反黄专家在启动后就把密码解密,并将密码放入到一位置,待到要进入设置输入密码时在拿出来比较。
所以用用OllyDbg加载美萍反黄专家后,按F7,F8单步跟踪,来到这里:
***********************************
0047AAC5  |. B1 01          MOV CL,1
0047AAC7  |. BA ACAC4700    MOV EDX,UNPACKED.0047ACAC                ;  ASCII "SOFTWARE\Mpsoft\killporn"
0047AACC  |. E8 9752FDFF    CALL UNPACKED.0044FD68
0047AAD1  |. 8B07           MOV EAX,DWORD PTR DS:[EDI]
0047AAD3  |. BA D0AC4700    MOV EDX,UNPACKED.0047ACD0                ;  ASCII "SoftAbout"   ;美萍反黄专家加密密码键值为SoftAbout。
0047AAD8  |. E8 9F59FDFF    CALL UNPACKED.0045047C
0047AADD  |. 84C0           TEST AL,AL
0047AADF  |. 74 27          JE SHORT UNPACKED.0047AB08
0047AAE1  |. 8D4D EC        LEA ECX,DWORD PTR SS:[EBP-14]
0047AAE4  |. 8B07           MOV EAX,DWORD PTR DS:[EDI]
0047AAE6  |. BA D0AC4700    MOV EDX,UNPACKED.0047ACD0                ;  ASCII "SoftAbout"
0047AAEB  |. E8 F457FDFF    CALL UNPACKED.004502E4
0047AAF0  |. 8B45 EC        MOV EAX,DWORD PTR SS:[EBP-14]

**************************
最后来到这里,算法所在(①为第一次循环,②为二次循环):

0046AE2A  |. BE 01000000    MOV ESI,1
0046AE2F  |> 8BC6           /MOV EAX,ESI                    ;①EAX=ESI=1      
                                                           ;②EAX=ESI=2
0046AE31  |. 48             |DEC EAX                        ;①EAX =EAX-1=0
                                                           ;②EAX =EAX-1=1
0046AE32  |. C1E0 02        |SHL EAX,2                      ;①EAX = 0
                                                           ;②EAX = 1<<2=4
0046AE35  |. 8B55 FC        |MOV EDX,DWORD PTR SS:[EBP-4]   ;①[EBP-4]=17c196c=加密密码,我这里是:ElOaFUx+2k==
0046AE38  |. 8D0402         |LEA EAX,DWORD PTR DS:[EDX+EAX] ;①EAX=0,将加密密码的地址入 EAX.
                                                           ;②EAX=4,将第五个加密密码开始的地址                                                                入EAX,
0046AE3B  |. 8BD3           |MOV EDX,EBX                    ;②原EBX=0075FDCC,[EBX]=04 25 0E 1A
0046AE3D  |. B9 04000000    |MOV ECX,4          
0046AE42  |. E8 457AF9FF    |CALL UNPACKED.0040288C
0046AE47  |. 8A03           |MOV AL,BYTE PTR DS:[EBX]     ;①EBX--> 加过的密码,取第一个加密密码,这里是E(45).                                  
                                                         ;②[EBX]=F(46)
0046AE49  |. 3C 40          |CMP AL,40                    ;①和40比较,小于或等于就跳,这里[EBX]=E(45)>40,不跳
                                                         ;②46>40不跳
0046AE4B  |. 76 09          |JBE SHORT UNPACKED.0046AE56
0046AE4D  |. 3C 5B          |CMP AL,5B                    ;①和5B比较,小于或等于就跳,45<5B
                                                         ;②46<5B,不跳
0046AE4F  |. 73 05          |JNB SHORT UNPACKED.0046AE56  ;①不小于跳,所以不跳.
0046AE51  |. 802B 41        |SUB BYTE PTR DS:[EBX],41     ;①否则就减去41,[EBX]=45-41=4
                                                         ;②[EBX]=46-41=5
0046AE54  |. EB 2A          |JMP SHORT UNPACKED.0046AE80  ;①②跳0046AE80-->
0046AE56  |> 8A03           |MOV AL,BYTE PTR DS:[EBX]    
0046AE58  |. 3C 60          |CMP AL,60                    
0046AE5A  |. 76 09          |JBE SHORT UNPACKED.0046AE65
0046AE5C  |. 3C 7B          |CMP AL,7B
0046AE5E  |. 73 05          |JNB SHORT UNPACKED.0046AE65
0046AE60  |. 802B 47        |SUB BYTE PTR DS:[EBX],
0046AE63  |. EB 1B          |JMP SHORT UNPACKED.0046AE80
0046AE65  |> 8A03           |MOV AL,BYTE PTR DS:[EBX]
0046AE67  |. 3C 2F          |CMP AL,2F
0046AE69  |. 76 09          |JBE SHORT UNPACKED.0046AE74
0046AE6B  |. 3C 3A          |CMP AL,3A
0046AE6D  |. 73 05          |JNB SHORT UNPACKED.0046AE74
0046AE6F  |. 8003 04        |ADD BYTE PTR DS:[EBX],4
0046AE72  |. EB 0C          |JMP SHORT UNPACKED.0046AE80
0046AE74  |> 3C 2B          |CMP AL,2B
0046AE76  |. 75 05          |JNZ SHORT UNPACKED.0046AE7D
0046AE78  |. C603 3E        |MOV BYTE PTR DS:[EBX],3E
0046AE7B  |. EB 03          |JMP SHORT UNPACKED.0046AE80
0046AE7D  |> C603 3F        |MOV BYTE PTR DS:[EBX],3F
0046AE80  |> 8A43 01        |MOV AL,BYTE PTR DS:[EBX+1]    ;①从0046AE54 跳来,取下一个码,[EBX+1]=l(6C)
                                                          ;②取下一个码,[EBX+1]=U(55)
0046AE83  |. 3C 40          |CMP AL,40                     ;①和40比较,小于或等于就跳
0046AE85  |. 76 0A          |JBE SHORT UNPACKED.0046AE91   ;①6c>40,不跳
                                                          ;②55>40,不跳
0046AE87  |. 3C 5B          |CMP AL,5B                     ;①和5B比较,
0046AE89  |. 73 06          |JNB SHORT UNPACKED.0046AE91   ;①6C>5B,所以跳0046AE91-->
                                                          ;②55<5b,不跳
0046AE8B  |. 806B 01 41     |SUB BYTE PTR DS:,41           ;②[EBX+1]=55-41=14
0046AE8F  |. EB 30          |JMP SHORT UNPACKED.0046AEC1   ;②跳0046AEC1---- >
0046AE91  |> 8A43 01        |MOV AL,BYTE PTR DS:[EBX+1]    ;①来自0046AE89
0046AE94  |. 3C 60          |CMP AL,60                     ;①和60比较,小于或等于就跳
0046AE96  |. 76 0A          |JBE SHORT UNPACKED.0046AEA2   ;①6c>60,不跳
0046AE98  |. 3C 7B          |CMP AL,7B                     ;①和7B比较,不小于就跳
0046AE9A  |. 73 06          |JNB SHORT UNPACKED.0046AEA2   ;①6c<7B,不跳
0046AE9C  |. 806B 01 47     |SUB BYTE PTR DS:[EBX+1],47    ;①[EBX+1]=6C-47=25
0046AEA0  |. EB 1F          |JMP SHORT UNPACKED.0046AEC1 :;①跳到0046AEC1。-->
0046AEA2  |> 8A43 01        |MOV AL,BYTE PTR DS:[EBX+1]
0046AEA5  |. 3C 2F          |CMP AL,2F
0046AEA7  |. 76 0A          |JBE SHORT UNPACKED.0046AEB3
0046AEA9  |. 3C 3A          |CMP AL,3A
0046AEAB  |. 73 06          |JNB SHORT UNPACKED.0046AEB3
0046AEAD  |. 8043 01 04     |ADD BYTE PTR DS:[EBX+1],4
0046AEB1  |. EB 0E          |JMP SHORT UNPACKED.0046AEC1
0046AEB3  |> 3C 2B          |CMP AL,2B
0046AEB5  |. 75 06          |JNZ SHORT UNPACKED.0046AEBD
0046AEB7  |. C643 01 3E     |MOV BYTE PTR DS:[EBX+1],3E
0046AEBB  |. EB 04          |JMP SHORT UNPACKED.0046AEC1
0046AEBD  |> C643 01 3F     |MOV BYTE PTR DS:[EBX+1],3F
0046AEC1  |> 8A43 02        |MOV AL,BYTE PTR DS:[EBX+2]     ;①从0046AEA0 跳来,取下一个密码,[EBX+2]=O(4F)
                                                           ;②从0046AE8F跳来,[EBX+2]=x(78)
0046AEC4  |. 3C 40          |CMP AL,40                      ;①和40比较,小于或等于就跳
0046AEC6  |. 76 0A          |JBE SHORT UNPACKED.0046AED2    ;①4F>40,不跳,
                                                           ;②78>40,不跳,
0046AEC8  |. 3C 5B          |CMP AL,5B                      ;①和5B比较,
0046AECA  |. 73 06          |JNB SHORT UNPACKED.0046AED2    ;①4F<5B,不跳
                                                           ;②78>5B,跳0046AED2---- >
0046AECC  |. 806B 02 41     |SUB BYTE PTR DS:[EBX+2],41     ;①[EBX+2]=4F-41=0E
0046AED0  |. EB 30          |JMP SHORT UNPACKED.0046AF02    ;①跳到0046AF02-->
0046AED2  |> 8A43 02        |MOV AL,BYTE PTR DS:[EBX+2]     ;②从0046AECA跳来。
0046AED5  |. 3C 60          |CMP AL,60                      ;②和60比较,小于或等于就跳
0046AED7  |. 76 0A          |JBE SHORT UNPACKED.0046AEE3    ;②78>60,不跳。
0046AED9  |. 3C 7B          |CMP AL,7B                      ;②和7B比较,
0046AEDB  |. 73 06          |JNB SHORT UNPACKED.0046AEE3    ;②78<7B,不跳。
0046AEDD  |. 806B 02 47     |SUB BYTE PTR DS:[EBX+2],47     ;②[EBX+2]=78-47=31.
0046AEE1  |. EB 1F          |JMP SHORT UNPACKED.0046AF02    ;②跳0046AF02---->
0046AEE3  |> 8A43 02        |MOV AL,BYTE PTR DS:[EBX+2]
0046AEE6  |. 3C 2F          |CMP AL,2F
0046AEE8  |. 76 0A          |JBE SHORT UNPACKED.0046AEF4
0046AEEA  |. 3C 3A          |CMP AL,3A
0046AEEC  |. 73 06          |JNB SHORT UNPACKED.0046AEF4
0046AEEE  |. 8043 02 04     |ADD BYTE PTR DS:[EBX+2],4
0046AEF2  |. EB 0E          |JMP SHORT UNPACKED.0046AF02
0046AEF4  |> 3C 2B          |CMP AL,2B
0046AEF6  |. 75 06          |JNZ SHORT UNPACKED.0046AEFE
0046AEF8  |. C643 02 3E     |MOV BYTE PTR DS:[EBX+2],3E
0046AEFC  |. EB 04          |JMP SHORT UNPACKED.0046AF02
0046AEFE  |> C643 02 3F     |MOV BYTE PTR DS:[EBX+2],3F
0046AF02  |> 8A43 03        |MOV AL,BYTE PTR DS:[EBX+3]   ;①0046AED0跳来,取第四个加密密码,[EBX+3]=a(61)
                                                         ;②0046AEE1跳来,取第四个密码,[EBX+3]=+(2B)
0046AF05  |. 3C 40          |CMP AL,40                    ;①61>40,不跳                                                        
0046AF07  |. 76 0A          |JBE SHORT UNPACKED.0046AF13  ;②2B<40,跳0046AF13---->
0046AF09  |. 3C 5B          |CMP AL,5B
0046AF0B  |. 73 06          |JNB SHORT UNPACKED.0046AF13  ;①61>5B,跳0046AF13-->
0046AF0D  |. 806B 03 41     |SUB BYTE PTR DS:[EBX+3],41
0046AF11  |. EB 30          |JMP SHORT UNPACKED.0046AF43
0046AF13  |> 8A43 03        |MOV AL,BYTE PTR DS:[EBX+3]   ;①0046AF0B跳来②0046AF07跳来
0046AF16  |. 3C 60          |CMP AL,60
0046AF18  |. 76 0A          |JBE SHORT UNPACKED.0046AF24  ;①61>60,不跳
                                                         ;②2B<60,跳0046AF24---->
0046AF1A  |. 3C 7B          |CMP AL,7B
0046AF1C  |. 73 06          |JNB SHORT UNPACKED.0046AF24  ;①61<7B, 不跳
0046AF1E  |. 806B 03 47     |SUB BYTE PTR DS:[EBX+3],47   ;①[EBX+3]=61-47=1A
                                                         ;①[EBX]=04 25 0E 1A
0046AF22  |. EB 1F          |JMP SHORT UNPACKED.0046AF43  ;①跳0046AF43-->
0046AF24  |> 8A43 03        |MOV AL,BYTE PTR DS:[EBX+3]   ;②[EBX+3]=2B入AL
0046AF27  |. 3C 2F          |CMP AL,2F                  
0046AF29  |. 76 0A          |JBE SHORT UNPACKED.0046AF35  ;②2B<2F,跳0046AF35---->
0046AF2B  |. 3C 3A          |CMP AL,3A
0046AF2D  |. 73 06          |JNB SHORT UNPACKED.0046AF35
0046AF2F  |. 8043 03 04     |ADD BYTE PTR DS:[EBX+3],4
0046AF33  |. EB 0E          |JMP SHORT UNPACKED.0046AF43
0046AF35  |> 3C 2B          |CMP AL,2B                    ;②0046AF29跳来。
0046AF37  |. 75 06          |JNZ SHORT UNPACKED.0046AF3F  ;②AL=2b,不跳。
0046AF39  |. C643 03 3E     |MOV BYTE PTR DS:[EBX+3],3E   ;②将3E入[EBX+3]
0046AF3D  |. EB 04          |JMP SHORT UNPACKED.0046AF43  ;②跳0046AF43---->
0046AF3F  |> C643 03 3F     |MOV BYTE PTR DS:[EBX+3],3F
0046AF43  |> 8A13           |MOV DL,BYTE PTR DS:[EBX]     ;①从0046AF22来到这里,将[EBX]=4,入DL,DL=4
                                                         ;②从0046AF3D来到这里,将[EBX]=5,入DL,DL=5
0046AF45  |. C1E2 02        |SHL EDX,2                    ;①EDX=(EBX+4=0076Fd04 )shl 2=1DBF410
                                                         ;②EDX=(EBX+4=0076Fd05 )shl 2=1DBF414
0046AF48  |. 8A43 01        |MOV AL,BYTE PTR DS:[EBX+1]   ;①[EBX+1]入AL,[EBX+1]=25
                                                         ;②[EBX+1]入AL,[EBX+1]=14
0046AF4B  |. 33C9           |XOR ECX,ECX                  ;①;②ECX清零,
0046AF4D  |. 8AC8           |MOV CL,AL                    ;①CL=AL=25
                                                         ;②CL=AL=14
0046AF4F  |. C1E9 04        |SHR ECX,4                    ;①ECX=25 shr 4 =2
                                                         ;②ECX=14 shr 4 =1
0046AF52  |. 80E1 03        |AND CL,3                     ;①2 and 3=2
                                                         ;②1&3=1
0046AF55  |. 0AD1           |OR DL,CL                     ;①DL为EDX的低位=10,DL=10 or 2= 12
                                                         ;②DL=14,DL=DL OR CL=14 0R 1 = 15
0046AF57  |. 8855 F1        |MOV BYTE PTR SS:[EBP-F],DL   ;①将12入[EBP-F]
                                                         ;②将15入[EBP-F]
0046AF5A  |. C1E0 04        |SHL EAX,4                    ;①EAX=25,EAX=25 左移四位,EAX=25 shl 4=250
                                                         ;②EAX=14 右移四位,EAX=140
0046AF5D  |. 33D2           |XOR EDX,EDX                                ;①②EDX清零
0046AF5F  |. 8A53 02        |MOV DL,BYTE PTR DS:[EBX+2]      ;①[EBX+2]入DL,DL=[EBX+2]=0E
                                                                                                     ;②[EBX+2]入DL,DL=[EBX+2]=31
0046AF62  |. C1EA 02        |SHR EDX,2                    ;①EDX=0E>>2=03
                                                         ;②EDX=31>>2=0C
0046AF65  |. 80E2 0F        |AND DL,0F           ;①取底位,EDX=03
                                                                                                     ;②取底位,EDX=0C
0046AF68  |. 0AC2           |OR AL,DL                     ;①EAX=253
                                                          ;②AL =  0C OR 40=4C            
0046AF6A  |. 8845 F2        |MOV BYTE PTR SS:[EBP-E],AL   ;①AL为EAX低位,所以AL=53,入[EBP-E]
                                                         ;②AL=4C入[EBP-E]
0046AF6D  |. 8A43 02        |MOV AL,BYTE PTR DS:[EBX+2]   ;①[EBX+2]=0E;EAX=20E
                                                         ;②[EBX+2]=31;EAX=131
0046AF70  |. C1E0 06        |SHL EAX,6                    ;①EAX=20E<<6=380
                                                         ;②EAX=131<<6=4C40
0046AF73  |. 8A53 03        |MOV DL,BYTE PTR DS:[EBX+3]   ;①[EBX+3]=1A入DL
                                                         ;②①[EBX+3]=3E入DL
0046AF76  |. 80E2 3F        |AND DL,3F                    ;①DL=1A&3F=1A
                                                         ;②DL=3E &3F=3E
0046AF79  |. 0AC2           |OR AL,DL                     ;①AL=80,AL=80 or 1A=9A
                                                         ;②AL=40,AL=40 OR 3E = 7E
0046AF7B  |. 8845 F3        |MOV BYTE PTR SS:[EBP-D],AL   ;①9A入[EBP-D]。[EBP-D]=9A 53 12 00    <--记住
                                                         ;②7E入[EBP-D]。[EBP-D]=7E 4C 15 00 <--记住
0046AF7E  |. 8B45 F8        |MOV EAX,DWORD PTR SS:[EBP-8] ;①将[EBP-8]入EAX
                                                         ;②
0046AF81  |. E8 1691F9FF    |CALL UNPACKED.0040409C
0046AF86  |. 8BD6           |MOV EDX,ESI                  ;①ESI=EDX=1
0046AF88  |. 4A             |DEC EDX
0046AF89  |. 8D1452         |LEA EDX,DWORD PTR DS:[EDX+EDX*2]
0046AF8C  |. 8D1410         |LEA EDX,DWORD PTR DS:[EAX+EDX]
0046AF8F  |. 8D45 F1        |LEA EAX,DWORD PTR SS:[EBP-F] ;
0046AF92  |. B9 03000000    |MOV ECX,3
0046AF97  |. E8 F078F9FF    |CALL UNPACKED.0040288C
0046AF9C  |. 46             |INC ESI
0046AF9D  |. 4F             |DEC EDI                       ;①判断是否取完要取的字符。
0046AF9E  |.^0F85 8BFEFFFF  \JNZ UNPACKED.0046AE2F         ;①没有就重新跳回去。
0046AFA4  |> 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
0046AFA7  |. E8 208FF9FF    CALL UNPACKED.00403ECC
0046AFAC  |. 85C0           TEST EAX,EAX
0046AFAE  |. 0F84 83030000  JE UNPACKED.0046B337
0046AFB4  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
0046AFB7  |. E8 108FF9FF    CALL UNPACKED.00403ECC
0046AFBC  |. 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]      ;②[EBP-4]=加密密码
0046AFBF  |. 8D4402 FC      LEA EAX,DWORD PTR DS:[EDX+EAX-4]  ;②EAX=c,执行后EAX= "2k=="
0046AFC3  |. 8BD3           MOV EDX,EBX
0046AFC5  |. B9 04000000    MOV ECX,4
0046AFCA  |. E8 BD78F9FF    CALL UNPACKED.0040288C
0046AFCF  |. 807B 02 3D     CMP BYTE PTR DS:[EBX+2],3D  ;②第三个是不是=
0046AFD3  |. 0F85 B1000000  JNZ UNPACKED.0046B08A       ;②不是=就跳,所以这里不跳
0046AFD9  |. 8A03           MOV AL,BYTE PTR DS:[EBX]    ;②取第一个"2k=="的第一个这里为2(32)
0046AFDB  |. 3C 40          CMP AL,40                   ;②和40=@比较,小于或等于就跳
0046AFDD  |. 76 09          JBE SHORT UNPACKED.0046AFE8 ;②32<40,所以跳0046AFE8---->
0046AFDF  |. 3C 5B          CMP AL,5B
0046AFE1  |. 73 05          JNB SHORT UNPACKED.0046AFE8
0046AFE3  |. 802B 41        SUB BYTE PTR DS:[EBX],41
0046AFE6  |. EB 2B          JMP SHORT UNPACKED.0046B013
0046AFE8  |> 8A03           MOV AL,BYTE PTR DS:[EBX]     ;②从0046AFDD跳来,
0046AFEA  |. 3C 60          CMP AL,60                    ;②和60比较
0046AFEC  |. 76 09          JBE SHORT UNPACKED.0046AFF7  ;②32<60,所以跳0046AFF7---->
0046AFEE  |. 3C 7B          CMP AL,7B
0046AFF0  |. 73 05          JNB SHORT UNPACKED.0046AFF7
0046AFF2  |. 802B 47        SUB BYTE PTR DS:[EBX],47
0046AFF5  |. EB 1C          JMP SHORT UNPACKED.0046B013
0046AFF7  |> 803B 2F        CMP BYTE PTR DS:[EBX],2F      ;②从0046AFEC跳,
0046AFFA  |. 76 0A          JBE SHORT UNPACKED.0046B006   ;②32>2F,不跳
0046AFFC  |. 803B 3A        CMP BYTE PTR DS:[EBX],3A
0046AFFF  |. 73 05          JNB SHORT UNPACKED.0046B006   ;②不小于跳,因为32<3A,所以不跳
0046B001  |. 8003 04        ADD BYTE PTR DS:[EBX],4       ;②加上4,32+4=36,[EBX]=36
0046B004  |. EB 0D          JMP SHORT UNPACKED.0046B013   ;②继续跳0046B013-->
0046B006  |> 803B 2B        CMP BYTE PTR DS:[EBX],2B
0046B009  |. 75 05          JNZ SHORT UNPACKED.0046B010
0046B00B  |. C603 3E        MOV BYTE PTR DS:[EBX],3E
0046B00E  |. EB 03          JMP SHORT UNPACKED.0046B013
0046B010  |> C603 3F        MOV BYTE PTR DS:[EBX],3F
0046B013  |> 8A43 01        MOV AL,BYTE PTR DS:[EBX+1]     ;②取第二个,这里[EBX+1]=K(6B)
0046B016  |. 3C 40          CMP AL,40
0046B018  |. 76 0A          JBE SHORT UNPACKED.0046B024    ;②6B>40,不跳
0046B01A  |. 3C 5B          CMP AL,5B
0046B01C  |. 73 06          JNB SHORT UNPACKED.0046B024    ;②不小于跳,6B>5B,所以又跳0046B024---->
0046B01E  |. 806B 01 41     SUB BYTE PTR DS:[EBX+1],41
0046B022  |. EB 33          JMP SHORT UNPACKED.0046B057
0046B024  |> 8A43 01        MOV AL,BYTE PTR DS:[EBX+1]      ;②来到这里,
0046B027  |. 3C 60          CMP AL,60
0046B029  |. 76 0A          JBE SHORT UNPACKED.0046B035     ;②6B>60,不跳.
0046B02B  |. 3C 7B          CMP AL,7B
0046B02D  |. 73 06          JNB SHORT UNPACKED.0046B035     ;②6B<7B,所以不跳
0046B02F  |. 806B 01 47     SUB BYTE PTR DS:[EBX+1],47      ;②[EBX+1]=6B-47=24
0046B033  |. EB 22          JMP SHORT UNPACKED.0046B057     ;②跳0046B057-->
0046B035  |> 807B 01 2F     CMP BYTE PTR DS:[EBX+1],2F
0046B039  |. 76 0C          JBE SHORT UNPACKED.0046B047
0046B03B  |. 807B 01 3A     CMP BYTE PTR DS:[EBX+1],3A
0046B03F  |. 73 06          JNB SHORT UNPACKED.0046B047
0046B041  |. 8043 01 04     ADD BYTE PTR DS:[EBX+1],4
0046B045  |. EB 10          JMP SHORT UNPACKED.0046B057
0046B047  |> 807B 01 2B     CMP BYTE PTR DS:[EBX+1],2B
0046B04B  |. 75 06          JNZ SHORT UNPACKED.0046B053
0046B04D  |. C643 01 3E     MOV BYTE PTR DS:[EBX+1],3E
0046B051  |. EB 04          JMP SHORT UNPACKED.0046B057
0046B053  |> C643 01 3F     MOV BYTE PTR DS:[EBX+1],3F
0046B057  |> 8A03           MOV AL,BYTE PTR DS:[EBX]        ;②取[EBX]=36入AL
0046B059  |. C1E0 02        SHL EAX,2                       ;②左移2位,[EAX]=36*4=D8
0046B05C  |. 33D2           XOR EDX,EDX                     ;②EDX清零
0046B05E  |. 8A53 01        MOV DL,BYTE PTR DS:[EBX+1]      ;②取[EBX+1]=24入DL
0046B061  |. C1EA 04        SHR EDX,4                       ;②右移4位.EDX=2
0046B064  |. 80E2 03        AND DL,3                        ;②DL=3&2=2
0046B067  |. 0AC2           OR AL,DL                        ;②AL=D8和2或运算,AL=DA
0046B069  |. 8845 F1        MOV BYTE PTR SS:[EBP-F],AL      ;②AL=DA入[EBP-F]
0046B06C  |. 8D45 EC        LEA EAX,DWORD PTR SS:[EBP-14]   ;
0046B06F  |. 8A55 F1        MOV DL,BYTE PTR SS:[EBP-F]      ;②[EBP-F]=DA入DL   <--记住  
.......................
到这里;
004696B4  |> 8B45 FC        /MOV EAX,DWORD PTR SS:[EBP-4]  ;取[EBP-4]入EAX
004696B7  |. 8A0430         |MOV AL,BYTE PTR DS:[EAX+ESI]  ;ESI初值为0
004696BA  |. 8845 F7        |MOV BYTE PTR SS:[EBP-9],AL    ;将从[EBP-4]入EAX的再入[EBP-9]
004696BD  |. 8D4D E7        |LEA ECX,DWORD PTR SS:[EBP-19] ;[EBP-9]地址装入ECX
004696C0  |. 8D53 50        |LEA EDX,DWORD PTR DS:[EBX+50] ;[EBX+50]地址装入EDX
004696C3  |. 8BC3           |MOV EAX,EBX          
004696C5  |. E8 1EF8FFFF    |CALL UNPACKED.00468EE8        
004696CA  |. 8B45 FC        |MOV EAX,DWORD PTR SS:[EBP-4]
004696CD  |. 8A0430         |MOV AL,BYTE PTR DS:[EAX+ESI]  ;将多次运算后的加密串,移入AL
004696D0  |. 3245 E7        |XOR AL,BYTE PTR SS:[EBP-19]   ;和[EBP-19](原[EBP-4])的异或后入AL,为最终解密密码
加密串ElOaFUx+2k==,
12 XOR 24 =36     12<--由ElOa算出
53 XOR 65 =36     53<--由ElOa算出
9A XOR AA =30    9A<--由ElOa算出
15 XOR 2D =38    15<--由FUx+算出
4C XOR 79 =35    4C<--由FUx+算出
7E XOR 4B =35   7E<--由FUx+算出
DA XOR E9 =33   DA<--由2k算出
004696D3  |. 8B55 F8        |MOV EDX,DWORD PTR SS:[EBP-8]
004696D6  |. 880432         |MOV BYTE PTR DS:[EDX+ESI],AL   ;解密密码存放入[EDX+ESI].
004696D9  |. 8D53 50        |LEA EDX,DWORD PTR DS:[EBX+50]
004696DC  |. 8D43 51        |LEA EAX,DWORD PTR DS:[EBX+51]
004696DF  |. B9 0F000000    |MOV ECX,0F
004696E4  |. E8 A391F9FF    |CALL UNPACKED.0040288C
004696E9  |. 8A45 F7        |MOV AL,BYTE PTR SS:[EBP-9]
004696EC  |. 8843 5F        |MOV BYTE PTR DS:[EBX+5F],AL
004696EF  |. 46             |INC ESI                        ;ESI自加1,取下一个密码.
004696F0  |. 4F             |DEC EDI                        ;EDI自减1,判断是否取完,
004696F1  |.^75 C1          \JNZ SHORT UNPACKED.004696B4    ;没有取完,则重复,跳004696B4
.......................................
0047686F  |. 8BC6           MOV EAX,ESI
00476871  |. 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]    :[EBP-4] 解密密码.

【总结】:

加密串ElOaFUx+2k==,
12 XOR 24 =36     12<--由ElOa算出
53 XOR 65 =36     53<--由ElOa算出
9A XOR AA =30    9A<--由ElOa算出
15 XOR 2D =38    15<--由FUx+算出
4C XOR 79 =35    4C<--由FUx+算出
7E XOR 4B =35   7E<--由FUx+算出
DA XOR E9 =33   DA<--由2k算出
最后密码为: 6608553
注:24  65 AA 2D 79 4B E9 ,也是算出来的,我没有深入跟踪,所以本文是不完全分析的,如果有兴趣的朋友可以去跟踪一下。

谢谢你看完这篇文章。