一、dalvik字節(jié)碼學習
? ? 1. 寄存器的命名? ? ?
? ? ? ? v: 局部變量寄存器瘟判,v0-vn ,? 變量寄存器: v0-vn
? ? ? ? p: 參數(shù)寄存器, p0-pn
? ? 2.得到samli文件流程
? ? ? ? ?.java ---> .class ---> .dex ----> smali? ? ? ??
? ? 3. dalvil 字節(jié)碼類型
? ? ?????B : byte
? ? ? ? ?C : char
? ? ? ? S : short
? ? ? ? I :? int
? ? ? ? J : long
? ? ? ? F : float
? ? ? ? D : double
? ? ? ? Z : boolean
? ? ? ? V : void
? ? ? ? L : java類類型,也就是類型
? ? ? ? [ :? 數(shù)組類型
? ? 4.?dalvil指令集
? ? ? ? wide : 標識指令操作數(shù)據(jù)寬度為64位
? ? ? ? from16 : 表示源寄存器為16位
? ? ? ? nod : 空操作指令,它的值為00巩掺。用來指令對齊捐凭,無實際作用和空格類似
? ? ? ? move : 數(shù)據(jù)操作指令
? ? ? ? exp :? ?vA(4位數(shù)值)? ? ?vAA(8位數(shù)值)? ? ?vAAAA(16位數(shù)值)
????????????????Move vA,vB :? 將vB寄存器的數(shù)值給vA寄存器
? ? ? ? ? ? ? ? Move/form16 vA,vB :?
? ? ? ? return void : 表示函數(shù)從void方法返回洒嗤,返回值為空粗俱。
? ? ? ? return vAA : 表示函數(shù)返回一個32位非對象的值御板,返回寄存器為8位
? ? ? ? return-wide vAA : 返回一個64位非對象類型數(shù)值锥忿,返回寄存器為8位
? ? ? ? return-object vAA : 返回一個對象類型的值,返回寄存器為8位
? ? ? ? new-instance :? 實例化一個對象
? ? ? ? invoke-direct : 調用實例化對應的方法
? ? ? ? invoke-virtual :?
? ? ? ? supt-object :??
? ? ? ? check-cast : 將寄存器對象引用轉換為指定類型
? ? ? ? instace-of : 寄存器中的對象是否轉為成指定類型
? ? ? ? goto : 無條件跳轉
? ? ? ? switch : 分支跳轉
? ? ? ? if : 條件跳轉
? ? 5.smail文件學習詳解
? ? ? ? ?.registers :? 寄存器的總數(shù),這個數(shù)量是參數(shù)和本地變量總和
? ? ? ? ?.param : 表明方法的參數(shù)怠肋,每個.param指令表示一個參數(shù)敬鬓,方法使用幾個參數(shù)就有幾個.paramter指令? ? ? ??
? ? ? ? ?.prologue : 指定代碼的開始處,混淆代碼可能去掉該指令
? ? ? ? ?.line : 指定源代碼的行號笙各,混淆后代碼可能去掉行號
? ? ? ? ?.locals : 表示局部變量寄存器的總個數(shù)
? ? ? ? ?.local : 表明方法中非寄存器
Android killer ———? AndroidCrackTool (Mac)
PKID ———> 查看是否加殼
IDA ———> 分析.so庫文件
JEB : 動態(tài)調試java層代碼
WinHex : 修改so庫軟件
Xposed框架開發(fā)
CydiaSubstrate框架
Frida框架
ADBI框架
ELFARM HOOK框架
JVMTI : 有時間學習一下,內存分配堅聽