日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
AndroidHOOK工具CydiaSubstrate使用詳解

Cydia Substrate是一個(gè)代碼修改平臺(tái)。它可以修改任何主進(jìn)程的代碼,不管是用Java還是C/C++(native代碼)編寫的。而Xposed只支持 HOOK app_process中的java函數(shù),因此Cydia Substrate是一款強(qiáng)大而實(shí)用的HOOK工具。

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、翁源ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的翁源網(wǎng)站制作公司

官網(wǎng)地址:http://www.cydiasubstrate.com/

Demo地址:https://github.com/zencodex/cydia-android-hook

官方教程:http://www.cydiasubstrate.com/id/20cf4700-6379-4a14-9bc2-853fde8cc9d1

SDK下載地址:http://asdk.cydiasubstrate.com/zips/cydia_substrate-r2.zip

Substrate幾個(gè)重要API介紹

MS.hookClassLoad 

函數(shù)原型:void hookClassLoad(String name, MS.ClassLoadHook hook);

該方法實(shí)現(xiàn)在指定的類被加載的時(shí)候發(fā)出通知。因?yàn)橐粋€(gè)類可以在任何時(shí)候被加載,所以Substrate提供了一個(gè)方法用來(lái)檢測(cè)用戶感興趣的類何時(shí)被加載。

     

  

參數(shù)

  

  

描述

  

name

包名+類名,使用java的.符號(hào)

hook

MS.ClassLoadHook的一個(gè)實(shí)例,當(dāng)這個(gè)類被加載的時(shí)候,它的 classLoaded 方法會(huì)被執(zhí)行。

MS.hookMethod 

該API允許開發(fā)者提供一個(gè)回調(diào)函數(shù)替換原來(lái)的方法,這個(gè)回調(diào)函數(shù)是一個(gè)實(shí)現(xiàn)了MS.MethodHook接口的對(duì)象,是一個(gè)典型的匿名內(nèi)部類。它包含一個(gè)invoked函數(shù)。

函數(shù)原型:

void hookMethod(Class _class, Member member, MS.MethodHook hook, MS.MethodPointer old); void hookMethod(Class _class, Member member, MS.MethodAlteration alteration);

參數(shù)描述

(一)

參數(shù)

描述

_class

加載的目標(biāo)類,為classLoaded傳下來(lái)的類參數(shù)

member

通過(guò)反射得到的需要hook的方法(或構(gòu)造函數(shù)). 注意:不能HOOK字段 (在編譯的時(shí)候會(huì)進(jìn)行檢測(cè)).

hook

MS.MethodHook的一個(gè)實(shí)例,其包含的invoked方法會(huì)被調(diào)用,用以代替member中的代碼

(二)     

  

參數(shù)

  

  

描述

  

_class

加載的目標(biāo)類,為classLoaded傳下來(lái)的類參數(shù)

member

通過(guò)反射得到的需要hook的方法(或構(gòu)造函數(shù)). 注意:不能HOOK字段 (在編譯的時(shí)候會(huì)進(jìn)行檢測(cè)).

alteration

An instance of MS.MethodAlteration whose boxedinvoked method will be called instead of member. This instance will also be filled in using information from   the original implementation, allowing you to use invoke to call the original method implementation.

建議開發(fā)者使用第二種方式,這種方式使用起來(lái)簡(jiǎn)單并且很少出錯(cuò),不需要一個(gè)單獨(dú)的MS.MethodPointer類實(shí)例。

使用方法

下面以官網(wǎng)的一個(gè)實(shí)例來(lái)說(shuō)明cydia substrate的使用方法。該實(shí)例是實(shí)現(xiàn)將多個(gè)接口組件顏色修改為紫羅蘭色。

需要安裝:http://www.cydiasubstrate.com/download/com.saurik.substrate.apk

步驟一:創(chuàng)建一個(gè)空的Android工程。由于創(chuàng)建的工程將以插件的形式被加載,所以不需要activity。將SDK中的substrate-api.jar復(fù)制到project/libs文件夾中。

步驟二:配置Manifest文件

(1)需要指定權(quán)限:cydia.permission.SUBSTRATE

(2)添加meta標(biāo)簽,name為cydia.permission.SUBSTRATE,value為下一步中創(chuàng)建的類名.Main

 
 
 
 
  1.  
  2.      
  3.         
  4.             android:value=".Main"/> 
  5.      
  6.      
  7.  

步驟二:創(chuàng)建一個(gè)類,類名為Main。類中包含一個(gè)static方法initialize,當(dāng)插件被加載的時(shí)候,該方法中的代碼就會(huì)運(yùn)行,完成一些必要的初始化工作。

 
 
 
 
  1. import com.saurik.substrate.MS; 
  2.   
  3. public class Main { 
  4.     static void initialize() {  
  5.         // ... code to run when extension is loaded 
  6.     } 

步驟三:為了實(shí)現(xiàn)HOOK,達(dá)到修改目標(biāo)類中的代碼的目的,我們需要得到目標(biāo)類的一個(gè)實(shí)例,如示例中的resources。

 
 
 
 
  1. public class Main { 
  2.     static void initialize() { 
  3.         MS.hookClassLoad("android.content.res.Resources", new MS.ClassLoadHook() { 
  4.             public void classLoaded(Class resources) { 
  5.                 // ... code to modify the class when loaded 
  6.             } 
  7.         }); 
  8.     } 

步驟四:通過(guò)MS.MethodHook實(shí)例實(shí)現(xiàn)原代碼的修改。

為了調(diào)用原來(lái)代碼中的方法,我們需要?jiǎng)?chuàng)建一個(gè)MS.MethodPointer類的實(shí)例,它可以在任何時(shí)候運(yùn)行原來(lái)的代碼。

在這里我們通過(guò)對(duì)原代碼中resources對(duì)象原始代碼的調(diào)用和修改,將所有綠色修改成了紫羅蘭色。

 
 
 
 
  1. public void classLoaded(Class resources) { 
  2. Method getColor;  
  3. try { 
  4.         getColor = resources.getMethod("getColor", Integer.TYPE); 
  5.     } catch (NoSuchMethodException e) { 
  6.         getColor = null; 
  7.     } 
  8.   
  9.     if (getColor != null) { 
  10.         final MS.MethodPointer old = new MS.MethodPointer(); 
  11.   
  12.         MS.hookMethod(resources, getColor, new MS.MethodHook() { 
  13.             public Object invoked(Object resources, Object... args) 
  14.                 throws Throwable 
  15.             { 
  16.                 int color = (Integer) old.invoke(resources, args); 
  17.                 return color & ~0x0000ff00 | 0x00ff0000; 
  18.             } 
  19.         }, old); 
  20.     } 

安裝運(yùn)行,重啟系統(tǒng)后發(fā)現(xiàn)很多字體顏色都變了。如下圖所示:

                 

示例中MS.hookMethod的代碼可以改成:

 
 
 
 
  1. MS.hookMethod(resources, getColor, new MS.MethodAlteration() { 
  2.          public Integer invoked(Resources resources, Object... args) 
  3.                  throws Throwable 
  4.          { 
  5.                  int color = invoke(resources, args); 
  6.                  return color & ~0x0000ff00 | 0x00ffee00; 
  7.          } 
  8. }); 

短信監(jiān)控實(shí)例

在下面的例子中我們實(shí)現(xiàn)了短信監(jiān)聽功能,將短信發(fā)送人、接收人以及短信內(nèi)容打印出來(lái):

 
 
 
 
  1. 1 import java.lang.reflect.Method; 
  2.  2 import android.app.PendingIntent; 
  3.  3 import android.util.Log; 
  4.  4 import com.saurik.substrate.MS; 
  5.  5   
  6.  6  
  7.  7 public class Main { 
  8.  8  
  9.  9     static void initialize() {   
  10. 10  
  11. 11     MS.hookClassLoad("android.telephony.SmsManager", new MS.ClassLoadHook() { 
  12. 12             
  13. 13  
  14. 14             @Override 
  15. 15  
  16. 16             public void classLoaded(Class SmsManager) { 
  17. 17  
  18. 18                 //code to modify the class when loaded 
  19. 19  
  20. 20             Method sendTextMessage; 
  21. 21  
  22. 22             try { 
  23. 23  
  24. 24                     sendTextMessage = SmsManager.getMethod("sendTextMessage", 
  25. 25  
  26. 26                             new Class[]{String.class,String.class,String.class,PendingIntent.class,PendingIntent.class}); 
  27. 27                     
  28. 28  
  29. 29                 } catch (NoSuchMethodException e) { 
  30. 30  
  31. 31                     sendTextMessage = null; 
  32. 32  
  33. 33                 } 
  34. 34  
  35. 35              MS.hookMethod(SmsManager, sendTextMessage, new MS.MethodAlteration() { 
  36. 36  
  37. 37                  public Object invoked(Object _this,Object... _args) throws Throwable{ 
  38. 38  
  39. 39                      Log.i("SMSHOOK","SEND_SMS"); 
  40. 40  
  41. 41                      Log.i("SMSHOOK","destination:"+_args[0]); 
  42. 42  
  43. 43                      Log.i("SMSHOOK","source:"+_args[1]); 
  44. 44  
  45. 45                      Log.i("SMSHOOK","text:"+_args[2]); 
  46. 46  
  47. 47                         return invoke(_this, _args); 
  48. 48  
  49. 49                     } 
  50. 50  
  51. 51             }); 
  52. 52             
  53. 53  
  54. 54             } 
  55. 55  
  56. 56         }); 
  57. 57  
  58. 58     } 
  59. 59  
  60. 60 } 

運(yùn)行后的結(jié)果為:


分享題目:AndroidHOOK工具CydiaSubstrate使用詳解
URL網(wǎng)址:http://www.5511xx.com/article/cdhogsh.html