2024安卓app逆向與安全防護(hù)_第1頁(yè)
2024安卓app逆向與安全防護(hù)_第2頁(yè)
2024安卓app逆向與安全防護(hù)_第3頁(yè)
2024安卓app逆向與安全防護(hù)_第4頁(yè)
2024安卓app逆向與安全防護(hù)_第5頁(yè)
已閱讀5頁(yè),還剩130頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

安卓app逆向與安全防護(hù)目錄1.課程目標(biāo)2.市場(chǎng)狀況3.逆向工具使用4.加解密基礎(chǔ)5.協(xié)議分析6.app殼7.安全防護(hù)1.學(xué)會(huì)什么以及如何學(xué)習(xí)2.移動(dòng)領(lǐng)域安卓方向的app市場(chǎng)的安全狀況3.逆向工具的介紹與使用4.常見(jiàn)加解密與壓縮算法5.App的網(wǎng)絡(luò)協(xié)議分析技巧6.常見(jiàn)app加固廠商脫殼方法研究7.如何編寫(xiě)更安全的app課程目標(biāo)1.什么是逆向工程2.為什么要學(xué)習(xí)安卓逆向3.如何學(xué)習(xí)安卓逆向4.如何學(xué)習(xí)其它平臺(tái)的逆向工程技術(shù)什么是逆向工程來(lái)自維基百科的定義:https:///zh-hans/逆向工程逆向工程(又稱(chēng)反向工程),是一種技術(shù)過(guò)程,即對(duì)一項(xiàng)目標(biāo)產(chǎn)品進(jìn)行逆向分析及研究,從而演繹并得出該產(chǎn)品的處理流程、組織結(jié)構(gòu)、功能性能規(guī)格等設(shè)計(jì)要素,以制作出功能相近,但又不完全一樣的產(chǎn)品。逆向工程源于商業(yè)及軍事領(lǐng)域中的硬件分析。其主要目的是,在不能輕易獲得必要的生產(chǎn)信息下,直接從成品的分析,推導(dǎo)出產(chǎn)品的設(shè)計(jì)原理。逆向工程可能會(huì)被誤認(rèn)為是對(duì)知識(shí)產(chǎn)權(quán)的嚴(yán)重侵害,但是在實(shí)際應(yīng)用上,反而可能會(huì)保護(hù)知識(shí)產(chǎn)權(quán)所有者。例如在集成電路領(lǐng)域,如果懷疑某公司侵犯知識(shí)產(chǎn)權(quán),可以用逆向工程技術(shù)來(lái)尋找證據(jù)。對(duì)最終程序的二進(jìn)制代碼所進(jìn)行的逆向工程被稱(chēng)為“代碼反向工程”,或簡(jiǎn)稱(chēng)RCE(ReverseCodeEngineering)。為什么要學(xué)習(xí)安卓逆向逆向技術(shù)常見(jiàn)的應(yīng)用場(chǎng)景app安全審查系統(tǒng)漏洞挖掘惡意代碼殺查同行業(yè)競(jìng)品技術(shù)原理分析移除安全機(jī)制如何學(xué)習(xí)安卓逆向知識(shí)點(diǎn)Java基礎(chǔ)(JCA、JSSE)文件格式(DEX、OAT、ELF、Smali、resources.arsc)Smali閱讀、arm反匯編閱讀Apktool、smali/baksmali、enjarify、android-classyshark、jadx、JD-GUI、BytecodeViewer、AndroidKiller的使用JEB、jdb、AndroidStudio/IntellijIDEA、gdb、IDAPro的使用如何學(xué)習(xí)其它平臺(tái)的逆向工程技術(shù)需要掌握的技能表操作系統(tǒng)的安全架構(gòu)操作系統(tǒng)中可執(zhí)行文件格式反匯編工具的使用反匯編代碼的閱讀理解調(diào)試器的使用網(wǎng)絡(luò)抓包工具的使用加解密知識(shí)市場(chǎng)狀況1.安卓App安全形勢(shì)2.安卓系統(tǒng)安全形勢(shì)3.安卓逆向工程師市場(chǎng)需求安卓App安全形勢(shì)阿里移動(dòng)安全漏洞年報(bào)安卓系統(tǒng)安全形勢(shì)阿里移動(dòng)安全漏洞年報(bào)安卓逆向工程師市場(chǎng)需求看雪論壇招聘專(zhuān)區(qū)逆向工具使用1.反編譯工具

Apktool/Shakaapktool、smali/baksmali、dex2jar、enjarify2.靜態(tài)分析工具

android-classyshark、jadx、JD-GUI、BytecodeViewer、AndroidKiller的使用3.動(dòng)態(tài)調(diào)試工具 JEB、jdb、AndroidStudio/IntellijIDEA、gdb、IDAPro的使用4.Hook框架 Cydia

Substrate、Xposed、adbi、Frida等。5.沙盒環(huán)境

DroidBox

反編譯工具Apktool

/iBotPeaches/apktool/Shakaapktool

/shakaapktool/為什么選擇Shakaapktool?Shaka(沙加,黃金圣斗士之一)處女座沙加(SHAKA):被譽(yù)為最接近神的圣斗士,平時(shí)閉著雙眼,但當(dāng)他張開(kāi)眼睛時(shí),其力量會(huì)大為增加,并使出天舞寶輪,奪去敵人的五感。反編譯工具Shakaapktool

/shakaapktool/增強(qiáng)功能:反編譯工具Shakaapktool

/shakaapktool/對(duì)抗反反編譯:反編譯工具Shakaapktool

/shakaapktool/修正官方Bug:反編譯工具smali/baksmalihttps:///JesusFreke/smali安卓反匯編的基石Smali反匯編Smali動(dòng)態(tài)調(diào)試->smalideaSmali->Dex/Dex->Smali/Odex->Dex反編譯工具smali/baksmalihttps:///JesusFreke/smaliDex字節(jié)碼:https:///devices/tech/dalvik/dalvik-bytecode.htmlDex文件格式:https:///devices/tech/dalvik/dex-format.htmlSmali動(dòng)態(tài)調(diào)試:https:///JesusFreke/smali/wiki/smalideaSmali寄存器與參數(shù)傳遞:https:///JesusFreke/smali/wiki/Registers反編譯工具Dex2jar

https:///pxb1988/dex2jarEnjarify

https:///google/enjarify反編譯工具Dex2jar

https:///pxb1988/dex2jarEnjarify

https:///google/enjarifyVS反編譯工具AndroidCrackTool/thread-1194-1-1.htmlAndroid逆向助手http:///kgdiwss靜態(tài)分析工具JD-GUIhttp://jd.benow.ca/靜態(tài)分析工具android-classyshark

https:///google/android-classyshark靜態(tài)分析工具jadx

https:///skylot/jadx靜態(tài)分析工具BytecodeViewerhttps:///Konloch/bytecode-viewer靜態(tài)分析工具AndroidKiller動(dòng)態(tài)調(diào)試工具DalvikDebuggerjdbadbshellamstart-D-ncom.droider.crackme0201/.MainActivitymonitorjdb-connectcom.sun.jdi.SocketAttach:port=8700,hostname=methodscom.tencent.crackme0201.MainActivitystopincom.droider.crackme0201.MainActivity.checkSN(java.lang.String,java.lang.String)wherestepstepsteplocalsdumpthis動(dòng)態(tài)調(diào)試工具DalvikDebuggerAndroidStudio/IntellijIDEA+smalidea/JesusFreke/smali/wiki/smalidea動(dòng)態(tài)調(diào)試工具NativeDebuggergdbgdb:~/Library/Android/android-ndk-r12b/prebuilt/darwin-x86_64/bin/gdbgdbserver:~/Library/Android/android-ndk-r12b/prebuilt/android-arm/gdbserver動(dòng)態(tài)調(diào)試工具NativeDebuggergdbgdbserver:3333--attachpidorgdbserver:3333/data/local/tmp/xxx/*android_gdb#!/bin/sh~/Library/Android/android-ndk-r12b/prebuilt/darwin-x86_64/bin/gdb"$@”*/adbforwardtcp:3333tcp:3333android_gdb/xxx(gdb)targetremote:3333(gdb)setdisassemble-nexton(gdb)break*xxx(gdb)layoutasm(gdb)layoutregs(gdb)c...動(dòng)態(tài)調(diào)試工具NativeDebuggergdb+AffinicDebugger動(dòng)態(tài)調(diào)試工具NativeDebuggerlldb+ds2/facebook/ds2動(dòng)態(tài)調(diào)試工具DalvikDebugger+NativeDebuggerJEB2https://動(dòng)態(tài)調(diào)試工具DalvikDebugger+NativeDebuggerIDAProHook框架JEB2監(jiān)聽(tīng)調(diào)試事件Hook框架CydiaSubstratehttp://DumpDex:https:///WooyunDota/DumpDexHook框架Xposed

https:///rovo89/Xposed最為強(qiáng)大的安卓Java層Hook框架1.Apk方法Hook2.系統(tǒng)方法Hook3.系統(tǒng)資源修改4.系統(tǒng)增強(qiáng)補(bǔ)丁Hook框架Xposed

https:///rovo89/Xposed最為強(qiáng)大的安卓Java層Hook框架1.Apk方法Hook

publicvoidhookMethod(ClassLoaderclassLoader){

try{

XposedBridge.log("nowhookcrypt...");

Class<?>clzAC=XposedHelpers.findClass("com.cxx.b.ac",classLoader); XposedBridge.hookAllMethods(clzAC,"h",newHookedMD5Method()); }catch(Throwablet){

XposedBridge.log(t);

}}publicstaticclassHookedMD5MethodextendsXC_MethodHook{

@Override

protectedvoidafterHookedMethod(MethodHookParamparam)throwsThrowable{

CommLog.e(TAG,"after"+param.method.getName()+"...");

Stringr0=(String)param.args[0]; Stringret=(String)param.getResult();

Stringpre=param.method.getName(); CommLog.e(TAG,pre+"data:"+r0); CommLog.e(TAG,pre+"ret:"+ret); super.afterHookedMethod(param);

}}微信搶紅包?聊天消息防撤回?/fkzhang/WechatUnrecalledHook框架Xposed

https:///rovo89/Xposed最為強(qiáng)大的安卓Java層Hook框架2.系統(tǒng)方法Hookhttps:///AndroidKnife/XposedDebughttps:///rovo89/XposedInstallerHook框架Xposed

https:///rovo89/Xposed最為強(qiáng)大的安卓Java層Hook框架3.系統(tǒng)資源修改http:///module-overviewHook框架Xposed

https:///rovo89/Xposed最為強(qiáng)大的安卓Java層Hook框架4.系統(tǒng)增強(qiáng)補(bǔ)丁AppSettings:https:///rovo89/XposedAppSettingsXprivacy:https:///M66B/XPrivacyNekoSMS

https:///apsun/NekoSMS…...Hook框架adbi

https:///crmulliner/adbi鷹眼https:///MindMac/AndroidEagleEyeHook框架Fridahttps:///frida/fridaHookNative,打印調(diào)用參數(shù)HookJava:加解密基礎(chǔ)1.安卓中的JCA與JSSE2.對(duì)稱(chēng)加密3.非對(duì)稱(chēng)加密4.數(shù)字證書(shū)5.算法工具安卓中的JCA與JSSEJCA(JavaCryptographyArchitecture)設(shè)計(jì)原則:1.實(shí)現(xiàn)的獨(dú)立性與互用性2.算法的獨(dú)立性與擴(kuò)展性實(shí)現(xiàn)的獨(dú)立性-使用密碼學(xué)服務(wù)(cryptographicservices),加密解密、數(shù)字

簽名、數(shù)據(jù)摘要等算法的實(shí)現(xiàn)都基于這些概念。算法的獨(dú)立性-使用基于provider的架構(gòu),

CryptographicServiceProvider(CSP)

必須實(shí)現(xiàn)一個(gè)或多個(gè)密碼學(xué)服務(wù)。實(shí)現(xiàn)的互用性-每個(gè)實(shí)現(xiàn)能夠協(xié)同合作,如密鑰的使用、簽名的驗(yàn)證,對(duì)于同一

個(gè)算法而言,

providerA生成的密鑰要能被providerB使用,

providerA生成的簽名要能被providerB驗(yàn)證。算法的擴(kuò)展性-新算法要易于添加。安卓中的JCA與JSSECSP(

CryptographicServiceProviders)MessageDigestmd=MessageDigest.getInstance("MD5");MessageDigestmd=MessageDigest.getInstance("MD5","ProviderC");安卓中的JCA與JSSECSP(

CryptographicServiceProviders)Provider[]providers=java.security.Security.getProviders();for(Providerp:providers){ System.out.printf("%s/%s/%f\n",p.getName(),p.getInfo(),p.getVersion()); Set<Provider.Service>services=p.getServices(); for(Provider.Services:services){ System.out.printf("\t%s/%s/%s\n",s.getType(), s.getAlgorithm(),s.getClassName()); }}Android中的Provider安卓中的JCA與JSSECSP(

CryptographicServiceProviders)Android中的ProviderAndroid4.4:AndroidOpenSSL/Android'sOpenSSL-backedsecurityprovider/1.000000DRLCertFactory/ASN.1,DER,PkiPath,PKCS7/1.000000BC/BouncyCastleSecurityProviderv1.49/1.490000Crypto/HARMONY(SHA1digest;SecureRandom;SHA1withDSAsignature)/1.000000HarmonyJSSE/HarmonyJSSEProvider/1.000000AndroidKeyStore/AndroidKeyStoresecurityprovider/1.000000Android6.0.1:AndroidOpenSSL/Android'sOpenSSL-backedsecurityprovider/1.000000AndroidKeyStoreBCWorkaround/AndroidKeyStoresecurityprovidertoworkaroundBC/1.000000BC/BouncyCastleSecurityProviderv1.52/1.520000Crypto/HARMONY(SHA1digest;SecureRandom;SHA1withDSAsignature)/1.000000HarmonyJSSE/HarmonyJSSEProvider/1.000000AndroidKeyStore/AndroidKeyStoresecurityprovider/1.000000AndroidN:Deprecated?http:///2016/06/security-crypto-provider-deprecated-in.html安卓中的JCA與JSSESPI(ServiceProviderInterface)JCA主要的API:引擎類(lèi)與算法:加解密操作、密鑰與算法參數(shù)轉(zhuǎn)換、對(duì)象高層表示Providers中的接口通過(guò)SPI定義。Signature

->SignatureSpiCipher->CipherSpiJCA主要的API:核心類(lèi)與接口:安卓中的JCA與JSSESPI(ServiceProviderInterface)安全相關(guān)的API:java.securityjavax.cryptojava.security.certjava.security.specjavax.crypto.specerfaceserfacesimportjavax.crypto.*;Cipherc=Cipher.getInstance("AES");c.init(ENCRYPT_MODE,key);安卓中的JCA與JSSEKeyStore密鑰存儲(chǔ)KeyStore類(lèi)型:1.jks。SunJCE

Provider提供,安卓中無(wú)法使用。2.bks。BCProvider提供,安卓默認(rèn)支持。3.pkcs12。JDKPKCS12KeyStore,BCProvider提供,安卓默認(rèn)支持。4.dks。Domain

KeyStore。不常用。bks:pkcs12:安卓中的JCA與JSSEJSSE(JavaSecureSocketExtension)JSSE的用途:為Java版本的SSL(SecureSocketsLayer

)與

TLS(TransportLayerSecurity)提供框架實(shí)現(xiàn)。JSSE標(biāo)準(zhǔn)API:1.ServerSocketFactory、SocketFactory2.非阻塞引擎用于處理SSL/TLS數(shù)據(jù)流(SSLEngine)3.創(chuàng)建套接字、服務(wù)套接字、SSL服務(wù)套接字以及使用的類(lèi)4.套接字的類(lèi)表示:安全套接字上下文類(lèi)、安全工廠類(lèi)與引擎類(lèi)5.密鑰與信任管理器接口(X509KeyManager、X509TrustManager)安卓JSSE中的Provider:HarmonyJSSEProvider:舊版本使用,代碼基于Java實(shí)現(xiàn)。OpenSSLProvider:新版本使用,代碼基于JNINative調(diào)用。安卓中的JCA與JSSE安卓中的證書(shū)綁定(CertPinning)https:///training/articles/security-ssl.html安卓中的JCA與JSSE繞過(guò)證書(shū)綁定!?。。˙reakingCertPinning)Hook繞過(guò)基于Xposed:JustTrustMehttps:///Fuzion24/JustTrustMe基于Substrate:Android-SSL-TrustKillerhttps:///iSECPartners/Android-SSL-TrustKiller對(duì)稱(chēng)加密Cipher類(lèi)algorithm/mode/paddingalgorithm:算法。AES、DES、DESede等。mode:分組模式。ECB、CBC、CFB、OFB、CTR等。padding:填充模式。PKCS5Padding、PKCS7Padding、NoPadding、ZeroPadding對(duì)稱(chēng)加密常見(jiàn)的對(duì)稱(chēng)加密算法非對(duì)稱(chēng)加密Cipher類(lèi)algorithm/mode/paddingalgorithm:算法。RSA、DSA等。mode:分組模式。ECB。padding:填充模式。PKCS1Padding、NoPadding非對(duì)稱(chēng)加密公鑰與私鑰存儲(chǔ)格式:DER(DistinguishedEncodingRules):區(qū)分編碼規(guī)則。二進(jìn)制格式,記錄的第一個(gè)字段信息是一個(gè)

ASN.1(AbstractSyntaxNotationOne)對(duì)象。DER可用于編碼公鑰、私鑰與證書(shū)。PEM(PrivacyEnhancedMail):保密郵件的編碼標(biāo)準(zhǔn)。信息轉(zhuǎn)換為ASCII碼或其他編碼,使用BASE64對(duì)

加密后的信息進(jìn)行編碼。DER可用于編碼公鑰、私鑰與證書(shū)。XML:一些密碼學(xué)的庫(kù)支持使用XML保存公鑰與私鑰信息。存儲(chǔ)規(guī)范:PKCS#1:RSAPublic/PrivateKeyfile。Java默認(rèn)支持。PKCS#8:Public/PrivateKeyfile。OpenSSL默認(rèn)支持。ASN.1git:///libtasn1.git非對(duì)稱(chēng)加密公鑰與私鑰-DERwithPKCS#1DERPrivateKey:

DERPublicKey:

->->非對(duì)稱(chēng)加密公鑰與私鑰-DER

withPKCS#8DERPrivateKey:

DERPublicKey:

->->非對(duì)稱(chēng)加密公鑰與私鑰-PEMwithPKCS#1PEMPrivateKey:

PEMPublicKey:

非對(duì)稱(chēng)加密公鑰與私鑰-PEMwithPKCS#8PEMPrivateKey:

PEMPublicKey:

非對(duì)稱(chēng)加密公鑰與私鑰-XMLXMLPrivateKey:

PEMPublicKey:

數(shù)字證書(shū)什么是數(shù)字證書(shū)?數(shù)字證書(shū)是一個(gè)經(jīng)證書(shū)授權(quán)中心數(shù)字簽名的包含公開(kāi)密鑰擁有者信息以及公開(kāi)密鑰的文件。最簡(jiǎn)單的證書(shū)包含一個(gè)公開(kāi)密鑰、名稱(chēng)以及證書(shū)授權(quán)中心的數(shù)字簽名。數(shù)字證書(shū)還有一個(gè)重要的特征就是只在特定的時(shí)間段內(nèi)有效。簡(jiǎn)單的說(shuō):在密碼學(xué)領(lǐng)域,數(shù)字證書(shū)就是帶有數(shù)字簽名的公鑰!存儲(chǔ)格式:DER(DistinguishedEncodingRules):區(qū)分編碼規(guī)則。二進(jìn)制格式,記錄的第一個(gè)字段信息是一個(gè)

ASN.1(AbstractSyntaxNotationOne)對(duì)象。DER可用于編碼公鑰、私鑰與證書(shū)。PEM(PrivacyEnhancedMail):保密郵件的編碼標(biāo)準(zhǔn)。信息轉(zhuǎn)換為ASCII碼或其他編碼,使用BASE64對(duì)

加密后的信息進(jìn)行編碼。DER可用于編碼公鑰、私鑰與證書(shū)。存儲(chǔ)規(guī)范:X509:安卓系統(tǒng)大量使用的證書(shū)規(guī)范。目前使用v3版本。PKCS#7:.p7c格式結(jié)尾。PEM存儲(chǔ)的話,會(huì)以“-----BEGINPKCS7-----”

和“-----ENDPKCS7-----”

做頭尾標(biāo)記,存儲(chǔ)證書(shū)鏈與單個(gè)證書(shū)。PKCS#12:.pfx或.p12格式結(jié)尾。可存儲(chǔ)證書(shū)、私鑰及公鑰。數(shù)字證書(shū)X509

PEM證書(shū)->數(shù)字證書(shū)X509證書(shū)算法工具JCrypTool/CrypToolhttp://算法工具openssl/openssl/opensslecho-n"hello"|opensslaes-128-cbc-a-e-Ke0e0e0e0f1f1f1f1e0e0e0e0f1f1f1f1-ive0e0e0e0f1f1f1f1e0e0e0e0f1f1f1f1tv611lW0N+HKtQi+ysr2TQ==算法工具RECalcTool協(xié)議分析1.網(wǎng)絡(luò)抓包2.數(shù)據(jù)包分析與識(shí)別3.日志分析4.代碼分析與算法識(shí)別5.Hook輸出或動(dòng)態(tài)調(diào)試6.測(cè)試結(jié)果網(wǎng)絡(luò)抓包抓包工具:Http/Socket抓包:tcpdump:adbshelltcpdump-p-vv-s0-w/sdcard/capture.pcaptcpdump->WireSharkHttp/Https抓包:Fiddler、Burpsuite、Charles1.手機(jī)導(dǎo)入FakeCert.crt2.抓包工具配置Https代理3.手機(jī)設(shè)置代理服務(wù)器4.手機(jī)HookBreakingSSLPinning5.抓包測(cè)試網(wǎng)絡(luò)抓包Http/Https抓包配置1234數(shù)據(jù)包分析與識(shí)別通信協(xié)議Socket數(shù)據(jù)格式紅色與綠色部分:對(duì)應(yīng)的部分是固定值,猜測(cè)是協(xié)議的固定字段部分。黑色部分:應(yīng)該是通信的真正數(shù)據(jù),數(shù)據(jù)的長(zhǎng)度為16字節(jié)的整數(shù)倍,猜測(cè)是使用對(duì)稱(chēng)或非對(duì)稱(chēng)加密,而通信傳輸一般使用對(duì)稱(chēng)加密,故猜測(cè)此處使用對(duì)稱(chēng)加密,接下來(lái)需要反編譯代碼,驗(yàn)證猜測(cè),找到密鑰與算法。數(shù)據(jù)包分析與識(shí)別通信協(xié)議RESTorSOAP?數(shù)據(jù)格式JSONapplication/octet-stream??常見(jiàn)的壓縮算法常見(jiàn)壓縮算法數(shù)據(jù)頭部:gzip1F8B08zip504B(PK)rar52617221(Rar!)zlib789clzma6c00lz404224Dapplication/octet-stream??1F8B08->gzip日志分析App日志輸出自帶了日志輸出但默認(rèn)關(guān)閉默認(rèn)開(kāi)啟日志輸出日志分析過(guò)時(shí)的方法-Smali注入針對(duì)日志輸出語(yǔ)句被移除,但日志框架保留代碼分析與算法識(shí)別IDAPro+FindCrypt2Rijndael

S-boxAESInit代碼分析與算法識(shí)別AES_cbc_encryptwithPKCS5paddingPKCS5Padding有如下特點(diǎn):1.填充的字節(jié)都是一個(gè)相同的字節(jié)。2.該字節(jié)的值,就是要填充的字節(jié)的個(gè)數(shù)。如果要填充8個(gè)字節(jié),那么填充的字節(jié)的值就是0×8;要填充7個(gè)字節(jié),那么填入的值就是0×7;…如果只填充1個(gè)字節(jié),那么填入的值就是0×1;PKCS5Padding與PKCS7Padding的區(qū)別:前者只作用于塊大小為64字節(jié)的數(shù)據(jù),后者沒(méi)有此限制。代碼分析與算法識(shí)別CBC(密碼分組鏈接模式)CBC模式原理代碼分析與算法識(shí)別RSA/ECB/PKCS1Padding

PKCS1Padding填充規(guī)則代碼分析與算法識(shí)別RSA

1024自定義Padding長(zhǎng)度12,默認(rèn)11,數(shù)據(jù)長(zhǎng)117字節(jié)Hook輸出或動(dòng)態(tài)調(diào)試Hook:測(cè)試結(jié)果測(cè)試報(bào)告破解效果代碼還原App殼1.簡(jiǎn)述脫殼前學(xué)習(xí)的知識(shí)、殼的歷史、脫殼方法2.第一代殼3.第二代殼4.第三代殼5.第N代殼簡(jiǎn)述1.Apk文件結(jié)構(gòu)2.Dex文件結(jié)構(gòu)3.殼史4.殼的識(shí)別Apk文件結(jié)構(gòu)文件或目錄作用META-INF/也就是一個(gè)

manifest

,從

javajar

文件引入的描述包信息的目錄res/存放資源文件的目錄lib/如果存在的話,存放的是

ndk

編出來(lái)的

so

庫(kù)AndroidManifest.xml程序全局配置文件classes.dex最終生成的

dalvik

字節(jié)碼resources.arsc編譯后的二進(jìn)制資源文件Dex文件結(jié)構(gòu)殼史第一代殼Dex加密

1.Dex字符串加密 2.資源加密 3.對(duì)抗反編譯

4.反調(diào)試 5.自定義DexClassLoader第二代殼Dex抽取與So加固

1.對(duì)抗第一代殼常見(jiàn)的脫殼法

1.DexMethod代碼抽取到外部(通常企業(yè)版) 2.Dex動(dòng)態(tài)加載 3.So加密第三代殼Dex動(dòng)態(tài)解密與So混淆

1.DexMethod代碼動(dòng)態(tài)解密

2.So代碼膨脹混淆 3.對(duì)抗之前出現(xiàn)的所有脫殼法第四代殼armvmp(未來(lái))

1.vmp殼的識(shí)別娜迦:libchaosvmp.so,libddog.solibfdog.so愛(ài)加密:libexec.so,libexecmain.so梆梆:libsecexe.so,libsecmain.so,libDexHelper.so360:libprotectClass.so,libjiagu.so通付盾:libegis.so網(wǎng)秦:libnqshield.so百度:libbaiduprotect.so常用加固廠商特征殼的識(shí)別基于特征的識(shí)別代碼第一代殼1.內(nèi)存Dump法2.文件監(jiān)視法3.Hook法4.定制系統(tǒng)5.動(dòng)態(tài)調(diào)試法內(nèi)存Dump法內(nèi)存中尋找dex.035或者dex.036/proc/xxx/maps中查找后,手動(dòng)Dump內(nèi)存Dump法內(nèi)存中尋找dex.035或者dex.036android-unpacker/strazzere/android-unpacker內(nèi)存Dump法內(nèi)存中尋找dex.035或者dex.036drizzleDumper

/DrizzleRisk/drizzleDumper升級(jí)版的android-unpacker,read和lseek64代替pread,匹配dex代替匹配odex內(nèi)存Dump法IDAPro+dumpDEXdumpDex/CvvT/dumpDex文件監(jiān)視法Dex優(yōu)化生成odexinotifywait-for-Android/mkttanabe/inotifywait-for-Android監(jiān)視文件變化文件監(jiān)視法Dex優(yōu)化生成odexinotifywait-for-Android/mkttanabe/inotifywait-for-Android監(jiān)視DexOpt輸出Hook法HookdvmDexFileOpenPartial/4.4_r1/xref/dalvik/vm/DvmDex.cppHook法HookdvmDexFileOpenPartial定制系統(tǒng)修改安卓源碼并刷機(jī)定制系統(tǒng)DumpApk/CvvT/DumpApk只針對(duì)部分殼動(dòng)態(tài)調(diào)試法IDAPro動(dòng)態(tài)調(diào)試法gdbgcore法.gdbserver:1234–attachpid.gdb(gdb)targetremote:1234(gdb)gcorecoredump文件中搜索“dex.035”第二代殼1.內(nèi)存重組法2.Hook法3.動(dòng)態(tài)調(diào)試4.定制系統(tǒng)5.靜態(tài)脫殼機(jī)內(nèi)存重組法Dex篇ZjDroid/showthread.php?t=190494內(nèi)存重組法Dex篇ZjDroid/showthread.php?t=190494對(duì)付一切內(nèi)存中完整的dex,包括殼與動(dòng)態(tài)加載的jar內(nèi)存重組法so篇elfrebuild內(nèi)存重組法so篇elfrebuild構(gòu)造soinfo,然后對(duì)其進(jìn)行重建Hook法針對(duì)無(wú)代碼抽取且HookdvmDexFileOpenPartial失敗

HookdexFileParse/4.4_r1/xref/dalvik/vm/DvmDex.cppHook法針對(duì)無(wú)代碼抽取且HookdvmDexFileOpenPartial失敗

HookdexFileParse/WooyunDota/DumpDexHook法針對(duì)無(wú)代碼抽取且HookdexFileParse失敗Hookmemcmp/4.4_r1/xref/dalvik/vm/DvmDex.cppHook法針對(duì)無(wú)代碼抽取且HookdexFileParse失敗Hookmemcmp定制系統(tǒng)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論