版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
麥洛克菲移動(dòng)安全培訓(xùn)
第三課
開發(fā)技術(shù)友情提示上課時(shí)間請勿:--請將您手機(jī)改為“震動(dòng)”
避免在課室里使用手機(jī)--交談其他事宜--隨意進(jìn)出教室請勿在室內(nèi)吸煙上課時(shí)間歡迎:--提問題和積極回答問題--隨時(shí)指出授課內(nèi)容的不當(dāng)之處提綱基礎(chǔ)知識(shí)HOOK類型和種類注入注入問題權(quán)限管理
基礎(chǔ)知識(shí)此次講課主要是針對Android講解基礎(chǔ)知識(shí)Java和c相互調(diào)用Java調(diào)用cjni接口,兩種方式基礎(chǔ)知識(shí)Java和c相互調(diào)用Java調(diào)用cjni接口,兩種方式第2講已經(jīng)提到1.java_com_example_hellojni_HelloJni2.jni_onload注冊
接口調(diào)用C調(diào)用java,一種方式1.得到j(luò)ava虛擬機(jī)的環(huán)境變量env2.env->findName(“com.”)//根據(jù)名字得到類3.env->GetStaticMethodID(
cls,
"add",
"(II)I");
根據(jù)類名字得到 Dex加載
DexClassLoaderclassLoader=newDexClassLoader(dexInternalStoragePath.getAbsolutePath(),optimizedDexOutputPath.getAbsolutePath(),null,getClassLoader()); Classclass1=classLoader.loadClass("com.mtn.binder.HookIPhoneSubInfo");Methodmethod=class1.getMethod("hook",newClass[]{});method.invoke(class1,newObject[]{}); ELF文件格式Linux目標(biāo)文件有三種類型:–可重定位文件(RelocatableFile)包含適合于與其他目標(biāo)文件鏈接來創(chuàng)建可執(zhí)行文件或者共享目標(biāo)文件的代碼和數(shù)據(jù)。–可執(zhí)行文件(ExecutableFile)包含適合于執(zhí)行的一個(gè)程序,此文件規(guī)定了exec()如何創(chuàng)建一個(gè)程序的進(jìn)程映像。–共享目標(biāo)文件(SharedObjectFile)包含可在兩種上下文中鏈接的代碼和數(shù)據(jù)。首先鏈接編輯器可以將它和其它可重定位文件和共享目標(biāo)文件一起處理,生成另外一個(gè)目標(biāo)文件。其次,動(dòng)態(tài)鏈接器(DynamicLinker)可能將它與某個(gè)可執(zhí)行文件以及其它共享目標(biāo)一起組合,創(chuàng)建進(jìn)程映像。目標(biāo)文件全部是程序的二進(jìn)制表示,目的是直接在某種處理器上直接執(zhí)行。ELF格式文件目前是UNIX系統(tǒng)非常常見二進(jìn)制文件格式,ELF文件格式主要3大部分,ELF文件頭節(jié)區(qū)表,和節(jié)區(qū)。對于可執(zhí)行文件對應(yīng)的是段表,段。 ELF文件格式ELF格式
ELF文件格式
ELF文件格式
ELF文件格式節(jié)區(qū)相關(guān)信息
ELF文件格式節(jié)區(qū)信息sh_info,sh_link
ELF文件格式
ELF文件格式5、對于一個(gè)ELF目標(biāo)文件,通常都會(huì)有以下幾個(gè)節(jié)區(qū),可以通readelf–Stest.oSectionHeaders:[Nr]NameTypeAddrOffSizeESFlgLkInfAl[0]NULL0000000000000000000000000[1].textPROGBITS0000000000003400001100AX004[2].dataPROGBITS0000000000004800000000WA004[3].bssNOBITS0000000000004800000000WA004[4].commentPROGBITS0000000000004800002a00001[5].note.GNU-stackPROGBITS0000000000007200000000001[6].shstrtabSTRTAB0000000000007200004500001[7].symtabSYMTAB0000000000022000008010874[8].strtabSTRTAB000000000002a000000a00001 elf文件格式分析格式分析工具Hiewwinhex010editor Binder在Android系統(tǒng)中,每一個(gè)應(yīng)用程序都是由一些Activity(活動(dòng))和Service組成的,這些Activity和Service有可能運(yùn)行在同一個(gè)進(jìn)程中,也有可能運(yùn)行在不同的進(jìn)程中。不在同一個(gè)進(jìn)程的Activity或者Service通信依靠binder。在Android系統(tǒng)的Binder機(jī)制中,由一系統(tǒng)組件組成,分別是Client、Server、ServiceManager和Binder驅(qū)動(dòng)程序,其中Client、Server和ServiceManager運(yùn)行在用戶空間,Binder驅(qū)動(dòng)程序運(yùn)行內(nèi)核空間。Binder就是一種把這四個(gè)組件粘合在一起的粘結(jié)劑了,其中,核心組件便是Binder驅(qū)動(dòng)程序了,ServiceManager提供了輔助管理的功能,Client和Server正是在Binder驅(qū)動(dòng)和ServiceManager提供的基礎(chǔ)設(shè)施上,進(jìn)行Client-Server之間的通信。 Binder架構(gòu)
系統(tǒng)調(diào)用libcsvc80Java->jni應(yīng)用層內(nèi)核層數(shù)據(jù)命令封裝sys_call
從系統(tǒng)調(diào)用看hook點(diǎn)HOOK點(diǎn):1.從libc點(diǎn)hook的話,可以做gothook,inlinehook,inlinehook要處理arm和thumb指令,并且參數(shù)超過4個(gè)的要特別小心處理2.從2點(diǎn)hook的更深,相當(dāng)于ntdll的調(diào)用,中斷調(diào)用hook?3.內(nèi)核moudle支持,編譯麻煩,以后對抗可以編譯特定版本的。drivermodule,kernelinlinehook
hook點(diǎn)HOOK類型
我們主要講:1.Java反射hook2.c的gothook(import)hook HOOK為什么HOOK?HOOK發(fā)生在什么地方?磁盤,內(nèi)存?HOOK函數(shù)分三步:找到該函數(shù)替換該函數(shù)恢復(fù)該函數(shù) Java反射hook
Java語言的動(dòng)態(tài)語言特性:反射 Java反射是Java被視為動(dòng)態(tài)(或準(zhǔn)動(dòng)態(tài))語言的一個(gè)關(guān)鍵性質(zhì)。這個(gè)機(jī)制允許程序在運(yùn)行時(shí)透過ReflectionAPIs取得任何一個(gè)已知名稱的class的內(nèi)部信息,包括其modifiers(諸如public,static等)、superclass(例如Object)、實(shí)現(xiàn)之interfaces(例如Cloneable)也包括fields和methods的所有信息,并可于運(yùn)行時(shí)改變fields內(nèi)容或喚起methods。
一般動(dòng)態(tài)語言,都設(shè)計(jì)成為跨平臺(tái)語言,可以編譯成中間語言。與運(yùn)行時(shí)交互可以得到程序的一些內(nèi)部信息。 java反射利用反射替換javastatic和私有變量方法 Class<?>classThread=Class.forName(cls); FieldfieldActs; fieldActs=classThread.getDeclaredField(member);
fieldActs.setAccessible(true); objOrg=fieldActs.get(obj);
fieldActs.set(obj,newObj);
不足:只能進(jìn)行一部分功能替換
例子學(xué)習(xí)本講座的Hook文件夾 gothook主要根據(jù)文件格式解析的原理而來,通過找到文件格式解析后的函數(shù)的內(nèi)存地址,替換函數(shù)。如同windows下的導(dǎo)入表,linux叫g(shù)ot表
怎么找到got表里的函數(shù)1.讀取頭文件2.讀取字符串表3.讀取.plt或者got段,枚舉里面的函數(shù)地址跟系統(tǒng)解析的地址一樣就找到了對應(yīng)的函數(shù)
注入Linux的注入主要通過調(diào)試器函數(shù)ptrace來實(shí)現(xiàn),獲得目標(biāo)地址得寄存器。ptrace:在執(zhí)行系統(tǒng)調(diào)用之前,內(nèi)核會(huì)先檢查當(dāng)前進(jìn)程是否處于被“跟蹤”(traced)的狀態(tài)。如果是的話,內(nèi)核暫停當(dāng)前進(jìn)程并將控制權(quán)交給跟蹤進(jìn)程,使跟蹤進(jìn)程得以察看或者修改被跟蹤進(jìn)程的寄存器
注入函數(shù)ptraceptrace()是一個(gè)系統(tǒng)調(diào)用,它允許一個(gè)進(jìn)程控制另外一個(gè)進(jìn)程的執(zhí)行.不僅如此,我們還可以借助于ptrace修改某個(gè)進(jìn)程的空間(內(nèi)存或寄存器),任何傳遞給一個(gè)進(jìn)程(即被跟蹤進(jìn)程)的信號(hào)(除了會(huì)直接殺死進(jìn)程的SIGKILL信號(hào))都會(huì)使得這個(gè)進(jìn)程進(jìn)入暫停狀態(tài),這時(shí)系統(tǒng)通過wait()通知跟蹤進(jìn)程,這樣,跟蹤進(jìn)程就可以修改被跟蹤進(jìn)程的行為了.如果跟蹤進(jìn)程在被跟蹤進(jìn)程的內(nèi)存中設(shè)置了相關(guān)的事件標(biāo)志位,那么運(yùn)行中被跟蹤進(jìn)程也可能因?yàn)樘厥獾氖录鴷和?跟蹤結(jié)束后,跟蹤進(jìn)程甚至可以通過設(shè)置被跟蹤進(jìn)程的退出碼(exitcode)來殺死它,當(dāng)然也可以讓它繼續(xù)運(yùn)行. cache刷新cache刷新。arm存在指令流水線預(yù)取技術(shù),修改指令后要刷新cachevoidk_flushcache(char*begin,char*end){ constintsyscall=0xf0002; __asm__volatile( "mov r0,%0\n" "mov r1,%1\n" "mov r7,%2\n" "mov r2,#0x0\n" “svc0x00000000\n”//中斷調(diào)用 : : "r"(begin),"r"(end),"r"(syscall) : "r0","r1","r7" );} ptrace函數(shù)#include<sys/types.h>#include<sys/ptrace.h>intptrace(intrequest,pid_tpid,caddr_taddr,intdata);我們可以看到,ptrace有4個(gè)參數(shù),其中,request決定ptrace做什么,pid是被跟蹤進(jìn)程的ID,data存儲(chǔ)從進(jìn)程空間偏移量為addr的地方開始將被讀取/寫入的數(shù)據(jù).request:PT_ATTACH: attach進(jìn)程PT_DETACH: detach進(jìn)程PTRACE_SINGLESTEP:單步PTRACE_SYSCALL,PTRACE_CONT:繼續(xù)PTRACE_POKETEXT,PTRACE_POKEDATA,PTRACE_POKEUSER:讀數(shù)據(jù)PTRACE_PEEKTEXT,PTRACE_PEEKDATA,PTRACE_PEEKUSER:寫數(shù)據(jù)PTRACE_GETREGS:
得到寄存器 ptrace函數(shù)PTRACE_SINGLESTEP:單步DoesthesameasPTRACE_SYSCALLexceptthatthechildisstoppedaftereveryinstruction.PTRACE_SYSCALL,PTRACE_CONT:繼續(xù)Boththesewakesupthestoppedprocess.PTRACE_SYSCALLmakesthechildtostopafterthenextsystemcall.PTRACE_CONTjustallowsthechildtocontinue
內(nèi)存修改函數(shù)#include<sys/mman.h>intmprotect(void*addr,size_tlen,intprot);addr:地址必須page(getpagesize)對齊.prot:PROT_NONENopermissionsatall.PROT_READThepagescanberead.PROT_WRITEThepagescanbewritten.PROT_EXECThepagescanbeexecuted.
注入整體流程分3步1.在目標(biāo)進(jìn)程中分配內(nèi)存,用來寫shellcode和參數(shù)2.往目標(biāo)進(jìn)程中寫入shellcode,
shellcode會(huì)調(diào)用dlopen來載入我們的library3.運(yùn)行目標(biāo)進(jìn)程中的shellcodeShellcode就是一段代碼,用來執(zhí)行一些功能,可以用匯編或者c,或者腳本任何語言寫成
int
main(int
argc,
char
**argv)
{
void
*handle;
double
(*cosine)(double);
char
*error;
handle
=
dlopen
("libm.so",
RTLD_LAZY);
if
(!handle)
{
fprintf
(stderr,
"%s\n",
dlerror());
exit(1);
}
cosine
=
dlsym(handle,
"cos");
if
((error
=
dlerror())
!=
NULL)
{
fprintf
(stderr,
"%s\n",
error);
exit(1);
}
printf
("%f\n",
(*cosine)(2.0));
dlclose(handle);
return
0;
}
注入問題注入Zygote問題Zygote是特殊的進(jìn)程,他主要接受程序啟動(dòng)器的請求,為系統(tǒng)孵化出程序。由于他里面有個(gè)信號(hào)等待,跟我們注入的信號(hào)會(huì)干擾,導(dǎo)致崩潰
例子講解Libinject本課的例子
權(quán)限管理權(quán)限管理 通過接管android應(yīng)用層服務(wù),在程序請求服務(wù)功能時(shí),根據(jù)用戶設(shè)置的權(quán)限和程序本身的權(quán)限進(jìn)行權(quán)限檢查。
權(quán)限管理
替換服務(wù)Android有各種服務(wù),實(shí)現(xiàn)電話,短信,位置信息等功能,服務(wù)管理由service
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 入圍命題制度
- 企業(yè)內(nèi)訓(xùn)師激勵(lì)制度
- 鄉(xiāng)鎮(zhèn)消防專職隊(duì)制度
- 豐年蟲卵配額制度
- 2025至2030中國輕型商用車新能源化趨勢及政策扶持效果評估報(bào)告
- 2025至2030中國智慧港口自動(dòng)化改造技術(shù)方案與投資回報(bào)周期報(bào)告
- 2025至2030智慧農(nóng)業(yè)裝備行業(yè)示范項(xiàng)目成效與推廣潛力分析研究報(bào)告
- 2026年重慶大學(xué)工業(yè)母機(jī)創(chuàng)新研究院勞務(wù)派遣工作人員招聘啟示備考題庫及一套完整答案詳解
- 2026中國水光針行業(yè)銷售策略與營銷趨勢預(yù)測報(bào)告
- 2025至2030中國汽車電子電氣架構(gòu)演進(jìn)趨勢供應(yīng)鏈重塑及投資機(jī)會(huì)分析報(bào)告
- 2026中國電氣裝備集團(tuán)有限公司高層次人才招聘筆試備考試題及答案解析
- 統(tǒng)編版六年級語文第一學(xué)期期末練習(xí)卷
- 2026年社區(qū)活動(dòng)組織服務(wù)合同
- 兒童呼吸道感染用藥指導(dǎo)
- 防意外傷害安全班會(huì)課件
- 2025年國家基本公共衛(wèi)生服務(wù)考試試題(附答案)
- 2025年醫(yī)院社區(qū)衛(wèi)生服務(wù)中心工作總結(jié)及2026年工作計(jì)劃
- 2025-2026學(xué)年北師大版七年級生物上冊知識(shí)點(diǎn)清單
- 委托作品協(xié)議書
- 食品加工廠乳制品設(shè)備安裝方案
- 2025至2030中國芳綸纖維行業(yè)發(fā)展分析及市場發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報(bào)告
評論
0/150
提交評論