Hooks

Xposed

两种方法分别使用了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     : 80

12-05 10:54:02.223 21607 21607 D Sum     : 80

12-05 10:54:03.223 21607 21607 D Sum     : 80

12-05 10:54:04.224 21607 21607 D Sum     : 80

12-05 10:54:05.225 21607 21607 D Sum     : 80

12-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[i]获取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 Hooked

12-05 10:59:36.973 25726 25726 E Xposed  : Param[0]50

12-05 10:59:36.973 25726 25726 E Xposed  : Param[1]30

12-05 10:59:36.974 25726 25726 D Sum     : 100

12-05 10:59:37.974 25726 25726 E Xposed  : Xposed Hooked

12-05 10:59:37.975 25726 25726 E Xposed  : Param[0]50

12-05 10:59:37.975 25726 25726 E Xposed  : Param[1]30

12-05 10:59:37.976 25726 25726 D Sum     : 100

12-05 10:59:38.977 25726 25726 E Xposed  : Xposed Hooked

12-05 10:59:38.977 25726 25726 E Xposed  : Param[0]50

12-05 10:59:38.978 25726 25726 E Xposed  : Param[1]30

12-05 10:59:38.978 25726 25726 D Sum     : 100

12-05 10:59:39.979 25726 25726 E Xposed  : Xposed Hooked

12-05 10:59:39.979 25726 25726 E Xposed  : Param[0]50

12-05 10:59:39.980 25726 25726 E Xposed  : Param[1]30

12-05 10:59:39.980 25726 25726 D Sum     : 100

完成。

Frida

这个好用,方便。安装的详细过程不再说。

安装frida 与frida-tools

下载对应的frida-server,上传至手机,修改权限并运行

adb push frida-server /data/local/tmp/

adb shell

su

cd /data/local/tmp/

chmod +x frida-server

./frida-server -D

编写用来hook的JS

[编写一个py文件方便调用JS和交互]

执行脚本

查看结果

用来实现Hook的JS 脚本:

'use strict'

console.log("Script loaded successfully");

Java.perform(function x() {

console.log("Inside java perform function");

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

my_class.fun.implementation = function(x,y) { //普通方法,直接hook

console.log("original call: func(" + x + ", " + y + ")");

var ret_value = this.fun(50,50);

return ret_value;

}

});

Python脚本:

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import sys

import struct

import frida

import IPython

JS_FILE = "mys1.js" #这里指定上面的js文件名

PACKAGE = "com.example.a11x256.frida_test" #这里指定要hook的包名

frida_session = None

global script

script = None

reload(sys)

sys.setdefaultencoding('utf-8')

def on_message(message, data):

print(message)

print(data)

def load_script():

global script

if script is not None:

script.unload()

with open(JS_FILE, 'r') as rjs:

hook_script = rjs.read()

script = frida_session.create_script(hook_script)

script.on('message', on_message)

script.load()

if __name__ == "__main__":

device = frida.get_device_manager().enumerate_devices()[-1]

resume = False

try:

frida_session = device.attach(PACKAGE)

print "[Info] Attach success!"

except:

pid = device.spawn(PACKAGE)

frida_session = device.attach(pid)

resume = True

print "[Info] Spawn and attach success!"

load_script()

if resume:

device.resume(pid)

IPython.embed()

script.unload()

exit(0)

执行脚本:

$ python my-loader.py

[Info] Attach success!

Script loaded successfully

Inside java perform function

Class found

Python 2.7.15 (default, Oct  2 2018, 11:47:18)

Type "copyright", "credits" or "license" for more information.

IPython 5.8.0 -- An enhanced Interactive Python.

?         -> Introduction and overview of IPython's features.

%quickref -> Quick reference.

help      -> Python's own help system.

object?   -> Details about 'object', use 'object??' for extra details.

In [1]: original call: func(50, 30)

original call: func(50, 30)

original call: func(50, 30)

original call: func(50, 30)

original call: func(50, 30)

original call: func(50, 30)

original call: func(50, 30)

查看结果:

$ adb logcat -c && adb logcat| grep "Sum"

12-05 11:12:23.412 31195 31195 D Sum     : 100

12-05 11:12:24.420 31195 31195 D Sum     : 100

12-05 11:12:25.435 31195 31195 D Sum     : 100

12-05 11:12:26.442 31195 31195 D Sum     : 100

12-05 11:12:27.449 31195 31195 D Sum     : 100

12-05 11:12:28.460 31195 31195 D Sum     : 100

12-05 11:12:29.469 31195 31195 D Sum     : 100

12-05 11:12:30.478 31195 31195 D Sum     : 100

12-05 11:12:31.488 31195 31195 D Sum     : 100

12-05 11:12:32.496 31195 31195 D Sum     : 100

12-05 11:12:33.506 31195 31195 D Sum     : 100

成功。

python xposed_xposed与frida简单使用对比相关推荐

  1. php和python哪个学起来简单一点-作为初学者,php,python和ruby应学哪个?

    [IT168 评论]对于web开发初学者来说,最大的问题就是学习哪种编程语言更适合未来的职业发展并且更有前景.你要考虑都有哪些编程语言,各自的优缺点是什么.每种编程语言的学习周期有多长等问题.互联网上 ...

  2. python读取oracle数据库性能_用python对oracle进行简单性能测试

    一.概述 dba在工作中避不开的两个问题,sql使用绑定变量到底会有多少的性能提升?数据库的审计功能如果打开对数据库的性能会产生多大的影响?最近恰好都碰到了,索性做个实验. sql使用绑定变量对性能的 ...

  3. 使用Python,OpenCV实现简单的场景边界/拍摄转换检测器

    使用Python,OpenCV进行简单的场景边界/拍摄转换检测器 1. 效果图 2. 实现 2.1 步骤 2.2 什么是"场景边界"和"拍摄过渡"? 2.3 代 ...

  4. python之进程和线程的对比

    python之进程和线程的对比 1. 进程和线程的对比的三个方向 关系对比 区别对比 优缺点对比 2. 关系对比 线程是依附在进程里面的,没有进程就没有线程. 一个进程默认提供一条线程,进程可以创建多 ...

  5. python tkinter库、添加gui界面_使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)...

    使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二),创建一个,界面,布局,文件,路径 使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二) ...

  6. python和R文件IO操作对比及dataframe创建方式对比:read_csv、to_csv、write.csv、 data.frame、pd.DataFrame

    python和R文件IO操作对比及dataframe创建方式对比 很多工程师可能刚开始的时候只熟悉python或者R其中的一个进行数据科学相关的任务. 那么如果我们对比这学习可以快速了解语言设计背后的 ...

  7. 如何提高python的运行效率_几个提升Python运行效率的方法之间的对比

    在我看来,python社区分为了三个流派,分别是python 2.x组织,3.x组织和PyPy组织.这个分类基本上可以归根于类库的兼容性和速度.这篇文章将聚焦于一些通用代码的优化技巧以及编译成C后性能 ...

  8. python m http_非常简单的Python HTTP服务

    如果因为某种需求急需一个web服务器,而又不至于去在httpd和nginx中配置一个新的虚拟主机,Python或许可以帮上这个临时的小需求. 使用Python可以完成一个简单的内建 HTTP 服务器. ...

  9. python的变量和简单的数据类型

    决定学习python这门语言了,本人资质愚钝,只会把学到的东西记录下来,供自己查漏补缺,也可以分享给和我一样正在学习python语言的人,若在记录中存在什么错误,希望多多批评指正,谢谢. Python ...

最新文章

  1. MYSQL千万级数据量的优化方法积累
  2. Linux系统与性能监控
  3. python opencv SIFT,获取特征点的坐标位置
  4. 大V诞生记 —— 谁是VMware?
  5. transform,translate,transition 的区别
  6. 【手把手带你入门深度学习之150行代码的汉字识别系统】学习笔记 ·002 训练神经网络
  7. 让Xcode日志输出中文
  8. CSDN 输入公式的方法
  9. [uva11806]容斥定理
  10. OA发票管理 发票验真 费用报销流程对接
  11. 网安自学之路-信息安全数学基础(五)-近世代数
  12. matlab手眼标定,机器人手眼标定(eye to hand和eye in hand)
  13. 阿里C++工程师面试小记
  14. 荣誉加持,驭势科技近期斩获奖项回顾
  15. php批量获得经纬度,批量调用百度地图API获取地址经纬度坐标
  16. matlab使用plot画图点太密集
  17. MySQL忘记root密码解决方案
  18. To B 业务 vs To C 业务
  19. 一个完整的软件研发流程是怎样的?
  20. 使用U盘系统盘安装操作系统步骤

热门文章

  1. MySql 数据库数据文件进行恢复
  2. vue中使用canvas实现移动端手写板、电子签名功能
  3. matplotlib坐标轴把刻度竖过来显示
  4. 计蒜客T1068救援
  5. 湘潭大学计算机学院考研复试线,湘潭大学2020研究生复试分数线
  6. 我们要坚持不懈地追求自己的目标,即使遇到挫折也不要轻易放弃。
  7. 对同一个三相逆变器使用FCS-MPC的延迟补偿的两种方法
  8. 2021,重新出发,看如何从0开始到学完忘记再到重回战场,#flog
  9. 确定性网络——TSN(Time-Sensitive Networking)任务组介绍
  10. TSN时间敏感网络|学习笔记-看这一篇就够了