老妖的 C32Asm V0.4.12 脫殼+修復+破解
標 題:老妖的 C32Asm V0.4.12 脫殼+修復+破解
發信人:fly
時 間:2004-1-21 週三, 下午7:49
詳細資訊:
下載地址: http://www.c32asm.com/download/c32asm.rar
升級日期: 2004年1月17日
軟體大小: 2 M
軟體語言: 中文
應用平臺: Win9x/NT/2000/XP
【軟體簡介】:1.hex編輯功能增加使用檔案對映選項,功能用於快速開啟大的檔案,但是缺點是獨佔模式也就是開啟檔案後其他程式不能對這個檔案操作,如果你家記憶體夠大而且想在hex編輯的時候還可以執行這個檔案那麼就關掉這個。 2.修正彙編查詢器的bug。 3.hex編輯功能增加自動適應基址選項,功能用於從hex狀態切換到彙編狀態的時候自動根據pe檔案的基址填充彙編狀態時候的基址(此功能會在第一次切換的時候消耗更多的時間(我的p42.4多消耗了0.01秒),自己看著辦是否選上)。 4.修正dump功能的一些錯誤,更好的dump相容性,如果發現不能dump的檔案請在c32asm論壇報告出來,我會及時處理的。 5.hex部分儲存備份時候能建立b00-b99個備份檔案和提示建立備份檔案功能(可以在hex的通用選單關閉此功能)。 6.開放了多語言的功能。 7.更改了一下版本命名的方法,加入了編譯日期。 8.祝大家新年愉快。
【作者宣告】:只是感興趣,沒有其他目的。失誤之處敬請諸位大俠賜教!
【除錯環境】:WinXP、Ollydbg1.09、PEiD、LordPE、ImportREC
―――――――――――――――――――――――――――――――――
【脫殼過程】:
一、尋找OEP
老規矩:用IsDebug 1.4外掛去掉Ollydbg的偵錯程式標誌。忽略除了“記憶體訪問異常”之外的所有其他異常選項。
00401000 68 01406300 push C32Asm.00634001//進入OD後停在這!
00401005 E8 01000000 call C32Asm.0040100B
0040100A C3 retn
F9執行,程式會中斷在異常處,Shift+F9透過異常
00FA9CB5 3100 xor dword ptr ds:[eax],eax//最後1次異常
00FA9CB7 64:8F05 00000000 pop dword ptr fs:[0]
00FA9CBE 58 pop eax
00FA9CBF 833D C4E7FA00 00 cmp dword ptr ds:[FAE7C4],0
00FA9CC6 74 14 je short 00FA9CDC
00FA9CC8 6A 0C push 0C
00FA9CCA B9 C4E7FA00 mov ecx,0FAE7C4
00FA9CCF 8D45 F8 lea eax,dword ptr ss:[ebp-8]
00FA9CD2 BA 04000000 mov edx,4
00FA9CD7 E8 6075FFFF call 00FA123C
00FA9CDC FF75 FC push dword ptr ss:[ebp-4]
00FA9CDF FF75 F8 push dword ptr ss:[ebp-8]
00FA9CE2 8B45 F4 mov eax,dword ptr ss:[ebp-C]
00FA9CE5 8338 00 cmp dword ptr ds:[eax],0
00FA9CE8 74 02 je short 00FA9CEC
00FA9CEA FF30 push dword ptr ds:[eax]
00FA9CEC FF75 F0 push dword ptr ss:[ebp-10]
00FA9CEF FF75 EC push dword ptr ss:[ebp-14]
00FA9CF2 C3 retn//此處下斷,Shift+F9,斷在這!返回 00FCF6B4
00FCF6B4 81F7 DF3F8F20 xor edi,208F3FDF
00FCF6BA E8 11000000 call 00FCF6D0
用F7單步跟蹤,Why?因為偶想從中尋找Stolen Code
00FCF7A2 E9 2F000000 jmp 00FCF7D6//此處下斷,F9,斷在這,跳出迴圈!
00FCF7BF E9 3EFFFFFF jmp 00FCF702//迴圈
00FCF881 61 popad
00FCF882 EB 01 jmp short 00FCF885
00FCF8E6 896C24 04 mov dword ptr ss:[esp+4],ebp ★
00FCF902 8BEC mov ebp,esp ★
00FCF911 6A FF push -1 ★
00FCF997 68 CE354000 push 4035CE
00FCFA21 890424 mov dword ptr ss:[esp],eax ★
00FCFAAD 68 A0304A00 push 4A30A0
00FCFAB2 68 DC974700 push 4797DC
00FCFAB7 896C24 04 mov dword ptr ss:[esp+4],ebp ★
00FCFBF6 8903 mov dword ptr ds:[ebx],eax ★
00FCFBF8 58 pop eax ; C32Asm.005044C8
00FCFBF9 5B pop ebx
00FCFBFA 9D popfd
00FCFBFB EB 01 jmp short 00FCFBFE
00FCFBFE FF35 69F9FC00 push dword ptr ds:[FCF969] ; C32Asm.005044C8
00FCFC20 FF7424 04 push dword ptr ss:[esp+4] ; C32Asm.005044C8 ★
00FCFD33 B8 084D4400 mov eax,444D08
00FCFEE7 8903 mov dword ptr ds:[ebx],eax ; C32Asm.004CF5AA
00FCFEEF FF35 5AFCFC00 push dword ptr ds:[FCFC5A] ; C32Asm.004CF5AA ★
00FCFF02 64:A1 00000000 mov eax,dword ptr fs:[0] ★
00FCFF20 894424 04 mov dword ptr ss:[esp+4],eax ★
00FCFF24 F3: prefix rep:
00FCFF3C 64:8925 00000000 mov dword ptr fs:[0],esp ★
00FCFF50 83EC 68 sub esp,68 ★
00FCFF6B 895C24 04 mov dword ptr ss:[esp+4],ebx ★
00FCFF6F F3: prefix rep:
00FCFF70 EB 02 jmp short 00FCFF74
00FCFF92 897424 04 mov dword ptr ss:[esp+4],esi ★
00FCFF96 F3: prefix rep:
00FCFF97 EB 02 jmp short 00FCFF9B
00FCFFB9 897C24 04 mov dword ptr ss:[esp+4],edi ★
00FCFFBD F3: prefix rep:
00FCFFBE EB 02 jmp short 00FCFFC2
00FCFFD5 8965 E8 mov dword ptr ss:[ebp-18],esp ★
00FCFFE5 33DB xor ebx,ebx ★
00FCFFF4 895D FC mov dword ptr ss:[ebp-4],ebx ★
00FD0004 6A 02 push 2 ★
00FD0013 FF15 48664E00 call dword ptr ds:[4E6648]; msvcrt.__set_app_type ★
00FD0026 59 pop ecx ★
00FD0034 830D 681C5500 FF or dword ptr ds:[551C68],FFFFFFFF ★
00FD0048 830D 6C1C5500 FF or dword ptr ds:[551C6C],FFFFFFFF ★
00FD005C FF15 4C664E00 call dword ptr ds:[4E664C]; msvcrt.__p__fmode ★
00FD00C8 8908 mov dword ptr ds:[eax],ecx ★
00FD00D7 FF15 50664E00 call dword ptr ds:[4E6650] ; msvcrt.__p__commode ★
00FD011E FF3421 push dword ptr ds:[ecx]
00FD0135 59 pop ecx ; C32Asm.00551C48 ★
00FD0143 8908 mov dword ptr ds:[eax],ecx ★
00FD0152 A1 54664E00 mov eax,dword ptr ds:[4E6654] ★
00FD0164 8B00 mov eax,dword ptr ds:[eax] ★
00FD0173 A3 641C5500 mov dword ptr ds:[551C64],eax ★
00FD0185 68 D1F54C00 push 4CF5D1 ★
00FD018E C3 retn
00FD019F 391D 30B65300 cmp dword ptr ds:[53B630],ebx ★
00FD01A9 9C pushfd//結束
00FD01AA EB 01 jmp short 00FD01AD
00FD0382 8947 00 mov dword ptr ds:[edi],eax ; C32Asm.004CF48A//返回程式的地址
00FD0385 58 pop eax
00FD0386 5F pop edi
00FD0387 9D popfd
00FD0388 EB 01 jmp short 00FD038B
00FD038B FF35 B401FD00 push dword ptr ds:[FD01B4] ; C32Asm.004CF48A
00FD0391 68 E0F7FC00 push 0FCF7E0
00FD0396 C3 retn
00FCF7E3 51 push ecx
00FCF7E4 57 push edi
00FCF7E5 9C pushfd
00FCF7E6 FC cld
00FCF7E7 BF 24F8FC00 mov edi,0FCF824
00FCF7EC B9 5E280000 mov ecx,285E
00FCF7F1 F3:AA rep stos byte ptr es:[edi]//清掃戰場
00FCF7F3 9D popfd
00FCF7F4 5F pop edi
00FCF7F5 59 pop ecx
00FCF7F6 C3 retn //飛向光明之巔! 返回至 004CE74A
注意以上偶打★的程式碼,這些程式碼應該與 Stolen Code 有關!
―――――――――――――――――――――――――――――――――
二、補上OEP處的Stolen Code
參考以上打★的程式碼和曾經修復的C32Asm V0.1114的程式碼,偶修復的Stolen Code如下:
004CF415 55 push ebp//在這兒用LordPE糾正ImageSize後完全DUMP這個程式
004CF416 8BEC mov ebp,esp
004CF418 6A FF push -1
004CF41A 68 C8445000 push C32Asm.005044C8
004CF41F 68 AAF54C00 push C32Asm.004CF5AA
004CF424 64:A1 00000000 mov eax,dword ptr fs:[0]
004CF42A 50 push eax
004CF42B 64:8925 00000000 mov dword ptr fs:[0],esp
004CF432 83EC 68 sub esp,68
004CF435 53 push ebx
004CF436 56 push esi
004CF437 57 push edi
004CF438 8965 E8 mov dword ptr ss:[ebp-18],esp
004CF43B 33DB xor ebx,ebx
004CF43D 895D FC mov dword ptr ss:[ebp-4],ebx
004CF440 6A 02 push 2
004CF442 FF15 48664E00 call dword ptr ds:[4E6648] ; msvcrt.__set_app_type
004CF448 59 pop ecx
004CF449 830D 681C5500 FF or dword ptr ds:[551C68],FFFFFFFF
004CF450 830D 6C1C5500 FF or dword ptr ds:[551C6C],FFFFFFFF
004CF457 FF15 4C664E00 call dword ptr ds:[4E664C] ; msvcrt.__p__fmode
004CF45D 8B0D 4C1C5500 mov ecx,dword ptr ds:[551C4C]
004CF463 8908 mov dword ptr ds:[eax],ecx
004CF465 FF15 50664E00 call dword ptr ds:[4E6650] ; msvcrt.__p__commode
004CF46B 8B0D 481C5500 mov ecx,dword ptr ds:[551C48]
004CF471 8908 mov dword ptr ds:[eax],ecx
004CF473 A1 54664E00 mov eax,dword ptr ds:[4E6654]
004CF478 8B00 mov eax,dword ptr ds:[eax]
004CF47A A3 641C5500 mov dword ptr ds:[551C64],eax
004CF47F E8 4D010000 call C32Asm.004CF5D1
004CF484 391D 30B65300 cmp dword ptr ds:[53B630],ebx//上面這些位元組是補上的Stolen Code
004CF48A 75 0C jnz short C32Asm.004CF498//從殼中返回到這裡
004CF48C 68 CEF54C00 push C32Asm.004CF5CE
004CF491 FF15 58664E00 call dword ptr ds:[4E6658] ; msvcrt.__setusermatherr
004CF497 59 pop ecx
004CF498 E8 1F010000 call C32Asm.004CF5BC
004CF49D 68 0C415200 push C32Asm.0052410C
004CF4A2 68 08415200 push C32Asm.00524108
004CF4A7 E8 0A010000 call C32Asm.004CF5B6 ; jmp to msvcrt._initterm
―――――――――――――――――――――――――――――――――
三、修復輸入表
執行ImportREC,選擇這個程式。把OEP改為000CF415,RAV=000E5000,Size=00001904, 點IT AutoSearch,點“Get Import”,用“追蹤層次1”和“ASProtect 1.3 calculated imports”外掛修復全部的無效函式,FixDump。
―――――――――――――――――――――――――――――――――
四、消除暗樁
1、004480D6 處
004480D4 51 push ecx
004480D5 50 push eax//pll love phenix!
004480D6 FF15 58835300 call dword ptr ds:[538358]//異常 ①
004480DC E8 0D6A0800 call C32Asm.004CEAEE ; jmp to mfc42.#1205_AfxOleInit
跟進這個004480D6 call dword ptr ds:[538358]發現程式複製“pll love phenix”等字元,然後返回
00FA56AD 5E pop esi
00FA56AE 5B pop ebx
00FA56AF 5D pop ebp
00FA56B0 C2 0800 retn 8//返回 004480DC
Ctrl+F 在程式空間裡查詢命令:retn 8 隨便找一個吧:
0040167F C2 0800 retn 8
修改:把[538358]處的 FA5660 改為:0040167F
00538358 60 56 FA 00 //舊的指標
00538358 7F 16 40 00 //新的指標
――――――――――――――――――――――――
2、00448797 處
00448797 FF15 50835300 call dword ptr ds:[538350]//這裡對004487A8、0045F798處解碼
0044879D EB 08 jmp short C32Asm.004487A7
①、004487A8 處解碼:
004487A7 E9 01000000 jmp C32Asm.004487AD
004487AC EF out dx,eax
004487AD 8B4B 78 mov ecx,dword ptr ds:[ebx+78]
004487B0 51 push ecx
004487B1 8BCF mov ecx,edi
004487B3 E8 96600800 call C32Asm.004CE84E ; jmp to mfc42.#6215_CWnd::ShowWindow
//出現C32asm的介面
004487B8 8B57 20 mov edx,dword ptr ds:[edi+20]
004487BB 52 push edx
004487BC FF15 30674E00 call dword ptr ds:[4E6730] ; USER32.UpdateWindow
004487C2 8B47 20 mov eax,dword ptr ds:[edi+20]
004487C5 50 push eax
004487C6 FF15 2C674E00 call dword ptr ds:[4E672C] ; USER32.BringWindowToTop
004487CC C783 CC090000 01000>mov dword ptr ds:[ebx+9CC],1
004487D6 EB 04 jmp short C32Asm.004487DC
004487DC FF15 54835300 call dword ptr ds:[538354]
004487E2 EB 08 jmp short C32Asm.004487EC
②、0045F798 處解碼:
0045F797 E9 01000000 jmp C32Asm.0045F79D
0045F79C 228B 3DCCE653 and cl,byte ptr ds:[ebx+53E6CC3D]
0045F7A2 0033 add byte ptr ds:[ebx],dh
0045F7A4 C085 FF0F94C0 50 rol byte ptr ss:[ebp+C0940FFF],50
0045F7AB E8 E0220100 call C32Asm.00471A90
0045F7B0 A1 20D45300 mov eax,dword ptr ds:[53D420]
0045F7B5 83C4 04 add esp,4
0045F7B8 85C0 test eax,eax
0045F7BA 75 49 jnz short C32Asm.0045F805
0045F7BC 6A 01 push 1
0045F7BE 8BCE mov ecx,esi
0045F7C0 FF15 FC504E00 call dword ptr ds:[4E50FC]
; c32asm_1.CBCGPToolbarCustomize::EnableUserDefinedToolbars
0045F7C6 8B16 mov edx,dword ptr ds:[esi]
0045F7C8 8BCE mov ecx,esi
0045F7CA FF92 E0000000 call dword ptr ds:[edx+E0]
0045F7D0 EB 0A jmp short C32Asm.0045F7DC
0045F7D2 03CA add ecx,edx
0045F7D4 81C9 04000000 or ecx,4
0045F7DA 33C0 xor eax,eax
0045F7DC 8B06 mov eax,dword ptr ds:[esi]
0045F7DE 8BCE mov ecx,esi
0045F7E0 FF50 60 call dword ptr ds:[eax+60]
0045F7E3 EB 0A jmp short C32Asm.0045F7EF
0045F7E5 03CA add ecx,edx
0045F7E7 81C9 04000000 or ecx,4
0045F7ED 8BC3 mov eax,ebx
0045F7EF EB 04 jmp short C32Asm.0045F7F5
0045F7F1 625E 7C bound ebx,qword ptr ds:[esi+7C]
0045F7F4 E5 EB in eax,0EB
0045F7F6 08E7 or bh,ah
0045F7F8 CA B9E9 retf 0E9B9
修改:
①、當然是把解出的這些程式碼復進到脫殼後的程式啦
②、00448797 FF15 50835300 call dword ptr ds:[538350]// NOP 掉
――――――――――――――――――――――――
3、004487DC處
004487DC FF15 54835300 call dword ptr ds:[538354]//清除上面解出的2處程式碼
修改:
004487DC FF15 54835300 call dword ptr ds:[538354]//當然是 NOP 掉
―――――――――――――――――――――――――――――――――
4、檔案長度校驗
00448806 E8 61600800 call C32Asm.004CE86C; jmp to mfc42.#5186_CFile::Open
0044880B 85C0 test eax,eax
0044880D 0F84 91000000 je C32Asm.004488A4
00448813 8D4D CC lea ecx,dword ptr ss:[ebp-34]
00448816 E8 4B600800 call C32Asm.004CE866 ; jmp to mfc42.#3318_CFile::GetLength
0044881B 8D4D CC lea ecx,dword ptr ss:[ebp-34]
0044881E 8BF0 mov esi,eax
00448820 E8 2F600800 call C32Asm.004CE854 ; jmp to mfc42.#1979_CFile::Close
00448825 33C0 xor eax,eax
00448827 81FE 60E31600 cmp esi,16E360//原程式 ESI=000C1A00
0044882D 0F9CC0 setl al
00448830 85C0 test eax,eax
00448832 A3 68E85300 mov dword ptr ds:[53E868],eax
00448837 75 0C jnz short C32Asm.00448845
修改:
00448820 E8 2F600800 call <jmp.&mfc42.#1979>
00448825 33C0 xor eax,eax
00448827 BE 001A0C00 mov esi,0C1A00//呵呵,“騙”兩下 pll621 老大
0044882C 90 nop
0044882D B0 01 mov al,1//手動置1
0044882F 90 nop
00448830 85C0 test eax,eax
00448832 A3 68E85300 mov dword ptr ds:[53E868],eax
00448837 75 0C jnz short dumped_.00448845
――――――――――――――――――――――――
5、執行啦
73D3B4F3 85C0 test eax,eax
73D3B4F5 74 16 je short mfc42.73D3B50D
73D3B4F7 8B06 mov eax,dword ptr ds:[esi]
73D3B4F9 8BCE mov ecx,esi
73D3B4FB FF50 5C call dword ptr ds:[eax+5C]//RUN GO GO GO!
73D3B4FE 8BD8 mov ebx,eax
73D3B500 E8 D2BF0000 call mfc42.#1577_AfxWinTerm
73D3B505 5F pop edi
73D3B506 8BC3 mov eax,ebx
73D3B508 5E pop esi
73D3B509 5B pop ebx
73D3B50A C2 1000 retn 10
――――――――――――――――――――――――
6、C32ASM.INI
複製C32ASM.INI檔案,重新命名為和脫殼後程式相同的檔名.INI,否則沒有相應的INI檔案反彙編後程式碼不可顯示。
―――――――――――――――――――――――――――――――――
五、爆破功能限制
老妖 擔心嚇跑偶們,所以大大降低了C32Asm的破解難度,即使如此,想爆破也是很麻煩的;為了找到爆破點可真是費了番工夫。不知道 老妖 喝酒回來後會在下個版本中恢復多少變態陷阱,呵呵,太變態偶就不敢玩啦。 8D
1、啟用灰色選單
00447D33 C786 C8090000 01000>mov dword ptr ds:[esi+9C8],1//全域性標誌
修改:
00447D33 C786 C8090000 00000>mov dword ptr ds:[esi+9C8],0
――――――――――――――――――――――――
2、去掉“破壞”程式碼
老妖把“自定義”的功能執行程式碼挪到殼中,然後清除程式中的程式碼。
①、004873D6 F3:A5 rep movs dword ptr es:[edi],dword ptr ds:[esi]//NOP掉
②、004873E1 F3:A4 rep movs byte ptr es:[edi],byte ptr ds:[esi] //NOP掉
③、004874C9 F3:A5 rep movs dword ptr es:[edi],dword ptr ds:[esi]//NOP掉
④、004874D1 F3:A4 rep movs byte ptr es:[edi],byte ptr ds:[esi] //NOP掉
――――――――――――――――――――――――
3、去掉入殼的(異常)CALL
①、004487DC FF15 54835300 call dword ptr ds:[538354]//NOP掉
②、0045F7FF FF15 54835300 call dword ptr ds:[538354]//NOP掉
③、0045F787 FF15 50835300 call dword ptr ds:[538350]//NOP掉
在偶脫殼消除暗樁後爆破以上部分即可實現和註冊版同樣的功能啦。
感謝 pll621 老大!
今天是大年三十,祝大家☆☆春節快樂☆☆
―――――――――――――――――――――――――――――――――
, _/
/| _.-~/ _ , 青春都一餉
( /~ / ~-._ |
`\ _/ ~ ) 忍把浮名
_-~~~-.) )__/;;,. _ //'
/'_, --~ ~~~- ,;;___( (.-~~~-. 換了破解輕狂
`~ _( ,_..-- ( ,;'' / ~-- /._`
/~~//' /' `~ ) /--.._, )_ `~
" `~" " `" /~'` `\~~
" " "~' ""
Cracked By jingulong
Cracked By 巢水工作坊――fly [OCN][FCG][NUKE][DCM]
2004-01-21 00:00
相關文章
- 某殼分析+修復(二)2018-05-14
- upx手動脫殼2020-10-26
- 淺談被加殼ELF檔案的DUMP修復2020-08-19
- iOS逆向學習之五(加殼?脫殼?)2019-10-10iOS
- 一次簡單的脫殼2024-08-30
- 十、iOS逆向之《越獄砸殼/ipa脫殼》2021-03-18iOS
- 破解教程之手脫UPX的DLL2019-05-11
- Od跟進之脫殼(待完善)2018-10-20
- 教你如何寫UPX脫殼指令碼2019-05-11指令碼
- iOS應用程式的脫殼實現原理淺析2019-03-04iOS
- Android.Hook框架Cydia篇(脫殼機制作)2020-08-19AndroidHook框架
- 脫殼基礎知識以及簡單應用2019-06-17
- 從Android執行時出發,打造我們的脫殼神器2020-08-19Android
- 某IOT蠕蟲病毒分析之UPX脫殼實戰2018-04-11
- 一鍵“脫”衣應用DeepNude迅速下線,來看看它涉及的影像修復技術2020-04-06
- 逆向基礎——軟體手動脫殼技術入門2020-08-19
- 【開源】BlackDex,無需環境,Android新姿勢脫殼工具2021-05-27Android
- PrestaShop網站漏洞修復如何修復2019-01-02REST網站
- 高顏值——靈刃外殼的“金制”修養2019-08-13
- iZotope RX 10 for Mac破解版下載/安裝指南:音訊修復工具2023-10-26Mac音訊
- Android熱修復原理(一)熱修復框架對比和程式碼修復2018-03-13Android框架
- 修復IAT2024-08-14
- 怎麼修復網站漏洞騎士cms的漏洞修復方案2019-01-03網站
- WPS文件損壞如何修復?WPS文件損壞的修復方法2020-11-25
- 『學了就忘』Linux啟動引導與修復 — 74、Linux系統的修復模式(光碟修復模式)2021-12-10Linux模式
- 金蟬脫殼2百度雲免費線上觀看2018-06-23
- SQL Anywhere db檔案損壞修復 DB檔案修復 DB資料庫修復2020-11-05SQL資料庫
- 如何修復Java中的VirtualMachineError2019-01-28JavaMacError
- Android 熱修復2018-12-26Android
- Gitlab修復記2022-05-09Gitlab
- 騰訊安全ApkPecker上線DEX-VMP自動化脫殼服務2021-07-19APK
- 【阿里聚安全·安全週刊】全美警局已普遍擁有破解iPhone的能力|女黑客破解任天堂Switch,稱硬體漏洞無法修復2018-04-13阿里iPhone黑客
- 網站漏洞修復之圖片驗證碼的詳細修復方案2019-05-05網站
- 【漏洞修復通知】修復Apache Shiro認證繞過漏洞2022-11-24Apache
- Topaz Video AI 破解最新版4.0.7:mac電腦影片去噪、修復必備軟體2023-12-20IDEAIMac
- 沒有修復不了漏洞,只有修不成的工具人!2020-10-09
- win10自動修復無法修復你的電腦 華碩win10自動修復無法開機2022-07-31Win10
- 勒索病毒資料修復恢復2020-11-23
- 【Android 熱修復】美團Robust熱修復框架原理解析2021-10-08Android框架