一个简单的Armadillo脱壳破解
 
文章作者: Winter[CZG][D.4s][BCG]
作者邮箱: spsgeyro@gmail.com
软件名称: FlashVideoStudio1.5
软件大小: 6.68 MB
下载地址: http://vip.hanzify.org/lordfox/MyHHOpus/todo.rar
加壳方式: Armadillo 3.78 - 4.xx -> Silicon Realms Toolworks
保护方式: 注册码
使用工具: OD,PEID,IMPREC
作者声明: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
详细过程: 很久没学习脱壳了,今日在汉化新世纪论坛逛的时候发现这个软件,遂跟着教程学脱。
        由于是要汉化,但是破解文件本身又加了壳,所以先输入破解后的注册名和序列号
        然后OD载入:
      
        00829000 >  60              PUSHAD
        00829001    E8 00000000     CALL FVStudio.00829006
        00829006    5D              POP EBP
        00829007    50              PUSH EAX
        00829008    51              PUSH ECX
        忽略所有异常,下断BP OpenMutexA,shift+F9,来到断点处:
      
        7C817227 >  8BFF            MOV EDI,EDI
        7C817229    55              PUSH EBP
        7C81722A    8BEC            MOV EBP,ESP
        7C81722C    51              PUSH ECX
         
        0012F770   008017B8  /CALL 到 OpenMutexA
        0012F774   001F0001  |Access = 1F0001
        0012F778   00000000  |Inheritable = FALSE
        0012F77C   0012FDB0  \MutexName = "C64::DABECE0C5A"     //记下0012FDB0这个值
        ctrl+G,401000,输入如下代码:
      
        00401000    60              PUSHAD
        00401001    9C              PUSHFD
        00401002    68 B0FD1200     PUSH 12FDB0                              ; ASCII "C64::DABECE0C5A"
        00401007    33C0            XOR EAX,EAX
        00401009    50              PUSH EAX
        0040100A    50              PUSH EAX
        0040100B    E8 105A417C     CALL kernel32.CreateMutexA
        00401010    9D              POPFD
        00401011    61              POPAD
        00401012  - E9 1062417C     JMP kernel32.OpenMutexA
        然后在401000上点击鼠标右键,选择新建OEP,然后复制数据区二进制代码:
      
        60 9C 68 B0 FD 12 00 33 C0 50 50 E8 10 5A 41 7C 9D 61 E9 10 62 41 7C 90
        继续F9,断下后取消断点,ctrl+G返回401000撤销修改,
        然后下断:BP GetModuleHandleA+05(这个程序BP GetModuleHandleA似乎断下后返回不对)
      
        011EF168  /011EF7C0
        011EF16C  |7C822B47  返回到 kernel32.7C822B47 来自 kernel32.GetModuleHandleA
        011EF170  |00000000
        011EF174  |7C822B8F  返回到 kernel32.7C822B8F 来自 kernel32.7C822B40
         
        011EF73C  /011EF858
        011EF740  |4C52D4A7  返回到 msctfime.4C52D4A7 来自 kernel32.GetModuleHandleA
        011EF744  |011EF748  ASCII "I:\WINDOWS\system32\ntdll.dll"
         
        0012F710   0012F778
        0012F714   008008F3  返回到 FVStudio.008008F3 来自 kernel32.GetModuleHandleA
        0012F718   00000000
        0012F71C   7C82B3C8  返回到 kernel32.7C82B3C8 来自 ntdll.ZwOpenMutant
         
        001294FC  /0012EC44
        00129500  |01217105  返回到 01217105 来自 kernel32.GetModuleHandleA
        00129504  |0122BC1C  ASCII "kernel32.dll"
        00129508  |0122CEC4  ASCII "VirtualAlloc"
         
        001294FC  /0012EC44
        00129500  |01217122  返回到 01217122 来自 kernel32.GetModuleHandleA
        00129504  |0122BC1C  ASCII "kernel32.dll"
        00129508  |0122CEB8  ASCII "VirtualFree"
        然后shift+F9,一次中断后取消断点:
      
        00129260  /00129500
        00129264  |01205FC9  返回到 01205FC9 来自 kernel32.GetModuleHandleA
        00129268  |001293B4  ASCII "kernel32.dll"
        alt+f9返回:
      
        01205FC9    8B0D AC402301   MOV ECX,DWORD PTR DS:[12340AC]
        01205FCF    89040E          MOV DWORD PTR DS:[ESI+ECX],EAX
        01205FD2    A1 AC402301     MOV EAX,DWORD PTR DS:[12340AC]
        01205FD7    391C06          CMP DWORD PTR DS:[ESI+EAX],EBX
        01205FDA    75 16           JNZ SHORT 01205FF2
        01205FDC    8D85 B4FEFFFF   LEA EAX,DWORD PTR SS:[EBP-14C]
        01205FE2    50              PUSH EAX
        01205FE3    FF15 BC622201   CALL DWORD PTR DS:[12262BC]              ; kernel32.LoadLibraryA
        01205FE9    8B0D AC402301   MOV ECX,DWORD PTR DS:[12340AC]
        01205FEF    89040E          MOV DWORD PTR DS:[ESI+ECX],EAX
        01205FF2    A1 AC402301     MOV EAX,DWORD PTR DS:[12340AC]
        01205FF7    391C06          CMP DWORD PTR DS:[ESI+EAX],EBX
        01205FFA    0F84 2F010000   JE 0120612F                         //Magic Jump,改成JMP,然后去01206144下断,F9运行
        01206000    33C9            XOR ECX,ECX
        01206002    8B07            MOV EAX,DWORD PTR DS:[EDI]
        01206004    3918            CMP DWORD PTR DS:[EAX],EBX
        01206006    74 06           JE SHORT 0120600E
        01206008    41              INC ECX
         
        01206144    EB 03           JMP SHORT 01206149     //在这里下断点,断下以后取消断点,撤销magic jump的修改
        01206146    D6              SALC
        01206147    D6              SALC
        然后alt+M,在401000上下内存访问断点
      
        0121F968    8B12            MOV EDX,DWORD PTR DS:[EDX]        //在这里断下,F8单步下去
        0121F96A    8955 DC         MOV DWORD PTR SS:[EBP-24],EDX
        0121F96D    834D FC FF      OR DWORD PTR SS:[EBP-4],FFFFFFFF
         
        0121F9D9    8B50 60         MOV EDX,DWORD PTR DS:[EAX+60]
        0121F9DC    3350 44         XOR EDX,DWORD PTR DS:[EAX+44]
        0121F9DF    3350 1C         XOR EDX,DWORD PTR DS:[EAX+1C]
        0121F9E2    2BCA            SUB ECX,EDX
        0121F9E4    FFD1            CALL ECX                          ; FVStudio.004D17BF   //这里F7进去,就到OEp啦
        然后lordPE脱壳,IMPREC进行修复,
        OEP:000D17BF,自动搜索,获取输入表以后剪切无效指针,修复。
        为了完美一点可以用peditor删除.text1,.adata,.data1,.pdata四个区段,然后重建可执行文件。
        运行以后跳出要求注册的NAG,由于已经脱壳,只要把他跳过即可。

        查找ascII,双击username,跟踪来到:
      
        0041A236    E8 C572FEFF     CALL dumped_.00401500        //F9以后断下,注意堆栈变化
        当堆栈出现如下时,F8跟踪:
      
        0012DD60   0012E658  ASCII "HDQ"
        0012DD64   0012E658  ASCII "HDQ"
         
        00419000    8BCE            MOV ECX,ESI
        00419002    E8 295C0000     CALL dumped_.0041EC30
        00419007    E8 F484FEFF     CALL dumped_.00401500
        0041900C    84C0            TEST AL,AL
        0041900E    6A 00           PUSH 0
        00419010    6A 32           PUSH 32
        00419012    74 0B           JE SHORT dumped_.0041901F             //这里改成JMP后启动无NAG了
        00419014    8B4E 1C         MOV ECX,DWORD PTR DS:[ESI+1C]
        00419017    68 83000000     PUSH 83
        0041901C    51              PUSH ECX
        0041901D    EB 09           JMP SHORT dumped_.00419028
      
        还有点疑问需要请教诸位大侠
        脱壳完成后用PEID查看仍旧显示Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks
        应该如何优化?
        
上一篇   下一篇