AI手机网,短视频直播 硬改改机 一键新机 群控软件 刷机定制

 找回密码
 立即注册
搜索
查看: 2722|回复: 0

xposed与frida简单使用对比

[复制链接]
发表于 2019-1-5 19:53:29 | 显示全部楼层 |阅读模式
Hooks
  • Xposed
  • FrIDA
两种方法分别使用了Android、python+JS作为开发语言进行hook。
APP
这个APP是在学习frida的时候看到的,非常简单,有源码,有apk,用来作一个这种类型的文章最合适不过了。
先给出URL,再给出源码,不想实践的可以直接看文字。
URL: https://11x256.github.io/Frida-hooking-android-part-1/
  1. package com.example.a11x256.frida_test;

  2. import android.os.Bundle;
  3. import android.support.v7.app.AppCompatActivity;
  4. import android.util.Log;
  5. import android.util.Base64;
  6. import java.security.InvalidKeyException;
  7. import java.security.NoSuchAlgorithmException;
  8. import java.util.Random;

  9. import javax.crypto.BadPaddingException;
  10. import javax.crypto.Cipher;
  11. import javax.crypto.IllegalBlockSizeException;
  12. import javax.crypto.NoSuchPaddingException;
  13. import javax.crypto.SecretKey;
  14. import javax.crypto.spec.SecretKeySpec;

  15. public class my_activity extends AppCompatActivity {

  16.     @Override
  17.     protected void onCreate(Bundle savedInstanceState) {
  18.         super.onCreate(savedInstanceState);
  19.         setContentView(R.layout.activity_my_activity);
  20.         while (true){

  21.             try {
  22.                 Thread.sleep(1000);
  23.             } catch (InterruptedException e) {
  24.                 e.printStackTrace();
  25.             }

  26.             fun(50,30);
  27.         }
  28.     }

  29.     void fun(int x , int y ){
  30.         Log.d("Sum" , String.valueOf(x+y));
  31.     }

  32. }
复制代码
安装完之后,运行起来,查看log可以看到
  1. $ adb logcat -c && adb logcat| grep -E "Sum"      
  2. 12-05 10:54:01.222 21607 21607 D Sum     : 80
  3. 12-05 10:54:02.223 21607 21607 D Sum     : 80
  4. 12-05 10:54:03.223 21607 21607 D Sum     : 80
  5. 12-05 10:54:04.224 21607 21607 D Sum     : 80
  6. 12-05 10:54:05.225 21607 21607 D Sum     : 80
  7. 12-05 10:54:06.226 21607 21607 D Sum     : 80
复制代码
本帖最后由 m0nst3r 于 2018-12-5 12:03 编辑


内容简单,大佬请自动忽略。
Hooks
两种方法分别使用了Android、python+JS作为开发语言进行hook。
APP
这个APP是在学习frida的时候看到的,非常简单,有源码,有apk,用来作一个这种类型的文章最合适不过了。
先给出URL,再给出源码,不想实践的可以直接看文字。
package com.example.a11x256.frida_test;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.util.Base64;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.util.Random;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;public class my_activity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_my_activity);        while (true){            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                e.printStackTrace();            }            fun(50,30);        }    }    void fun(int x , int y ){        Log.d("Sum" , String.valueOf(x+y));    }}
安装完之后,运行起来,查看log可以看到:
$ adb logcat -c && adb logcat| grep -E "Sum"       12-05 10:54:01.222 21607 21607 D Sum     : 8012-05 10:54:02.223 21607 21607 D Sum     : 8012-05 10:54:03.223 21607 21607 D Sum     : 8012-05 10:54:04.224 21607 21607 D Sum     : 8012-05 10:54:05.225 21607 21607 D Sum     : 8012-05 10:54:06.226 21607 21607 D Sum     : 80
只是简单hook,我们分别使用三种方法让Sum变成100即可。
Xposed
简介、环境就不说了,网上很多教程可以参考。
  • 新建工程
  • 编辑build.gradles
  • 编辑AndroidManifest.xml
  • 创建Hook类,此处为test
  • 创建assets 及 xposed_init,并输入完整的test类名
  • 编写hook代码
  • Build APK
  • 安装APK
  • 在手机上启用刚刚安装的module
  • 软重启手机
  • 运行测试app
  • 查看log
    1. package com.example.michael.xposed_1;

    2. import de.robv.android.xposed.IXposedHookLoadPackage;
    3. import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
    4. import de.robv.android.xposed.XC_MethodHook;
    5. import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
    6. import android.util.Log;

    7. public class test implements IXposedHookLoadPackage {
    8.     @Override
    9.     public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable{
    10.         if (lpparam.packageName.equals("com.example.a11x256.frida_test")) {
    11.             findAndHookMethod("com.example.a11x256.frida_test.my_activity", lpparam.classLoader,"fun", int.class, int.class,
    12.                     new XC_MethodHook(){
    13.                 @Override
    14.                 protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
    15.                     Log.e("Xposed", "Xposed Hooked");
    16.                     Integer x = (Integer)param.args[0]; //可通过param.args[i]获取hook函数的第i个参数
    17.                     Integer y = (Integer)param.args[1];

    18.                     Log.e("Xposed", "Param[0]" + x);
    19.                     Log.e("Xposed", "Param[1]" + y);

    20.                     param.args[0] = 50;
    21.                     param.args[1] = 50;

    22.                     super.beforeHookedMethod(param);

    23.                 }

    24.                 @Override
    25.                 protected void afterHookedMethod(MethodHookParam param) throws Throwable {
    26.                     super.afterHookedMethod(param);
    27.                 }
    28.             });
    29.         }
    30.     }
    31. }
    复制代码
    log
    1. $ adb logcat -c && adb logcat| grep -E "Sum|Xposed"
    2. 12-05 10:59:36.972 25726 25726 E Xposed  : Xposed Hooked
    3. 12-05 10:59:36.973 25726 25726 E Xposed  : Param[0]50
    4. 12-05 10:59:36.973 25726 25726 E Xposed  : Param[1]30
    5. 12-05 10:59:36.974 25726 25726 D Sum     : 100
    6. 12-05 10:59:37.974 25726 25726 E Xposed  : Xposed Hooked
    7. 12-05 10:59:37.975 25726 25726 E Xposed  : Param[0]50
    8. 12-05 10:59:37.975 25726 25726 E Xposed  : Param[1]30
    9. 12-05 10:59:37.976 25726 25726 D Sum     : 100
    10. 12-05 10:59:38.977 25726 25726 E Xposed  : Xposed Hooked
    11. 12-05 10:59:38.977 25726 25726 E Xposed  : Param[0]50
    12. 12-05 10:59:38.978 25726 25726 E Xposed  : Param[1]30
    13. 12-05 10:59:38.978 25726 25726 D Sum     : 100
    14. 12-05 10:59:39.979 25726 25726 E Xposed  : Xposed Hooked
    15. 12-05 10:59:39.979 25726 25726 E Xposed  : Param[0]50
    16. 12-05 10:59:39.980 25726 25726 E Xposed  : Param[1]30
    17. 12-05 10:59:39.980 25726 25726 D Sum     : 100
    复制代码
    本帖最后由 m0nst3r 于 2018-12-5 12:03 编辑


    内容简单,大佬请自动忽略。
    Hooks
    两种方法分别使用了Android、python+JS作为开发语言进行hook。
    APP
    这个APP是在学习frida的时候看到的,非常简单,有源码,有apk,用来作一个这种类型的文章最合适不过了。
    先给出URL,再给出源码,不想实践的可以直接看文字。
    package com.example.a11x256.frida_test;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.util.Base64;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.util.Random;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;public class my_activity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_my_activity);        while (true){            try {                Thread.sleep(1000);            } catch (InterruptedException e) {                e.printStackTrace();            }            fun(50,30);        }    }    void fun(int x , int y ){        Log.d("Sum" , String.valueOf(x+y));    }}
    安装完之后,运行起来,查看log可以看到:
    $ adb logcat -c && adb logcat| grep -E "Sum"       12-05 10:54:01.222 21607 21607 D Sum     : 8012-05 10:54:02.223 21607 21607 D Sum     : 8012-05 10:54:03.223 21607 21607 D Sum     : 8012-05 10:54:04.224 21607 21607 D Sum     : 8012-05 10:54:05.225 21607 21607 D Sum     : 8012-05 10:54:06.226 21607 21607 D Sum     : 80
    只是简单hook,我们分别使用三种方法让Sum变成100即可。
    Xposed
    简介、环境就不说了,网上很多教程可以参考。
    • 新建工程
    • 编辑build.gradles
    • 编辑AndroidManifest.xml
    • 创建Hook类,此处为test
    • 创建assets 及 xposed_init,并输入完整的test类名
    • 编写hook代码
    • Build APK
    • 安装APK
    • 在手机上启用刚刚安装的module
    • 软重启手机
    • 运行测试app
    • 查看log
    package com.example.michael.xposed_1;import de.robv.android.xposed.IXposedHookLoadPackage;import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;import de.robv.android.xposed.XC_MethodHook;import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;import android.util.Log;public class test implements IXposedHookLoadPackage {    @Override    public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable{        if (lpparam.packageName.equals("com.example.a11x256.frida_test")) {            findAndHookMethod("com.example.a11x256.frida_test.my_activity", lpparam.classLoader,"fun", int.class, int.class,                    new XC_MethodHook(){                @Override                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {                    Log.e("Xposed", "Xposed Hooked");                    Integer x = (Integer)param.args[0]; //可通过param.args获取hook函数的第i个参数                    Integer y = (Integer)param.args[1];                    Log.e("Xposed", "Param[0]" + x);                    Log.e("Xposed", "Param[1]" + y);                    param.args[0] = 50;                    param.args[1] = 50;                    super.beforeHookedMethod(param);                }                @Override                protected void afterHookedMethod(MethodHookParam param) throws Throwable {                    super.afterHookedMethod(param);                }            });        }    }}
    Log信息
    $ adb logcat -c && adb logcat| grep -E "Sum|Xposed"12-05 10:59:36.972 25726 25726 E Xposed  : Xposed Hooked12-05 10:59:36.973 25726 25726 E Xposed  : Param[0]5012-05 10:59:36.973 25726 25726 E Xposed  : Param[1]3012-05 10:59:36.974 25726 25726 D Sum     : 10012-05 10:59:37.974 25726 25726 E Xposed  : Xposed Hooked12-05 10:59:37.975 25726 25726 E Xposed  : Param[0]5012-05 10:59:37.975 25726 25726 E Xposed  : Param[1]3012-05 10:59:37.976 25726 25726 D Sum     : 10012-05 10:59:38.977 25726 25726 E Xposed  : Xposed Hooked12-05 10:59:38.977 25726 25726 E Xposed  : Param[0]5012-05 10:59:38.978 25726 25726 E Xposed  : Param[1]3012-05 10:59:38.978 25726 25726 D Sum     : 10012-05 10:59:39.979 25726 25726 E Xposed  : Xposed Hooked12-05 10:59:39.979 25726 25726 E Xposed  : Param[0]5012-05 10:59:39.980 25726 25726 E Xposed  : Param[1]3012-05 10:59:39.980 25726 25726 D Sum     : 100
    完成。
    Frida
    这个好用,方便。安装的详细过程不再说。
    • 安装frida 与frida-tools
    • 下载对应的frida-server,上传至手机,修改权限并运行
      1. adb push frida-server /data/local/tmp/
      2. adb shell
      3. su
      4. cd /data/local/tmp/
      5. chmod +x frida-server
      6. ./frida-server -D
      复制代码




  • 编写用来hook的JS
  • [编写一个py文件方便调用JS和交互]
  • 执行脚本
  • 查看结果
用来实现Hook的JS 脚本:
  1. 'use strict'
  2. console.log("Script loaded successfully");

  3. Java.perform(function x() {
  4.     console.log("Inside java perform function");

  5.     var my_class = Java.use("com.example.a11x256.frida_test.my_activity"); //找到类

  6.     my_class.fun.implementation = function(x,y) { //普通方法,直接hook
  7.         console.log("original call: func(" + x + ", " + y + ")");
  8.         var ret_value = this.fun(50,50);
  9.         return ret_value;
  10.     }
  11. });
复制代码
Python脚本:
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import sys
  4. import struct
  5. import frida
  6. import IPython

  7. JS_FILE = "mys1.js" #这里指定上面的js文件名
  8. PACKAGE = "com.example.a11x256.frida_test" #这里指定要hook的包名
  9. frida_session = None
  10. global script

  11. script = None

  12. reload(sys)
  13. sys.setdefaultencoding('utf-8')

  14. def on_message(message, data):
  15.     print(message)
  16.     print(data)

  17. def load_script():
  18.     global script
  19.     if script is not None:
  20.         script.unload()

  21.     with open(JS_FILE, 'r') as rjs:
  22.         hook_script = rjs.read()

  23.     script = frida_session.create_script(hook_script)
  24.     script.on('message', on_message)
  25.     script.load()

  26. if __name__ == "__main__":
  27.     device = frida.get_device_manager().enumerate_devices()[-1]
  28.     resume = False

  29.     try:
  30.         frida_session = device.attach(PACKAGE)
  31.         print "[Info] Attach success!"
  32.     except:
  33.         pid = device.spawn(PACKAGE)
  34.         frida_session = device.attach(pid)
  35.         resume = True

  36.         print "[Info] Spawn and attach success!"

  37.     load_script()

  38.     if resume:
  39.         device.resume(pid)

  40.     IPython.embed()
  41.     script.unload()
  42.     exit(0)
复制代码
执行脚本:
  1. $ python my-loader.py
  2. [Info] Attach success!
  3. Script loaded successfully
  4. Inside java perform function
  5. Class found
  6. Python 2.7.15 (default, Oct  2 2018, 11:47:18)
  7. Type "copyright", "credits" or "license" for more information.

  8. IPython 5.8.0 -- An enhanced Interactive Python.
  9. ?         -> Introduction and overview of IPython's features.
  10. %quickref -> Quick reference.
  11. help      -> Python's own help system.
  12. object?   -> Details about 'object', use 'object??' for extra details.

  13. In [1]: original call: func(50, 30)
  14. original call: func(50, 30)
  15. original call: func(50, 30)
  16. original call: func(50, 30)
  17. original call: func(50, 30)
  18. original call: func(50, 30)
  19. original call: func(50, 30)
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

技术交流售后群

QQ|小黑屋|手机版|站点找错-建议|AI手机网 |Sitemap



GMT+8, 2024-4-18 11:37 , Processed in 0.137730 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表