码迷,mamicode.com
首页 > 移动开发 > 详细

Android Hook 借助Xposed

时间:2016-04-20 23:10:45      阅读:236      评论:0      收藏:0      [点我收藏+]

标签:

主要就是使用到了Xposed中的两个比较重要的方法,handleLoadPackage获取包加载时候的回调并拿到其对应的classLoader;findAndHookMethod对指定类的方法进行Hook。

 

/**
* 包加载时候的回调
*/
public void handleLoadPackage(final LoadPackageParam lpparam)
/**
* Xposed提供的Hook方法
*
* @param className 待Hook的Class
* @param classLoader classLoader
* @param methodName 待Hook的Method
* @param parameterTypesAndCallback hook回调
* @return
*/
Unhook findAndHookMethod(String className, ClassLoader classLoader, String methodName, Object... parameterTypesAndCallback)

 

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >

<meta-data
android:name="xposedmodule"
android:value="true" />
<!-- 模块描述 -->
<meta-data
android:name="xposeddescription"
android:value="一个登陆劫持的样例" />
<!-- 最低版本号 -->
<meta-data
android:name="xposedminversion"
android:value="30" />
</application>

 新建一个入口类并继承并实现IXposedHookLoadPackage接口

如下操作,我们新建了一个com.example.loginhook.Main的类,并实现IXposedHookLoadPackage接口中的handleLoadPackage方法,将非com.example.login包名的应用过滤掉,即我们只操作包名为com.example.login的应用。如下所示:


 

  1. public class Main implements IXposedHookLoadPackage {  
  2.   
  3.     /** 
  4.      * 包加载时候的回调 
  5.      */  
  6.     public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {  
  7.         // 将包名不是 com.example.login 的应用剔除掉  
  8.         if (!lpparam.packageName.equals("com.example.login"))  
  9.             return;  
  10.         XposedBridge.log("Loaded app: " + lpparam.packageName);  
  11.     }  
  12. }  

. 声明主入口路径

需要在assets文件夹中新建一个xposed_init的文件,并在其中声明主入口类。如这里我们的主入口类为com.example.loginhook.Main。

技术分享 

 

使用findAndHookMethod方法Hook劫持登陆信息

这是最重要的一步,我们之前所分析的都需要到这一步进行操作。如我们之前所分析的登陆程序,我们需要劫持,就是需要Hook其com.example.login.MainActivity中的isCorrectInfo方法。我们使用Xposed提供的findAndHookMethod直接进行MethodHook操作(与Cydia很类似)。在其Hook回调中使用XposedBridge.log方法,将登陆的账号密码信息打印至Xposed的日志中。具体操作如下所示:

 

[java] view plaincopy
 
  1. import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;  
  2. public class Main implements IXposedHookLoadPackage {  
  3.   
  4.     /** 
  5.      * 包加载时候的回调 
  6.      */  
  7.     public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {  
  8.   
  9.         // 将包名不是 com.example.login 的应用剔除掉  
  10.         if (!lpparam.packageName.equals("com.example.login"))  
  11.             return;  
  12.         XposedBridge.log("Loaded app: " + lpparam.packageName);  
  13.   
  14.         // Hook MainActivity中的isCorrectInfo(String,String)方法  
  15.         findAndHookMethod("com.example.login.MainActivity", lpparam.classLoader, "isCorrectInfo", String.class,  
  16.                 String.class, new XC_MethodHook() {  
  17.   
  18.                     @Override  
  19.                     protected void beforeHookedMethod(MethodHookParam param) throws Throwable {  
  20.                         XposedBridge.log("开始劫持了~");  
  21.                         XposedBridge.log("参数1 = " + param.args[0]);  
  22.                         XposedBridge.log("参数2 = " + param.args[1]);  
  23.                     }  
  24.   
  25.                     @Override  
  26.                     protected void afterHookedMethod(MethodHookParam param) throws Throwable {  
  27.                         XposedBridge.log("劫持结束了~");  
  28.                         XposedBridge.log("参数1 = " + param.args[0]);  
  29.                         XposedBridge.log("参数2 = " + param.args[1]);  
  30.   
  31.                     }  
  32.                 });  
  33.     }  

Android Hook 借助Xposed

标签:

原文地址:http://www.cnblogs.com/lzh-Linux/p/5414628.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!