• 标 题:菜鸟脱壳日记—>仙剑新版壳
  • 作 者:loveboom
  • 时 间:2004年4月06日 07:07
  • 链 接:http://bbs.pediy.com

【目    标】:仙剑新版加壳程序
【工    具】:Olydbg1.1(diy版)、LORDPE、ImportREC1.6F
【任    务】:脱主程序的壳 
【操作平台】:WINDOWS 2000 ADV SP2
【作    者】:loveboom[DFCG]
【相关链接】: 看雪那里找找
【简要说明】:嘿嘿,好久没什么壳玩的了,本人功力很菜,昨天弄几个软件都没有一个成功的(好失败).,今天趁还有一点时间,来玩玩linson的壳,他的东东我可是第一次碰,因为自己水平菜,所以以前不敢试的说。今天有幸骗壳过关,哈哈哈!
【详细过程】:
设置:忽略全部异常,隐身OD。
先用“照妖镜”(peid)看一下,晕倒,怎么可能是幻影的壳呢,同时“惊鼓喜”交加,惊是担心它真的像幻影那样让我的机子crash,喜的是,不管怎么说,自己还算成功脱过幻影的壳。作好思想准备后:),按f9运行一次,程序中断:
00412167    F0:0FC7C8       LOCK CMPXCHG8B EAX   ;非法使用寄存器
0041216B    AA              STOS BYTE PTR ES:[EDI]
怎么感觉像ExEcryptor呢,在我碰过的壳里,只看过Execryptor和pelock两个壳用过这一招。不管它先,我们现在打开选项框,在异常里添加最后的异常,并在前面打上钩,这样用自己DIY的OD就可以忽略它继续前进.
因为壳都要对输入表进行“处理”,所以不管它加不加密都要这一步,那我们也就下这个断
bp LoadLibraryA,下断后,shift+f9继续运行,这样就会中断在LoadLibraryA系统Dll中:
77E6A254 >  55              PUSH EBP        ;中断在这里,取消断点,再返回
77E6A255    8BEC            MOV EBP,ESP
77E6A257    53              PUSH EBX
77E6A258    56              PUSH ESI
77E6A259    57              PUSH EDI
返回到下面,看到这么整齐,就知道有好东西了(其实到这里,有一个更快的方法找到OEP,具体我是不会说的,留给大家的“作业”,做不出来要打pp的说,那样也太对不起fly兄的苦心.)
00412238    8BF0            MOV ESI,EAX     ;回到这里
0041223A    8985 D7294000   MOV DWORD PTR SS:[EBP+4029D7],EAX
00412240    8DBD 97204000   LEA EDI,DWORD PTR SS:[EBP+402097]
00412246    8D85 DB294000   LEA EAX,DWORD PTR SS:[EBP+4029DB]
0041224C    FFD7            CALL EDI
0041224E    8985 EC294000   MOV DWORD PTR SS:[EBP+4029EC],EAX
00412254    8D85 F0294000   LEA EAX,DWORD PTR SS:[EBP+4029F0]
0041225A    FFD7            CALL EDI
0041225C    8985 FF294000   MOV DWORD PTR SS:[EBP+4029FF],EAX
00412262    8D85 032A4000   LEA EAX,DWORD PTR SS:[EBP+402A03]
00412268    FFD7            CALL EDI
0041226A    8985 162A4000   MOV DWORD PTR SS:[EBP+402A16],EAX
00412270    8D85 1A2A4000   LEA EAX,DWORD PTR SS:[EBP+402A1A]
00412276    FFD7            CALL EDI
00412278    8985 262A4000   MOV DWORD PTR SS:[EBP+402A26],EAX
返回后,按三次Ctrl+f9(每按完后记得按F8一次):
//第一次
004122D8    50              PUSH EAX
004122D9    C3              RETN
//第二次
004123DE    50              PUSH EAX
004123DF    C3              RETN
//第三次
0041241B    50              PUSH EAX
0041241C    C3              RETN
第三次Ctrl+f9后按一次F8就到这里:
004124F3    8B85 36284000   MOV EAX,DWORD PTR SS:[EBP+402836] //到这里停下
004124F9    0385 3A284000   ADD EAX,DWORD PTR SS:[EBP+40283A] //哈哈,这里加上去的话就是OEP了。
004124FF    EB 02           JMP SHORT Main.00412503
00412501    CD 20           INT 20
00412503    C1C8 07         ROR EAX,7    //这里EAX等于OEP,怎么这么熟,“长”得好像YODA的某个壳中的东东.
00412506    894424 1C       MOV DWORD PTR SS:[ESP+1C],EAX

到这里我们就得到了程序的OEP,下面我们要跳过iat加密,找到正确的输入表,要不进入程序OEP后,就有得玩了。接着下bp GetProcAddress,下断后,按F9飞一下停住了:
77E69AC1 >  55              PUSH EBP    //停在这里
77E69AC2    8BEC            MOV EBP,ESP
77E69AC4    51              PUSH ECX
停下后,ALT+F9回到程序代码处:
0041263B    0BC0            OR EAX,EAX       ; KeRnEl32.CloseHandle
0041263D    75 07           JNZ SHORT Main.00412646
0041263F    59              POP ECX
停下后Ctrl+f9再次运行到ret处:
004129EB    40              INC EAX              
004129EC    8038 00         CMP BYTE PTR DS:[EAX],0
004129EF  ^ 75 F7           JNZ SHORT Main.004129E8
004129F1    C3              RETN  //停在这里
停下来按f8就看到好东西:
00412663    61              POPAD
00412664    8902            MOV DWORD PTR DS:[EDX],EAX     ; KeRnEl32.CloseHandle
//这里不就是传递API吗
00412666    EB 1D           JMP SHORT Main.00412685   //跳去判断处
00412668    52              PUSH EDX
00412669    51              PUSH ECX
0041266A    8B01            MOV EAX,DWORD PTR DS:[ECX]
0041266C    2D 00000080     SUB EAX,80000000
00412671    50              PUSH EAX
00412672    53              PUSH EBX
00412673    FF95 C6294000   CALL DWORD PTR SS:[EBP+4029C6]
00412679    85C0            TEST EAX,EAX
0041267B    0F84 B6000000   JE Main.00412737
00412681    59              POP ECX
00412682    5A              POP EDX
00412683    8902            MOV DWORD PTR DS:[EDX],EAX
00412685    F785 3E284000 2>TEST DWORD PTR SS:[EBP+40283E],20    //看到这个我怎么又想起OBS来了,OBS我还是蒙过来的。
0041268F    0F84 83000000   JE Main.00412718    //这里改一下它就不会乱来了
//这里改成jmp addr
00412695    EB 02           JMP SHORT Main.00412699
改完后,自以为没事了,go一下oep怎么回事,退出了,看来还有桩没去除,没事,不是幻影那样让我的机子“蓝屏”就不怕它,再来,重复一次来到这里。
现在向下看看:
0041272A    837E 04 00      CMP DWORD PTR DS:[ESI+4],0
0041272E  ^ 0F85 6EFEFFFF   JNZ Main.004125A2
00412734    33C0            XOR EAX,EAX
00412736    40              INC EAX
00412737    83F8 01         CMP EAX,1
0041273A    74 02           JE SHORT Main.0041273E        //直接F4到这里
0041273C    61              POPAD
0041273D    C3              RETN
F4直接运行到41273a处,因为上面一大段都是GetProcAddress来做事.运行到41273A处后,慢慢按F7、F8了.其实并不远:
004127DD    8B9D 46284000   MOV EBX,DWORD PTR SS:[EBP+402846]
004127E3    33C3            XOR EAX,EBX            //嘿嘿,发现“二伍仔”了
004127E5    74 08           JE SHORT Main.004127EF //为了防止再次被“暗算”,我直接改标志,这样它就不能把我怎么样了吧,改标志,让这里跳转成功.
004127E7    EB 01           JMP SHORT Main.004127EA
过了这一关后,我们按f8到这里了:
00412801    2AC3            SUB AL,BL
00412803    C0C0 02         ROL AL,2
00412806    AA              STOS BYTE PTR ES:[EDI]
00412807    43              INC EBX
00412808  ^ E2 F4           LOOPD SHORT Main.004127FE    
0041280A    EB 03           JMP SHORT Main.0041280F   //这里直接F4跳过上面的循环,这后,按几次f8看到很多比较的东东,我们要找的就是CMP AX,25FF:
004128DE    83C6 05         ADD ESI,5     //颜色变深红,难看的说.
004128E1  ^ E9 53FFFFFF     JMP Main.00412839
004128E6    3C CC           CMP AL,0CC
004128E8    75 06           JNZ SHORT Main.004128F0
004128EA    46              INC ESI
004128EB  ^ E9 49FFFFFF     JMP Main.00412839
004128F0    66:3D FF25      CMP AX,25FF            //就是这里
004128F4    75 08           JNZ SHORT Main.004128FE //直接F4到这里
004128F6    8D85 AF274000   LEA EAX,DWORD PTR SS:[EBP+4027AF]
004128FC    FFD0            CALL EAX
004128FE    61              POPAD
直接F4到4128f4处,为什么是这里呢,原因很简单,25FF不就是jmp api里的机器码.
现在在4128F4处改标志,让程序跳,这样就不会动手脚.
跳过这里后,就不会有什么东东了,我们直下G OEP(这个就是我们上面看到eax的值)。
到oep后纠正大小->dump->fixdump(某鸟曰:怎么dump呀?狂晕中@_@……)就可以收工了。

【总    结】:
脱个东东,怎么让我想到幻影、yoda、obs,怀疑自己中了“乱想”症,FSMM快帮我检查一下先。


BTW:现实中,我是一个比较爱静、多愁伤感、不喜欢说话的人,也不是很会讲笑的人,我只是觉得我自己写的文章,不用像教程那样一板一眼,难接受,所以我写的东东多数有“灌水”之疑.


Thanks:
Fly 辉仔yock、jingulong、二哥、所有曾经关心支持或帮助过我的朋友!谢谢您们!

                    by  loveboom[DFCG][FCG]                           
                    Email:bmd2chen@tom.com