另類Armadillo脫殼+破解――StayOn Pro V4.00 Build 2003.03.01

看雪資料發表於2015-11-15

另類Armadillo脫殼+破解――StayOn Pro V4.00 Build 2003.03.01 
 
 
 
下載頁面:  http://www.skycn.com/soft/1427.html
軟體大小:  485 KB
軟體語言:  英文
軟體類別:  國外軟體 / 共享版 / 網路輔助
應用平臺:  Win9x/NT/2000/XP
加入時間:  2003-03-04 15:03:31
下載次數:  1035
推薦等級:  ****

【軟體簡介】:保持你的Internet連線性,如果你要離開,但是又不想下網,用這個可以保持網路連線,避免你被強行斷線。

【作者宣告】:只是感興趣,沒有其他目的。失誤之處敬請諸位大俠賜教!

【除錯環境】:WinXP、Ollydbg、PEiD、LordPE、ImportREC 1.6

――――――――――――――――――――――――――――――――― 
【脫殼過程】:
          
         
      
一、何謂 另類Armadillo
        

        
Armadillo加殼的方式想必大家都知道。其加殼程式執行時有的是單程式有的是雙程式,單程式的一般是標準方式加殼,雙程式的則有的是標準方式加殼有的是CopyMem-II方式加殼。

但是N久以前我卻突然發現另類Armadillo,程式執行後看是單程式,其實並不僅僅是唯一的單程式!這次以StayOn Pro為例簡單說一下這種加殼方式。感謝jwh51兄的幫忙,告訴我這其實還是標準殼,裡面沒有CC,呵呵。


設定Ollydbg忽略所有的異常選項。老規矩:用IsDebug 1.4外掛去掉Ollydbg的偵錯程式標誌。

下斷:BP CreateProcessA          F9執行程式斷下,Alt+F9返回程式程式碼
 
0043FBAF     50                  push eax
0043FBB0     8D8D A8FAFFFF       lea ecx,dword ptr ss:[ebp-558]
0043FBB6     51                  push ecx
0043FBB7     FF15 30B14400       call dword ptr ds:[<&KERNEL32.CreateProcessA>]//產生子程式
0043FBBD     85C0                test eax,eax
0043FBBF     75 2A               jnz short StayOn_P.0043FBEB

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
CreateProcessA 時的堆疊:

0012F59C    0043FBBD  /CALL 到 CreateProcessA 來自 StayOn_P.0043FBB7
0012F5A0    0012F7C4  |ModuleFileName = "E:..............ArmadilloStayOn ProStayOn Pro.exe"
0012F5A4    00141EE0  |CommandLine = """E:..............ArmadilloStayOn ProStayOn Pro.exe"""
0012F5A8    00000000  |pProcessSecurity = NULL
0012F5AC    00000000  |pThreadSecurity = NULL
0012F5B0    00000000  |InheritHandles = FALSE
0012F5B4    00000000  |CreationFlags = 0
0012F5B8    00000000  |pEnvironment = NULL
0012F5BC    00000000  |CurrentDir = NULL
0012F5C0    0012F780  |pStartupInfo = 0012F780
0012F5C4    0012F8C8  pProcessInfo = 0012F8C8
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

Ollydbg裡的StayOn Pro.exe用CreateProcessA產生了新的子程式,然後完成任務,ExitProcess退出了!我們的Ollydbg裡面是“死悄悄”的程式碼,而新程式的StayOn Pro.exe已經得意的執行起來啦。如果此時再用Ollydbg附加這個新的子程式,已經沒有什麼意義了,IAT的處理已經完畢,程式依然執行。這種方式似曾相識,某個殼也是這樣。 

00445746     FF15 2CB14400       call dword ptr ds:[<&KERNEL32.ExitProcess>]//退出


呵呵,沒有辦法了?有!最簡單的就用mysqladm大蝦的方法!搞定這個另類Armadillo,Let's Go!
        
        
―――――――――――――――――――――――――――――――――
二、使程式把自己當成子程式執行
        
        
        
用Ollydbg載入程式,按雙程式標準殼的脫殼方法就OK了!

00444974     55                  push ebp//進入OD後停在這
00444975     8BEC                mov ebp,esp
00444977     6A FF               push -1
00444979     68 00E64400         push StayOn_P.0044E600
0044497E     68 94444400         push StayOn_P.00444494
00444983     64:A1 00000000      mov eax,dword ptr fs:[0]
00444989     50                  push eax
0044498A     64:8925 00000000    mov dword ptr fs:[0],esp
00444991     83EC 58             sub esp,58
00444994     53                  push ebx
00444995     56                  push esi
00444996     57                  push edi
00444997     8965 E8             mov dword ptr ss:[ebp-18],esp
0044499A     FF15 6CB14400       call dword ptr ds:[<&KERNEL32.GetVersion>]

下斷:BP OpenMutexA

77E6074A     55                  push ebp//斷在這,看看堆疊
77E6074B     8BEC                mov ebp,esp
77E6074D     51                  push ecx
77E6074E     51                  push ecx
77E6074F     837D 10 00          cmp dword ptr ss:[ebp+10],0

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
BP OpenMutexA 時的堆疊:

0012F5B8    0043F85D  /CALL 到 OpenMutexA 來自 StayOn_P.0043F857
0012F5BC    001F0001  |Access = 1F0001
0012F5C0    00000000  |Inheritable = FALSE
0012F5C4    0012FBF8  MutexName = "37C::DAA99D8E17"  ★注意0012FBF8
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

Ctrl+G:401000  鍵入以下程式碼:


00401000     60                  pushad
00401001     9C                  pushfd
00401002     68 F8FB1200         push 12FBF8 ★ 堆疊裡看到的值
00401007     33C0                xor eax,eax
00401009     50                  push eax
0040100A     50                  push eax
0040100B     E8 B4B2A577         call kernel32.CreateMutexA
00401010     9D                  popfd
00401011     61                  popad
00401012     E9 33F7A577         jmp kernel32.OpenMutexA

在401000處新建起源,F9執行,再次中斷在OpenMutexA處。
        
        
―――――――――――――――――――――――――――――――――
二、Magic Jump,避開IAT加密
              
           
        
取消以前斷點,下斷:BP GetModuleHandleA+5 

77E59F93     837C24 04 00        cmp dword ptr ss:[esp+4],0
77E59F98     0F84 23060000       je kernel32.77E5A5C1//斷在這,注意看堆疊
77E59F9E     FF7424 04           push dword ptr ss:[esp+4]
77E59FA2     E8 55080000         call kernel32.77E5A7FC
77E59FA7     85C0                test eax,eax
77E59FA9     74 08               je short kernel32.77E59FB3
77E59FAB     FF70 04             push dword ptr ds:[eax+4]
77E59FAE     E8 B0060000         call kernel32.GetModuleHandleW
77E59FB3     C2 0400             retn 4

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
注意看BP GetModuleHandleA+5 時的堆疊變化:

0012E210    003C5DC8  返回到 003C5DC8 來自 kernel32.GetModuleHandleA
0012E214    003DA7F8  ASCII "kernel32.dll"

0012E210    003C5DC8  返回到 003C5DC8 來自 kernel32.GetModuleHandleA
0012E214    003DA7EC  ASCII "user32.dll"

0012E24C    003CF6BD  返回到 003CF6BD 來自 kernel32.GetModuleHandleA
0012E250    00BD1528  ASCII "WSOCK32.dll"

0012E230    003C622B  返回到 003C622B 來自 kernel32.GetModuleHandleA ★ OK
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

當堆疊如上變化後,就可以Alt+F9返回程式程式碼了。


003C6225     FF15 D4803D00       call dword ptr ds:[3D80D4]; kernel32.GetModuleHandleA
003C622B     8B4D 08             mov ecx,dword ptr ss:[ebp+8]
003C622E     3BC8                cmp ecx,eax
003C6230     75 07               jnz short 003C6239
003C6232     B8 98A33D00         mov eax,3DA398
003C6237     EB 30               jmp short 003C6269
003C6239     393D C8A73D00       cmp dword ptr ds:[3DA7C8],edi
003C623F     B8 C8A73D00         mov eax,3DA7C8
003C6244     74 0C               je short 003C6252//Magic Jump ★

直接修改003C6244 jmp 003C6252  因為這個東東使用的是Armadillo舊版加殼,所以這裡可以直接修改。
同時開始下面的第三步,以防程式直接執行!


―――――――――――――――――――――――――――――――――
三、401000段 記憶體斷點 大法,直達OEP


Alt+M 檢視記憶體,在401000開始的段上下 記憶體訪問斷點,F9執行,直接中斷在OEP處 


0040DED2     55                  push ebp//用LordPE糾正ImageSize後完全DUMP這個程式
0040DED3     8BEC                mov ebp,esp
0040DED5     6A FF               push -1
0040DED7     68 38C34200         push StayOn_P.0042C338
0040DEDC     68 8C054100         push StayOn_P.0041058C
0040DEE1     64:A1 00000000      mov eax,dword ptr fs:[0]
0040DEE7     50                  push eax
0040DEE8     64:8925 00000000    mov dword ptr fs:[0],esp
0040DEEF     83EC 58             sub esp,58
0040DEF2     53                  push ebx
0040DEF3     56                  push esi
0040DEF4     57                  push edi
0040DEF5     8965 E8             mov dword ptr ss:[ebp-18],esp
0040DEF8     FF15 90824200       call dword ptr ds:[428290]                 ; kernel32.GetVersion
          
          
執行ImportREC 1.6,選擇這個程式。把OEP改為0000DED2,點IT AutoSearch,所有的函式都是有效的。點“Get Import”,FixDump,正常執行!
          
            
―――――――――――――――――――――――――――――――――
四、破解
          
          
          
脫殼後的程式可以正常執行了,已經不需要註冊了,時間限制也沒用了。但是啟動時的要求註冊的NAG居然還彈了出來,這使我疑惑了一會兒,沒脫完?載入Ollydbg裡看看,真相大白了!原來作者把註冊介面寫進了主程式,註冊驗證依舊是在Armadillo殼裡面進行。繼續搞定他!
        
        
00404A46     E8 B18B0000         call dumped_.0040D5FC//判斷是否已經註冊
00404A4B     59                  pop ecx
00404A4C     85C0                test eax,eax
00404A4E     59                  pop ecx
00404A4F     75 11               jnz short dumped_.00404A62//跳就彈出要求註冊的NAG
00404A51     C787 D0000000010000 mov dword ptr ds:[edi+D0],1
00404A5B     33DB                xor ebx,ebx
00404A5D     E9 3C010000         jmp dumped_.00404B9E
00404A62     83A7 D0000000 00    and dword ptr ds:[edi+D0],0
00404A69     6A 0E               push 0E
00404A6B     53                  push ebx
00404A6C     68 40434300         push dumped_.00434340; ASCII "DAYSINSTALLED"
00404A71     FF15 D4814200       call dword ptr ds:[<&kernel32.GetEnvironmentVariableA>]
00404A77     8D45 DC             lea eax,dword ptr ss:[ebp-24]
00404A7A     53                  push ebx
00404A7B     50                  push eax
00404A7C     8BCF                mov ecx,edi
00404A7E     E8 EFFCFFFF         call dumped_.00404772
00404A83     50                  push eax
00404A84     8D8F 30010000       lea ecx,dword ptr ds:[edi+130]
00404A8A     C645 FC 02          mov byte ptr ss:[ebp-4],2
00404A8E     E8 7F6B0100         call dumped_.0041B612
00404A93     8D4D DC             lea ecx,dword ptr ss:[ebp-24]
00404A96     C645 FC 01          mov byte ptr ss:[ebp-4],1
00404A9A     E8 7E6A0100         call dumped_.0041B51D
00404A9F     8B87 D4000000       mov eax,dword ptr ds:[edi+D4]
00404AA5     8D8F D4000000       lea ecx,dword ptr ds:[edi+D4]
00404AAB     FF90 B8000000       call dword ptr ds:[eax+B8]
00404AB1     83BF 34010000 01    cmp dword ptr ds:[edi+134],1
00404AB8     8B87 AC020000       mov eax,dword ptr ds:[edi+2AC]
00404ABE     74 29               je short dumped_.00404AE9
00404AC0     50                  push eax
00404AC1     68 50434300         push dumped_.00434350 ; ASCII "sop"
00404AC6     8BCF                mov ecx,edi
00404AC8     E8 4FFCFFFF         call dumped_.0040471C//呼叫ArmAccess.DLL驗證註冊碼 ★
00404ACD     85C0                test eax,eax
00404ACF     74 18               je short dumped_.00404AE9
00404AD1     6A 00               push 0
00404AD3     6A 00               push 0
00404AD5     68 18434300         push dumped_.00434318; ASCII "Thank You For registering StayOn Pro!"
00404ADF     C787 D0000000010000 mov dword ptr ds:[edi+D0],1
00404AE9     6A 08               push 8
00404AEB     53                  push ebx
00404AEC     68 10434300         push dumped_.00434310 ; ASCII "EXPIRED"//過期
00404AF1     FF15 D4814200       call dword ptr ds:[<&kernel32.GetEnvironmentVariableA>]
00404AF7     53                  push ebx
00404AF8     8D4D F0             lea ecx,dword ptr ss:[ebp-10]
00404AFB     E8 476A0100         call dumped_.0041B547
00404B00     68 08434300         push dumped_.00434308 ; ASCII "True"
        
        
已經脫殼了當然找不到ArmAccess.DLL驗證註冊碼啦,我們索性幫忙一下,呵呵。
        
00404A4F     75 11               jnz short dumped_.00404A62//NOP掉!
        
這樣啟動時候的NAG永不再來了,About裡面也是Registered了!
        
        
―――――――――――――――――――――――――――――――――    
                                
         ,     _/ 
        /| _.-~/            _     ,        青春都一晌
       ( /~   /              ~-._ |
       `\  _/                   ~ )          忍把浮名 
   _-~~~-.)  )__/;;,.          _  //'
  /'_,   --~    ~~~-  ,;;___(  (.-~~~-.        換了破解輕狂
 `~ _( ,_..-- (     ,;'' /    ~--   /._` 
  /~~//'   /' `~         ) /--.._, )_  `~
  "  `~"  "      `"      /~'`    `\~~   
                         "     "   "~'  ""

    

     Cracked By 巢水工作坊――fly [OCN][FCG][NUKE][DCM]

                2004-03-16  16:16



相關文章