首页
社区
课程
招聘
[原创]某人最新 0.7x完整分析(一)
发表于: 2005-8-7 01:19 25894

[原创]某人最新 0.7x完整分析(一)

2005-8-7 01:19
25894
【破解作者】 hnhuqiong
【作者邮箱】 3KKK@
【作者主页】 3KKK
【使用工具】 FLYODBG
【破解平台】 Win9x/NT/2000/XP
【软件名称】 XXXXXXXXXXXXX
【软件简介】 我们看的不是软件,是它的壳
【加壳方式】 XXXX 0.7X
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】

004670D1 >  60                 pushad                              ; 从这里到0ed是典型的伪造头
004670D2    E8 00000000        call    jl.004670D7                 ;     假CALL,
004670D7    5D                 pop     ebp                         ;
004670D8    81ED D7000000      sub     ebp,0D7                     ; 取段地址
004670DE    8DB5 EE000000      lea     esi,dword ptr ss:[ebp+EE]   ;
004670E4    55                 push    ebp                         ; 段地址入栈(467000)
004670E5    56                 push    esi                         ; 将段地址+EE地址入栈,为后面
                                                                     放解码数据,我这里是4670EE      
004670E6    81C5 89110000      add     ebp,1189
004670EC    55                 push    ebp                         ; 返回地址入栈(468199),也就是
                                                                     跳这个CALL 其实就是一个jmp
004670ED    C3                 retn

此壳大量的运用了假call,当然对于大侠级别的是小菜,但是通篇用这样的
call,如果不运用花指令予以打掉,简直是自虐。这个壳运用花指令对于
ANTI-DEBUG可以说是到了极限,没有一处是可以清净的进行分析。

00468189    25 6FA78540        and     eax,4085A76F                  
0046818E    8D3C4B             lea     edi,dword ptr ds:[ebx+ecx*2>; 垃圾数据,也可以
                                                             说这个是垃圾代码迷惑人的
00468191    8D92 C57FEB02      lea     edx,dword ptr ds:[edx+2EB7F>; 垃圾数据
00468197    8D8E BD5D714B      lea     ecx,dword ptr ds:[esi+4B715>; 垃圾数据
0046819D    4F                 dec     edi                         ; 垃圾数据
0046819E    8D340A             lea     esi,dword ptr ds:[edx+ecx]  ;
004681A1    BD F9227641        mov     ebp,417622F9                ; 将常数417622f9给EBP
004681A6    8B1C24             mov     ebx,dword ptr ss:[esp]      ; 4670ee
004681A9    8D92 A3703444      lea     edx,dword ptr ds:[edx+44347>; 垃圾数据
004681AF    BF DF542B32        mov     edi,322B54DF                ; 将常数322b54df给DI
004681B4    8D8E D1559117      lea     ecx,dword ptr ds:[esi+17915>; 垃圾数据
004681BA    812B 2EB0826E      sub     dword ptr ds:[ebx],6E82B02E ; 计算的结果是
                                                                    (458B5DEB)送CS+EE
004681C0    8D85 05AC7078      lea     eax,dword ptr ss:[ebp+7870A>垃圾数据
004681C6    8D8E 9B64774D      lea     ecx,dword ptr ds:[esi+4D776>垃圾数据
004681CC    25 70542946        and     eax,46295470                ; 垃圾数据
004681D1    4B                 dec     ebx                         ;
004681D2    83EB FB            sub     ebx,-5                      ; ebx==4670f2
004681D5    8D340A             lea     esi,dword ptr ds:[edx+ecx]  ;
004681D8    45                 inc     ebp                         ; jl.00468189
004681D9    25 EC6A7325        and     eax,25736AEC                ;
004681DE    25 B21AFC7A        and     eax,7AFC1AB2                 垃圾数据
004681E3    812B BB08217B      sub     dword ptr ds:[ebx],7B2108BB ; 计算的结果是(74C00B00)=>
                                                                     送CS +F2处
004681E9    81C5 C6D65E6F      add     ebp,6F5ED6C6                 ;垃圾数据
004681EF    51                 push    ecx                         ;
004681F0    59                 pop     ecx                         ; 来回推ECX 入栈出栈,垃圾
004681F1    B8 DC199E70        mov     eax,709E19DC                 ;垃圾数据
004681F6    51                 push    ecx
004681F7    59                 pop     ecx                         ; 来回推ECX 入栈出栈,垃圾
004681F8    8D3C4B             lea     edi,dword ptr ds:[ebx+ecx*2>
004681FB    45                 inc     ebp                         ;
004681FC    4B                 dec     ebx
004681FD    83EB FB            sub     ebx,-5                      ; ebx=4670f6
00468200    BF ECAE113B        mov     edi,3B11AEEC                ;垃圾数据
00468205    8D340A             lea     esi,dword ptr ds:[edx+ecx]  ;垃圾数据
00468208    8DA8 003C3F24      lea     ebp,dword ptr ds:[eax+243F3>
0046820E    8133 05602914      xor     dword ptr ds:[ebx],14296005 ; 计算的结果是(5DACD4FC)
                                                                   ;送CS +F2处
00468214    83EB FC            sub     ebx,-4                      ; ebx=4670fa
00468217    B9 163CA035        mov     ecx,35A03C16                 ;垃圾代码
0046821C    3BC1               cmp     eax,ecx                      ;垃圾代码
0046821E    B9 4B53F626        mov     ecx,26F6534B                 ;垃圾代码
00468223    B8 3A70A84D        mov     eax,4DA8703A                 ;垃圾代码
00468228    8B03               mov     eax,dword ptr ds:[ebx]      ;
0046822A    F7D0               not     eax                         ;
0046822C    8903               mov     dword ptr ds:[ebx],eax      ; 将45ff0c送到CS +FA
0046822E    8DA8 E97B625B      lea     ebp,dword ptr ds:[eax+5B627>;垃圾代码
00468234    45                 inc     ebp                         ; 垃圾代码
00468235    BA FA48F310        mov     edx,10F348FA                ;垃圾代码
0046823A    81CA 3657683A      or      edx,3A685736                ;垃圾代码
00468240    45                 inc     ebp                         ; 垃圾代码
00468241    8D85 82F18C3B      lea     eax,dword ptr ss:[ebp+3B8CF>;垃圾代码
00468247    81D1 4C6B002B      adc     ecx,2B006B4C                ;垃圾代码
0046824D    4B                 dec     ebx                         ;
0046824E    83EB FB            sub     ebx,-5                      ; ebx==4670fe
00468251    81C5 940D9345      add     ebp,45930D94                ;垃圾代码
00468257    8B03               mov     eax,dword ptr ds:[ebx]      ;
00468259    F7D0               not     eax                          
0046825B    8903               mov     dword ptr ds:[ebx],eax      ; 计算的结果是
                                                                    (2424488b)送CS+FE
0046825D    4F                 dec     edi                         ; 垃圾代码
0046825E    8D85 0DE82853      lea     eax,dword ptr ss:[ebp+5328E>;垃圾代码
00468264    B9 574BFF50        mov     ecx,50FF4B57                ;垃圾代码
00468269    81C5 2A6F5147      add     ebp,47516F2A                ;垃圾代码
0046826F    4B                 dec     ebx                         ;
00468270    83EB FB            sub     ebx,-5                      ;
00468273    25 214D0151        and     eax,51014D21                ; eax==467102
00468278    BA 89E6420C        mov     edx,0C42E689                ;垃圾代码
0046827D    3BC1               cmp     eax,ecx                      ;垃圾代码
0046827F    8133 9A1DD82A      xor     dword ptr ds:[ebx],2AD81D9A ; 计算的结果是
                                                                    (8D044589)送CS+102                                                                    
00468285    8D85 33DF6172      lea     eax,dword ptr ss:[ebp+7261D>  垃圾代码
0046828B    81F7 78C19C1D      xor     edi,1D9CC178                  垃圾代码
00468291    8D85 FB3FEA56      lea     eax,dword ptr ss:[ebp+56EA3>  垃圾代码
00468297    83EB FC            sub     ebx,-4                        ; ebx=CS+106
0046829A    E8 02000000        call    jl.004682A1                   ; 虚跳CALL,花指令

004682A1    5E                 pop     esi                               ; 保护现场
004682A2    81CE 4792BB22      or      esi,22BB9247
004682A8    81C5 1BAB0657      add     ebp,5706AB1B                      ; 垃圾代码
004682AE    8133 47154C49      xor     dword ptr ds:[ebx],494C1547       ; 计算的结果是(0455ff65)
                                                                         ,送CS+10A
004682B4    8DA8 959D1C65      lea     ebp,dword ptr ds:[eax+651C9D95]   ; 垃圾代码
004682BA    83EB FC            sub     ebx,-4                            ; CS+10A
004682BD    8B03               mov     eax,dword ptr ds:[ebx]            ;
004682BF    F7D0               not     eax                               ;
004682C1    8903               mov     dword ptr ds:[ebx],eax            ; 计算的结果是(55ff5600)
                                                                        ;送CS+10A
004682C3    8D340A             lea     esi,dword ptr ds:[edx+ecx]        ; 垃圾代码
004682C6    BA 926B7F56        mov     edx,567F6B92                      ; 垃圾代码
004682CB    BF 7B62BA5E        mov     edi,5EBA627B                      ; 垃圾代码
004682D0    81C5 3C34D76D      add     ebp,6DD7343C                      ; 垃圾代码
004682D6    B9 DEAFC704        mov     ecx,4C7AFDE                       ; 垃圾代码
004682DB    4B                 dec     ebx
004682DC    83EB FB            sub     ebx,-5                            ; CS+10E
004682DF    3BC1               cmp     eax,ecx                           ; 垃圾代码
004682E1    25 A981CB14        and     eax,14CB81A9                      ; 垃圾代码
004682E6    812B 75F8C422      sub     dword ptr ds:[ebx],22C4F875       ; 计算的结果是(1c758d73)
                                                                         ,送CS+10E
004682EC    8DA8 E3F5B334      lea     ebp,dword ptr ds:[eax+34B3F5E3]   ; 垃圾代码
004682F2    BA B802F97D        mov     edx,7DF902B8                      ; 垃圾代码
004682F7    B9 D7711D1D        mov     ecx,1D1D71D7                      ; 垃圾代码
004682FC    4B                 dec     ebx
004682FD    83EB FB            sub     ebx,-5                            ; CS+112
00468300    8DA8 1A4E0E7B      lea     ebp,dword ptr ds:[eax+7B0E4E1A]   ; 垃圾代码
00468306    B8 71037F33        mov     eax,337F0371                      ; 垃圾代码
0046830B    3BC1               cmp     eax,ecx                           ; 垃圾代码
0046830D    8D92 51A10971      lea     edx,dword ptr ds:[edx+7109A151]   ; 垃圾代码
00468313    51                 push    ecx                               ; 垃圾代码
00468314    59                 pop     ecx                               ; CS+EE,垃圾,清空前面假CALL入的堆栈
00468315    81F7 40079F60      xor     edi,609F0740                      ; 垃圾代码
0046831B    812B 9B1E105D      sub     dword ptr ds:[ebx],5D101E9B       ; 计算的结果是(55ff5056),送CS+112
00468321    BF AF102C2A        mov     edi,2A2C10AF                      ; 垃圾代码
00468326    8D8E BDEC0965      lea     ecx,dword ptr ds:[esi+6509ECBD]   ; 垃圾代码
0046832C    F7C2 A16EF328      test    edx,28F36EA1                      ; 垃圾代码
00468332    B8 4A11E162        mov     eax,62E1114A                      ; 垃圾代码
00468337    25 E2686047        and     eax,476068E2                      ; 垃圾代码
0046833C    83EB FC            sub     ebx,-4                            ; CS+116
0046833F    B9 E49E9030        mov     ecx,30909EE4                      ; 垃圾代码
00468344    8103 DF92742D      add     dword ptr ds:[ebx],2D7492DF       ; 计算的结果是(2c458974),送CS+116
0046834A    43                 inc     ebx
0046834B    43                 inc     ebx
0046834C    43                 inc     ebx
0046834D    43                 inc     ebx                               ; CS+11A
0046834E    BF 58506F78        mov     edi,786F5058                      ; 垃圾代码
00468353    81F7 DD57125B      xor     edi,5B1257DD                      ; 垃圾代码
00468359    3BC1               cmp     eax,ecx                           ; 垃圾代码
0046835B    81F7 B6D6FF2B      xor     edi,2BFFD6B6                      ; 垃圾代码
00468361    81CE FF4FA918      or      esi,18A94FFF                      ; 垃圾代码
00468367    8D85 D1616900      lea     eax,dword ptr ss:[ebp+6961D1]     ; 垃圾代码
0046836D    4F                 dec     edi                               ; 垃圾代码
0046836E    8103 33A7550A      add     dword ptr ds:[ebx],0A55A733       ; 计算的结果是(0068046a),送CS+11a
00468374    81F7 2A21832A      xor     edi,2A83212A                      ; 垃圾代码
0046837A    8D85 308D2C48      lea     eax,dword ptr ss:[ebp+482C8D30]   ; 垃圾代码
00468380    3BC1               cmp     eax,ecx                           ; 垃圾代码
00468382    B9 ECB5265A        mov     ecx,5A26B5EC                      ; 垃圾代码
00468387    81CA 67E14F73      or      edx,734FE167                      ; 垃圾代码
0046838D    4B                 dec     ebx
0046838E    83EB FB            sub     ebx,-5                            ; CS+11E
00468391    8D85 90B22541      lea     eax,dword ptr ss:[ebp+4125B290]   ; 垃圾代码
00468397    8DA8 EE62926D      lea     ebp,dword ptr ds:[eax+6D9262EE]   ; 垃圾代码
0046839D    25 BA289002        and     eax,29028BA                       ; 垃圾代码
004683A2    BE 2C267320        mov     esi,2073262C                      ; 垃圾代码
004683A7    812B 75F43E3B      sub     dword ptr ds:[ebx],3B3EF475       ; 计算的结果是(FF000010),送CS+11E
004683AD    25 56AC092D        and     eax,2D09AC56                      ; 垃圾代码
004683B2    8D340A             lea     esi,dword ptr ds:[edx+ecx]        ; 垃圾代码
004683B5    3BC1               cmp     eax,ecx                           ; 垃圾代码
004683B7    8D8E 31CE7824      lea     ecx,dword ptr ds:[esi+2478CE31]   ; 垃圾代码
004683BD    B9 04EA210A        mov     ecx,0A21EA04                      ; 垃圾代码
004683C2    B8 65563C31        mov     eax,313C5665                      ; 垃圾代码
004683C7    E8 02000000        call    jl.004683CE                       ; 虚跳CALL,花指令

004683CE    5E                 pop     esi                               ; 无意义
004683CF    4B                 dec     ebx
004683D0    83EB FB            sub     ebx,-5                            ; CS +122
004683D3    E8 02000000        call    jl.004683DA                       ; 虚call花指令,无意义

                                .............
                          一路都是这样解码+无意义的垃圾代码
                                .............

0046947A    FF0424             inc     dword ptr ss:[esp]                ; 解码结束,返回地址为4670ee
                                                                          ;开始从解码后的代码处执行代码
                                                                           ;以后看见这个壳入手就看第一个
                                                                           CALL 中ESI 值,直接跳ESI这里往下分析
0046947D    C3                 retn

小结:这样一段是开始,一上来就可以看出来,这个壳利用动态生产代码+大量的垃圾
      代码来迷惑跟踪的分析,入手就给很多普通的DEBUG 者一个下马威,这才是万里长征的
      开始,刚刚打好行囊,我们准备上路了 :)
      
004670EE   /EB 5D              jmp     short jl.0046714D
004670F0   |8B45 00            mov     eax,dword ptr ss:[ebp]
004670F3   |0BC0               or      eax,eax                           ;
004670F5   |74 04              je      short jl.004670FB
004670F7   |55                 push    ebp
004670F8   |FF65 0C            jmp     near dword ptr ss:[ebp+C]
004670FB   |FF45 00            inc     dword ptr ss:[ebp]
004670FE   |8B4424 24          mov     eax,dword ptr ss:[esp+24]         ;  
00467102   |8945 04            mov     dword ptr ss:[ebp+4],eax          ;  
00467105   |8DB5 84000000      lea     esi,dword ptr ss:[ebp+84]         ; kernel32.dll,把dll的名称保存地址放到esi中
0046710B   |56                 push    esi
0046710C   |FF55 78            call    near dword ptr ss:[ebp+78]        ; kernel32.GetModuleHandleA
0046710F   |8D75 1C            lea     esi,dword ptr ss:[ebp+1C]         ; 把VirtualAlloc名称所在的地址传到esi中
00467112   |56                 push    esi
00467113   |50                 push    eax                               ;  
00467114   |FF55 74            call    near dword ptr ss:[ebp+74]        ;  kernel32.GetProcAddress
00467117   |8945 2C            mov     dword ptr ss:[ebp+2C],eax         ; VirtuAlloc地址保存
0046711A   |6A 04              push    4
0046711C   |68 00100000        push    1000
00467121   |FF75 10            push    dword ptr ss:[ebp+10]             ; 申请空间大小17951
00467124   |6A 00              push    0
00467126   |FF55 2C            call    near dword ptr ss:[ebp+2C]        ; 申请空间,VirtualAlloc
00467129 > |50                 push    eax                               ; 申请地址入栈(370000)
0046712A   |8945 0C            mov     dword ptr ss:[ebp+C],eax          ; 申请地址
0046712D   |8B5D 08            mov     ebx,dword ptr ss:[ebp+8]          ; 解码代码相对偏移2499
00467130   |03DD               add     ebx,ebp                           ; 把RVA转换成VA(469499)
00467132   |50                 push    eax                               ; 解码后放入申请后的地址(370000)
00467133   |53                 push    ebx                               ; 源码首地址入栈(469499)
00467134   |E8 18000000        call    jl.00467151                       ; 去解码,这里这个壳常常更换这个压缩引擎
00467139   |5A                 pop     edx                               ;  
0046713A   |52                 push    edx                               ; 确认缓冲区(370000)地址段入栈
0046713B   |55                 push    ebp                               ; 代码段地址467000入栈
0046713C   |8D85 DE000000      lea     eax,dword ptr ss:[ebp+DE]         ; 4670de地址入eax
00467142   |C600 EB            mov     byte ptr ds:[eax],0EB             ; 改代码
00467145   |C640 01 10         mov     byte ptr ds:[eax+1],10            ; 回头把4670DE处修改为(jmp 4670f0),为后面取API 地址作准备
00467149   |8B45 30            mov     eax,dword ptr ss:[ebp+30]
0046714C   |8945 74            mov     dword ptr ss:[ebp+74],eax         ; 抹掉GetProcAddress的地址(输入表)
0046714F  - FFE2               jmp     near edx                          ; 去申请的空间(370000)执行解码后的壳代码

今天就写到这里,这个壳上来就给人二次解码,你想想,高手就是高手,代码里面你能看见的有多少东西?
而且现在才刚刚开始,温柔的一刀。
--------------------------------------------------------------------------------
【破解总结】

第一章 垃圾代码+二次解码,你怎么舍得我难过
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

[课程]Android-CTF解题方法汇总!

收藏
免费 7
支持
分享
最新回复 (66)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
耐心不错
等待续篇
2005-8-7 01:33
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
3
这个叫多态和解压缩……

总算走出了第一步
2005-8-7 01:37
0
雪    币: 320
活跃值: (104)
能力值: (RANK:180 )
在线值:
发帖
回帖
粉丝
4
最初由 hnhuqiong 发布
【破解作者】 hnhuqiong
【作者邮箱】 3KKK@
【作者主页】 3KKK
【使用工具】 FLYODBG
【破解平台】 Win9x/NT/2000/XP
........


强烈支持 这是小的朝思暮想 想要的

期待大虾的下一篇

2005-8-7 02:18
0
雪    币: 124
活跃值: (70)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
加油,脱完不死也残废,呵呵
2005-8-7 03:47
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
6
【破解作者】 hnhuqiong
【作者邮箱】 3KKK@
【作者主页】 3KKK
【使用工具】 FLYODBG
【破解平台】 Win9x/NT/2000/XP
【软件名称】 xxxxxxxxxxxxxxxx
【下载地址】 xxxxxxxxxxxx
【软件简介】 对壳感兴趣,软件就不提了
【加壳方式】 XXX 0.7X
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】

00370000    B9 04000000        mov     ecx,4                             ; 大量的花指令+INT 3一直到3732ae
00370005    E8 1F000000        call    00370029
0037000A  ^ EB FA              jmp     short 00370006
0037000C    E8 16000000        call    00370027
00370011    E9 EBF80000        jmp     0037F901
00370016    58                 pop     eax                               ;
00370017    EB 09              jmp     short 00370022
00370019    0F25               ???                                       ; 未知命令
0037001B    E8 F2FFFFFF        call    00370012
00370020    0FB9               ???                                       ; 未知命令

上手分析:????????怎么到处都是乱七八糟的东西!!!!!
          你进入了一个水中花,镜中月的地方,到处的花指令,我一边分析一边高声的
          唱着谭校长的《水中花》,世界上要是有个地方到处有这样的花花草草,我们是要爱护的 :)
          从头来,看仔细了。OD插件中你最好备好武器(AJUNK ,花指令去除器),我们走!!

00370000    B9 04000000        mov     ecx,4                         ; 可以说,这个壳的花指令运用的让人惊叹
00370005    E8 1F000000        call    00370029                      ;这壳代码处一开始开始让你看的几乎没有心情
0037000A    90                 nop                                   ;玩,你会发现这里的有一个特点,就是花指令的循环
0037000B    90                 nop                                   ;中,反复玩的就是call,jmp,JXX,
0037000C    E8 16000000        call    00370027                      ;反复的玩寄存器,堆栈,就是不操作内存,当你枯燥
00370011    90                 nop                                   ;的在F7的时候,突然插入有用的指令,让人防不胜防
00370012  ^ EB F8              jmp     short 0037000C                ;
00370014    90                 nop                                   ;天道殷勤,你只要多玩花指令,玩的滚瓜烂熟,那么
00370015    90                 nop                                   ;你学会收集花指令的模式,其实,它们也简单,跟踪者
00370016    58                 pop     eax                           ;毕竟只是重复前人的劳动,设计花指令的人让人肃然起敬
00370017    EB 09              jmp     short 00370022                ;要知道花指令设计上比你去跟踪要难上很多很多,设计过程中
00370019    90                 nop                                   ;会出现多少次的程序崩溃!,一套完美的花指令是多少个日夜加上
0037001A    90                 nop                                   ;多少严密的逻辑设计出来的,向花指令开发者致敬!!!
0037001B    E8 F2FFFFFF        call    00370012                      ;
00370020    90                 nop                                   ;
00370021    90                 nop                                   ;
00370022    49                 dec     ecx                           ;破花指令有一个特点就是花指令不会大范围的跳转,因为
00370023  ^ 75 F1              jnz     short 00370016                ;它需要用花指令来欺骗DEBUG 或者静态分析软件,如果大范围
00370025    EB 05              jmp     short 0037002C                ;跳,那么设计的复杂程度将急剧上升。
00370027    90                 nop                                   ;
00370028    90                 nop                                   ;而且花指令有一个特点就是往指令里面跳,那么我们要感谢
00370029    90                 nop                                   ;od插件AJUNK的作者,一个特别特别好用的花指令工具,可惜最后
0037002A    90                 nop                                   ;一个版本BUG 严重,UNDO 有严重的BUG 。
0037002B    90                 nop                                   ;
0037002C    B9 04000000        mov     ecx,4                         ;
00370031    E8 1F000000        call    00370055                      ;左边从370000到3700c0是去掉花指令后的正常状态的代码,怎么样
00370036    90                 nop                                   ;看的清清楚楚吧??NOP 掉的指令不会影响任何程序状态,你所需要的
00370037    90                 nop                                   ;是把这些代码弄明白了,用二进制copy下来,对比没有NOP掉的原程序
00370038    E8 16000000        call    00370053                      ;我们将再次运用一个花指令工具---花指令去除器,好了,这个程序的
0037003D    90                 nop                                   ;的花指令将被你收入囊中!!!
0037003E  ^ EB F8              jmp     short 00370038                ;当你收集了这个壳足够多的花指令,那么!
00370040    90                 nop                                   ;当你观看这个壳的时候,发现它在脱掉一层层的面纱展现在你的面前!!!
00370041    90                 nop                                   ;
00370042    58                 pop     eax                           ;
00370043    EB 09              jmp     short 0037004E                ;
00370045    90                 nop                                   ;
00370046    90                 nop                                   ;
00370047    E8 F2FFFFFF        call    0037003E                      ;
0037004C    90                 nop                                   ;
0037004D    90                 nop                                   ;
0037004E    49                 dec     ecx
0037004F  ^ 75 F1              jnz     short 00370042
00370051    EB 05              jmp     short 00370058
00370053  ^ EB F9              jmp     short 0037004E
00370055  ^ EB F0              jmp     short 00370047
00370057    90                 nop
00370058    B9 04000000        mov     ecx,4
0037005D    E8 1F000000        call    00370081
00370062    90                 nop
00370063    90                 nop
00370064    E8 16000000        call    0037007F
00370069    90                 nop
0037006A  ^ EB F8              jmp     short 00370064
0037006C    90                 nop
0037006D    90                 nop
0037006E    58                 pop     eax
0037006F    EB 09              jmp     short 0037007A
00370071    90                 nop
00370072    90                 nop
00370073    E8 F2FFFFFF        call    0037006A
00370078    90                 nop
00370079    90                 nop
0037007A    49                 dec     ecx
0037007B  ^ 75 F1              jnz     short 0037006E
0037007D    EB 05              jmp     short 00370084
0037007F  ^ EB F9              jmp     short 0037007A
00370081  ^ EB F0              jmp     short 00370073
00370083    90                 nop
00370084    E8 03000000        call    0037008C
00370089    90                 nop
0037008A    90                 nop
0037008B    90                 nop
0037008C    58                 pop     eax
0037008D    EB 01              jmp     short 00370090
0037008F    90                 nop
00370090    83C0 07            add     eax,7
00370093    50                 push    eax
00370094    C3                 retn
00370097    E8 24000000        call    003700C0

运行前的寄存器状态(EIP =370000)                 花指令运行后的寄存器状态(EIP =3700c0)               

EAX 0035FE6C                                      EAX 00370097
ECX 00000002                                      ECX 00000000
EDX 00370000                                      EDX 00370000
EBX 00469499 jl.00469499                          EBX 00469499 jl.00469499
ESP 0012FF9C                                      ESP 0012FF94
EBP 00467000 jl.00467000                          EBP 00467000 jl.00467000
ESI 0046701C ASCII "VirtualAlloc"                 ESI 0046701C ASCII "VirtualAlloc"
EDI 570B6113                                      EDI 570B6113
EIP 00370000                                      EIP 003700C0
C 0  ES 0023 32bit 0(FFFFFFFF)                    C 0  ES 0023 32bit 0(FFFFFFFF)
P 1  CS 001B 32bit 0(FFFFFFFF)                    P 0  CS 001B 32bit 0(FFFFFFFF)
A 0  SS 0023 32bit 0(FFFFFFFF)                    A 0  SS 0023 32bit 0(FFFFFFFF)
Z 1  DS 0023 32bit 0(FFFFFFFF)                    Z 0  DS 0023 32bit 0(FFFFFFFF)
S 0  FS 003B 32bit 7FFDF000(FFF)                  S 0  FS 003B 32bit 7FFDF000(FFF)
T 0  GS 0000 NULL                                 T 0  GS 0000 NULL
D 0                                               D 0
O 0  LastErr ERROR_SUCCESS (00000000)             O 0  LastErr ERROR_SUCCESS (00000000)
EFL 00000246 (NO,NB,E,BE,NS,PE,GE,LE)             EFL 00000202 (NO,NB,NE,A,NS,PO,GE,G)
DR0 00000000                                      DR0 00000000
DR1 00000000                                      DR1 00000000
DR2 00000000                                      DR2 00000000
DR3 00000000                                      DR3 00000000
DR6 00000000                                      DR6 00000000
DR7 00000000                                      DR7 00000000
        
这里以后,我将不再将这个壳的花指令模式展现出来,为大家清楚的看到这个程序。
         
                                    
003700C0    64:FF35 00000000   push    dword ptr fs:[0]            ;开始了SEH ,这个壳大量的运用了SEH ,
003700C7    EB 12              jmp     short 003700DB              ’熟练程度几乎是我遇见壳中最强的,可以说
003700DB    64:8925 00000000   mov     dword ptr fs:[0],esp        ;SEH 这里体现了作者的的写壳机巧和这个壳
                            .....                                  ;树立了在密界极高的待遇。
                            .....
0037011A    66:BF 4D4A         mov     di,4A4D
0037011E    CC                 int3                                ;; 这里准备INT 3异常了,你会发现下面去掉花指令后
                                                                   &;-----------------------------------------
                 (观察堆栈)                                      &;0012FF94  /0012FFE0  指针到下一个 SEH 记录
                                                                   &;0012FF98  |003700E9  SE 句柄
                                                                   &; 0012FF9C  |00467000  jl.00467000
                                                                   &;-----------------------------------------
0037011F    90                 nop                                 ;怎么和3700CO如此像?是的,这里就是SEH 的出口
00370120    90                 nop
00370121    64:8F05 00000000   pop     dword ptr fs:[0]             ; 你在这里下断(F2),F4一把带过,祝贺你,你过了
00370128    58                 pop     eax                          ; 第一个陷阱。其实,老老实实的看堆栈,用SEH 的句炳
                                                                    ;你会发现兜了一圈,回到了这里。呵呵,玩多SEH 了
                                                                    ;你会发现有时候有技巧的,过SEH 过去就过去了,没有过去                                         
                                                                    ;在栽跟头地方重新仔细找问题,马上会解决的。

小结:这里的SEH 其实没有特别的,基本没有有用的代码,就是让DEBUGER和它比耐心,找到SEH 的出口,直接奔过去,不和它纠缠。
     其实你要是喜欢,可以把370000到7372AE一大段全NOP掉,并不影响程序。爽吧?
     如果大量花指令的我用.............代替了。

003732AE    E8 00000000        call    003732B3                          ; 真正开始面对了有分量的地方了,天黑
003732B3    5A                 pop     edx                               ; 风高杀人夜,弟兄们要小心了。
003732B4    81EA 9E1B4000      sub     edx,401B9E                        ;
003732BA    EB 23              jmp     short 003732DF                    ;一堆花指令
003732DF    50                 push    eax                               ‘
003732E0    E8 EFFFFFFF        call    003732D4                          ;
003732D4    58                 pop     eax                               ;
003732D5    9C                 pushfd                                    ;
003732D6    05 E6FFFFFF        add     eax,-1A                           ;
003732DB    9D                 popfd                                     ;
003732DC >^ FFE0               jmp     near eax                          ;
  
.............................
0037331B    8D75 74            lea     esi,dword ptr ss:[ebp+74]         ; 取GetProcAddress地址给ESI
............................
00373348    8DBA 080F4100      lea     edi,dword ptr ds:[edx+410F08]     ; 将38261d地址传给EDI
.............................
00373378    F3:A5              rep     movs dword ptr es:[edi],dword ptr>; GetModuleHandleA和LoadLibraryA地址传送到38261d中

-------------------------------------------------------------------------;
0038261D  6C FE 35 00 29 B5 80 7C 77 1D 80 7C 00 00 00 00  l?.)?|w?....;大家看看它准备干什么  :)  
-------------------------------------------------------------------------;

003733A4    8B45 04            mov     eax,dword ptr ss:[ebp+4]          ; ntdll.7C930738
.............................
003733D0    8982 180F4100      mov     dword ptr ds:[edx+410F18],eax     ; ntdll.7C930738传入38262d
.............................
00373400    8D85 51010000      lea     eax,dword ptr ss:[ebp+151]         ;
.............................
00373431    8982 840F4100      mov     dword ptr ds:[edx+410F84],eax      ; 将467151送382699
.............................
00373462    8B45 2C            mov     eax,dword ptr ss:[ebp+2C]          ; kernel32.VirtualAlloc
.............................                                             ;看见这个大家应该知道它要干什么了吧??
0037348D    8982 140F4100      mov     dword ptr ds:[edx+410F14],eax            ; 将VirtualAlloc地址传送到382629
.............................
003734E4    8B85 280F4100      mov     eax,dword ptr ss:[ebp+410F28]            ; 38263d地址入eax=0
.............................
003736CD    0BC0               or      eax,eax
003736CF    75 40              jnz     short 00373711                           ; 必须跳,这里如果F7跟踪将会不跳
003736D1    6A 00              push    0
003736D3    FF95 0C0F4100      call    near dword ptr ss:[ebp+410F0C]           ; kernel32.GetModuleHandleA

呵呵,把个地址搬过来搬过去的,原来是要弄个call GetModuleHandleA,真累。别急,才刚刚开始呢

003736E7    68 24080E68        push    680E0824                                ;压这些到堆栈干什么?
003736EC    68 90908344        push    44839090                                ;???
003736F1  - FFE4               jmp     near esp                                ;BT ,原来要跑堆栈里面执行代码了
-------------堆栈里面不好玩也。就下面这样几句,也跑堆栈里面
0012FF92    834424 08 0E       add     dword ptr ss:[esp+8],0E                 ;3736f4
0012FF97    68 E6363700        push    3736E6
0012FF9C    C2 1000            retn    10
...............................
003736F4    8985 180F4100      mov     dword ptr ss:[ebp+410F18],eax            ; 00400000--》38262d,准备盖掉罪状
................................
00373711    6A 04              push    4
00373713    68 00100000        push    1000                                     ; 申请缓冲区大小1000
00373718    68 00100000        push    1000
0037371D    6A 00              push    0
0037371F    FF95 140F4100      call    near dword ptr ss:[ebp+410F14]           ; VirtualAlloc申请缓冲区(390000)
又申请内存,乖乖,还没有走两步,就又开始申请内存玩是么名堂了????
00373725    8985 54184100      mov     dword ptr ss:[ebp+411854],eax            ; 将申请的缓冲区段地址入382f69
0037372B    68 003C070A        push    0A073C00                                 ;
00373730    68 9FFC0D75        push    750DFC9F                                 ;干吗又推这样的东西入堆栈,看着75头
                                                                                ;就明白要为下面跑堆栈里面跑代码.
00373735    50                 push    eax                                      ;390000
...............................................
003737A3    FF30               push    dword ptr ds:[eax]                       ; 将 37373f内的内容送到堆栈,从这里开始
                                                                                ;到3737ad,将把代码送入堆栈,真精彩的代码

..........................................
其中花指令带压代码入栈方式,真的很漂亮,跟着都让人感觉心旷神怡.
...........................................
003737AA    89E0               mov     eax,esp                                  ; 将堆栈地址入eax,准备入堆栈执行
003737AD    FFD0               call    near eax                                 ; 跳入堆栈进行代码执行

---------------------------------------------------------------------------------------
0012FF44    873424             xchg    dword ptr ss:[esp],esi         ; 将堆栈和ESI的内容互换
0012FF47    8B36               mov     esi,dword ptr ds:[esi]         ; 将[ESI]的内容赋值给ESI
0012FF49    81F6 EBFF71C8      xor     esi,C871FFEB                   ;将ESI和C871ffeb比较
0012FF4F    75 19              jnz     short 0012FF6A                 ;不等则跳,这里不能跳.
0012FF51    8B7424 50          mov     esi,dword ptr ss:[esp+50]      ;
0012FF55    56                 push    esi                            ; 取ESP+50的内容重新压栈
0012FF56    8B36               mov     esi,dword ptr ds:[esi]         ;
0012FF58    81F6 EBFF71E8      xor     esi,E871FFEB                   ; 将ESP+50的内容和E871FFEB比较
0012FF5E    75 09              jnz     short 0012FF69                 ;不等则跳,这里不能跳
0012FF60    5E                 pop     esi                            ;
0012FF61    83C6 4C            add     esi,4C
0012FF64    897424 48          mov     dword ptr ss:[esp+48],esi      ; 将从堆栈的返回代码段地址压栈
0012FF68    8D7424 58          lea     esi,dword ptr ss:[esp+58]      ; 将ESP+58地址送ESI
0012FF6C    51                 push    ecx                            ;
0012FF6D    B9 02000000        mov     ecx,2                          ;要运算出2个指令
0012FF72    8136 EBFF7874      xor     dword ptr ds:[esi],7478FFEB    ; 作这个运算真不简单,记得刚才我说的75头的数值压栈0012FF78    83EE FC            sub     esi,-4                         ;的话么,这里把指令变成真正的指令.
0012FF78    83EE FC            sub     esi,-4                         ;下一个数据
0012FF7B    49                 dec     ecx                            ;计数器
0012FF7C  ^ 75 F4              jnz     short 0012FF72                 ;
0012FF7E    59                 pop     ecx                            ;
0012FF7F    8D7424 58          lea     esi,dword ptr ss:[esp+58]      ; 将[ESP+58]内容送入ESI
0012FF83    FFD6               call    near esi                       ; 到12ff98
0012FF98   /74 03              je      short 0012FF9D
0012FF9D    C3                 retn                                   ; 返回到12ff85
0012FF85    5E                 pop     esi                            ; 准备去调用KERNEL32.dll
0012FF86    F3:                prefix rep:
0012FF87    68 87373700        push    373787
0012FF8C    C2 5000            retn    50                             ; 返回代码段
-------------------------------------------------------------------------------------------
大家看了这段如何?真的很精彩,在堆栈里面执行代码还不忘记边执行边解码出来,我等菜鸟佩服的五体投地.
后面将持续的运用这样的方式.

00373787    8B0424             mov     eax,dword ptr ss:[esp]         ; 将缓冲区(390000)段地址入EAX
0037378A    83EC F8            sub     esp,-8                         ; 堆栈指针+8(12ff9c)
............
0037387F    5E                 pop     esi                            ; 取370000段地址
00374478    56                 push    esi
00374479    8DB5 C1214000      lea     esi,dword ptr ss:[ebp+4021C1]  ; 将地址(3738d6)送ESI
0037447F    68 03EA17B3        push    B317EA03                       ;
..............
003744F2    FF33               push    dword ptr ds:[ebx]              ;又开始要往堆栈里面压代码
...................
003744F9    89E3               mov     ebx,esp                          ;要往堆栈里面走了 :(
003744FC    FFD3               call    near ebx                        ;去堆栈了,真受不了,好好程序段不用
                                                                       ;喜欢跑堆栈里面玩,以后我们都跑女厕所
      这里我就不跑了,和上面一样的形势.

003745CE    8BFE               mov     edi,esi                     ; 3738d6开始,446大小准备解码,送370000
003745D0    B9 46040000        mov     ecx,446
003745D5    AC                 lods    byte ptr ds:[esi]           ; 把取出的数据放到al中
.....................................................
003745D6    9C                 pushfd
003745D7    6A 03              push    3
003745EA    83C4 04            add     esp,4                        ;ESP+4
......
003745F1    FF0C24             dec     dword ptr ss:[esp]           ;3-1
........
003745EA    83C4 04            add     esp,4                        ;ESP+4
........
003745F1    FF0C24             dec     dword ptr ss:[esp]           ;2-1
........
003745EA    83C4 04            add     esp,4                        ;ESP+4
........
003745F1    FF0C24             dec     dword ptr ss:[esp]           ;1-1
........
........................................................
其实上面就是将[ESP]中的内容=-1,这是迷惑人的,算花指令,真正也就下面的解码方式
00374603    32C1               xor     al,cl                         ;al=8
0037461C    C0C0 04            rol     al,4                          ;al=80
0037464C    AA                 stos    byte ptr es:[edi]             ;把计算后的结果放回去
0037464D  ^\E2 86              loopd   short 003745D5                ;循环解码

-----------------------------------------------------------------------
一直在解码,真是藏在深闺不露面呀,不行我跑女厕所看你去!!!!!!!!!!!!!!

后面开始很危险了,这里

0037464F    5E                 pop     esi                         ; 00373885
00374650    33C0               xor     eax,eax
00374652    64:FF30            push    dword ptr fs:[eax]          ; 又在建SEH了,准备异常了
00374655    64:8920            mov     dword ptr fs:[eax],esp
00374658    0F0B               ud2                                 ;异常
------------------------看句柄跟着跑呀
0012FF9C  /0012FFE0
0012FFA0  |00373885  返回到 00373885 来自 00374478
0012FFA4  |7C930738  ntdll.7C930738
-------------------------
00373885    E8 04000000        call    0037388E                           ;
...........
003738CC    FF81 B8000000      inc     dword ptr ds:[ecx+B8]              ;
003738D2    3D 03000080        cmp     eax,80000003                       ;呵呵这里比这个大家明白了么?

00373B24    8161 14 F00FFFFF   and     dword ptr ds:[ecx+14],FFFF0FF0     ; ffff0ff0
003747B7    AC                 lods    byte ptr ds:[esi]                  ; 2d
003747B8    32C1               xor     al,cl
003747BA    04 4D              add     al,4D
003747BC    C0C0 03            rol     al,3
003747BF    AA                 stos    byte ptr es:[edi]                  ;又在解码
003747C0  ^\E2 F5              loopd   short 003747B7
...........................
0037497A    AC                 lods    byte ptr ds:[esi]
0037497B    03D8               add     ebx,eax                             ; :)
0037497D  ^ E2 FB              loopd   short 0037497A
0037497F    8BC3               mov     eax,ebx
00374981    F8                 clc                                       ;异常
...........................

这里是我需要套用一个前辈的一个分析,的确,刚刚过来的时候,这里感觉有点诡异,一边建SEH
一边解码,走的时候,我恐惧感不断地加强,在这里曾经苦闷过,伤心过,终于看见了一点光,一点点,
这里特别感谢前辈Windows,强烈鄙视王子,不说清楚就往下跑,这里摔得人不下成千上万,我终于爬过来
了,这里特别贴上Windows的分析

(★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
;在这个版本的壳中,最巧妙的就是它的4个关键SEH. 接下来我们遇到了第一个.
;这个seh对反跟踪效果非常的好. 它首先利用一个int3中断进入seh, 设置4个单步断点于dr寄存器中.
;然后分别在四个单步中断处完成解码的相应操作,;最后经过一个除0异常进入seh,设置好dr寄存器的值后,拆除seh.
;    我们如果在4个单步断点之间进行软硬件中断调试,是不太可行的.
;    a.软件: 很多代码没有解密,无法对其进行软件中断
;    b.硬件: dr寄存器被占用,根本无法使用硬件中断
;所以,我们唯一的办法只有在它最后一次进入seh之后的代码上下软件断点"CMP EAX,CD000094". 幸好,这段代码部分没有加密,
不然就根本无法跟踪下去了.;然后,出第一个seh中断. 这个时候,我们必须把dr寄存器中的值记录下来,因为在第二个seh中要
用到. 除非,你在第一个和第二个seh之间不进行
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

这里我倒是要说,不可能它不解密,否则它自己也要陷入死循环.
不得不佩服这个壳如此地漂亮的下陷阱,和在它自己在陷阱中解码继续前进,我也在前进了,不断前进
我耳边开始响起来了那个<义勇军进行曲>

003742E0    3D 940000CD        cmp     eax,CD000094                       ;F2下断点这里,我们起飞!!!!!!!!

(●★003742E5    23ACAB 121617A9 AND EBP,DWORD PTR DS:[EBX+EBP*4+A9171612>)★●);这里是没有解码时候走不下去的                                                             )                    
003742E5   /0F85 89010000      jnz     00374474                            ;芝麻开门了,嘻嘻
003742EB   |8322 00            and     dword ptr ds:[edx],0                ;把走过来的路堵死,真厉害,步步为营

00374350    C741 04 2301FF0F   mov     dword ptr ds:[ecx+4],0FFF0123        ;DR0
.......
00374382    C741 08 6745FF0F   mov     dword ptr ds:[ecx+8],0FFF4567        ;DR1
.......
003743B3    C741 0C AB89FF0F   mov     dword ptr ds:[ecx+C],0FFF89AB        ;DR2
.......
003743E5    C741 10 EFCDFF0F   mov     dword ptr ds:[ecx+10],0FFFCDEF       ;DR3
.......
00374415    8161 14 F00FFFFF   and     dword ptr ds:[ecx+14],FFFF0FF0       ;DR6
.......
00374447    C741 18 55010000   mov     dword ptr ds:[ecx+18],155            ;DR7
.........

EFL 00000206 (NO,NB,NE,A,NS,PE,GE,G)
DR0 0FFF0123
DR1 0FFF4567
DR2 0FFF89AB
DR3 0FFFCDEF
DR6 FFFF0FF0
DR7 00000555

记下它们,后面有用  :)

---------我完整的把这个跨越写下来,看见没有,中间的INT 3就是让无数英雄卡脑袋,无数MM飞
哭鼻子的地方,真黑哟,CX=51F,多少个INT 3哟,我耳边响起来了,
-----------------------有多少爱可以从来 ,
51F(我要飞????),BT!!!!!!!!!我就是不飞,我飞多高摔多重 :)

0037549E    FF35 00000000      push    dword ptr ds:[0]
003754A4    64:8925 00000000   mov     dword ptr fs:[0],esp
003754AB    8DB5 D1424000      lea     esi,dword ptr ss:[ebp+4042D1]
003754B1    B9 1F050000        mov     ecx,51F
003754B6    8A0431             mov     al,byte ptr ds:[ecx+esi]
003754B9    CC                 int3
003754BA    90                 nop
003754BB    880431             mov     byte ptr ds:[ecx+esi],al
003754BE  ^ E2 F6              loopd   short 003754B6
003754C0    64:8F05 00000000   pop     dword ptr fs:[0]                   ; 我们下F2这里,这下飞高点

同志们,这一节我写到这里,希望给看雪拉长点好看得东西,有钱的捧个钱场,有人的捧个人场,
看雪是我家,卫生靠大家!

◇◎◎●◎●◎◎●○●◎●★★№☆№☆№☆№№§●◎●_↑→←△▲↑_▲@什么乱七八糟的东西

--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
2005-8-7 08:03
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
7
按你的篇幅统计,建议你还是在一个主题里写。
2005-8-7 08:55
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
0o0o0o0oo0o0o0o0,肥皂剧上场.
2005-8-7 09:24
0
雪    币: 343
活跃值: (611)
能力值: ( LV9,RANK:810 )
在线值:
发帖
回帖
粉丝
9
2005-8-7 10:50
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
10
先加精鼓励
继续
2005-8-7 11:10
0
雪    币: 93908
活跃值: (200199)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
11
同意的说
2005-8-7 11:21
0
雪    币: 228
活跃值: (85)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
顶啊... 写的真是太精采了
相当配服楼主的耐心
文章内容也浅显易懂.. :D

不过你参考的是 window 不是 Windows 喔 XD
他那篇文章写的真的好 QQ
2005-8-7 11:44
0
雪    币: 389
活跃值: (912)
能力值: ( LV9,RANK:770 )
在线值:
发帖
回帖
粉丝
13
有耐心,佩服.
2005-8-7 12:25
0
雪    币: 234
活跃值: (370)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
14
精彩啊,佩服
2005-8-7 13:00
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
15
佩服~
2005-8-7 13:44
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
16
FLy 还记得,一年前,我被堵于这个壳外不得要领,我发誓要破了它,这些都是我差不多一天100行或者500行的分析的常时间积累的东西。今天拿出来和大家分享,尽管我等是菜鸟,但是,当你发现一个精彩的壳是如此的经典,那么,静下心来,我们分析它,这个文章就当拿一把手术刀,慢慢的解剖它把,这个壳在我们国内历史上有它重重的一笔。
2005-8-7 14:41
0
雪    币: 111
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
我晕,又有人把我的名字弄错了...
2005-8-7 14:58
0
雪    币: 44229
活跃值: (19955)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
18
最初由 hnhuqiong 发布
这个壳在我们国内历史上有它重重的一笔


叫Hying来看看
2005-8-7 15:08
0
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
19
Hying 被肢解了也开心
2005-8-7 15:10
0
雪    币: 513
活跃值: (2258)
能力值: ( LV9,RANK:2130 )
在线值:
发帖
回帖
粉丝
20

只是圈内的东西,不好大家说而已:-)。

换内核级加壳器了
2005-8-7 17:18
0
雪    币: 208
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
啊... 写的真是太精采了
相当配服楼主的耐心
文章内容也浅显易懂.. :D
哈哈!学到东西了!
2005-8-7 17:26
0
雪    币: 109
活跃值: (438)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
22
哎呀~

forgot 换头像了~

终于告别鲁迅了~
2005-8-7 18:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
看不明....
也得要慢慢学了...
2005-8-7 19:14
0
雪    币: 2003
活跃值: (61)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
什么软件?下一个套用学习一下?
2005-8-7 19:58
0
雪    币: 124
活跃值: (70)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
25
这样分析完真是太厉害了,我都是走马观花,风风火火的走完了

你是一个指令一个脚步,佩服你的耐心和细心
2005-8-7 21:41
0
游客
登录 | 注册 方可回帖
返回
//