当前位置:首页 » 安卓系统 » hookandroid

hookandroid

发布时间: 2022-08-12 23:52:04

㈠ android 怎么hook主入口

常用hook工具:
Xposed框架;
CydiaSubstrate框架;
ADBI/DDI框架。
这些工具使用流程:配置环境、安装本地服务、下载使用库。
Xposed框架:
handleLoadPackage获取包加载时的回调并拿到其对应的classLoader
findAndLoadHookMethod对指定类的方法进行hook
Cydiasubstrate框架的hook方法:
MS.hookClassLoad 拿到指定class载入时的通知
MS.hookMethod 使用一个java方法去替换另一个Java方法
MS.moveUnderClassLoader 使用不同的ClassLoader重载对象

㈡ 如何hook android framework

1.向目标进程注入代码(注入so,并调用该so里的一个函数)。首先调用ptrace函数,调试com.android.browser进程,在这里我们需要遍历该进程加载的libc.so,这里有我们需要的dlopen,dlsym等函数的地址,我们先中断com.android.phone,修改其寄存器...

㈢ android里怎样hook socket过程

/***第一种:客户端Socket通过构造方法连接服务器***/ //客户端Socket可以通过指定IP地址或域名两种方式来连接服务器端,实际最终都是通过IP地址来连接服务器 //新建一个Socket,指定其IP地址及端口号 Socket socket = newSocket("192.168.0.7",。可以看看安卓巴士的教程:http://www.apkbus.com/thread-463776-1-1.html

㈣ android sensor信息能不能hook

首先我们可以用Xposed框架来hook计数传感器的队列函数dispatchSensorEvent(),这个函数在android.hardware.SystemSensorManager$SensorEventQueue这个类中。随后在微信运动每次询问行走步数的时候,我们先获取当前步数,然后在目前的步数的基础上加1000步,然后将信息返回给微信运动。微信运动就会误以为我们运动了1000步,从而达到了欺骗的效果。
关键代码如下:
首先hook android.hardware.SystemSensorManager$SensorEventQueue这个类的dispatchSensorEvent()函数:
final Class<?> sensorEL = findClass("android.hardware.SystemSensorManager$SensorEventQueue",lpparam.classLoader);
XposedBridge.hookAllMethods(sensorEL, "dispatchSensorEvent", new XC_MethodHook()

接着我们在记步传感器把步数信息返回给微信运动之前,将返回的步数加上1000步:
protected void beforeHookedMethod(MethodHookParam param) throws
Throwable {
XposedBridge.log(" mzheng Hooked method: " + param.method);
((float[]) param.args[1])[0]=((float[]) param.args[1])[0]+1000*WechatStepCount;
WechatStepCount+=1;


另外我们还可以使用一些传感器的接口获取一些数据的信息:
Sensor ss = ((SparseArray<Sensor>) field.get(0)).get(handle);
XposedBridge.log(" SensorEvent: sensor=" + ss);

比如说x就代表开机以来行走的步数,timestamp是获取步数时候的时间戳等。
另外,我们不仅在android上可以hook计步器,在iOS上也是可以通过越狱后hook iHealth的API接口达到同样的作弊效果,有兴趣的同学可以继续研究。

㈤ 如何用hook抓取android手机的URL

你这个用正则工具可以提取,具体参考下面截图,如果你想要采集链接的地址,其实根本不用这么复杂的来看网页源代码,就用我截图中用到的八爪鱼采集器,可视化的,要提取链接的话,直接点击网页上的链接,会弹出一个选项问你是否要采集链接

㈥ 如何hook android sdk

1.1 概述
Xposed 是 GitHUB 上 rovo89 大大设计的一个针对 Android 平台的动态劫持项目,通过替换 /system/bin/app_process 程序控制 zygote 进程,使得 app_process 在启动过程中会加载 XposedBridge.jar 这个 jar 包,从而完成对系统应用的劫持。
Xposed 框架的基本运行环境如下:

因为 Xposed 工作原理是在 /system/bin 目录下替换文件,在 install 的时候需要root 权限,但是运行时不需要 root 权限。

需要在 Android 4.0 以上版本的机器中

2. GitHub 上的 Xposed 资源梳理一下,可以这么分类:
XposedBridge.jar : XposedBridge.jar 是 Xposed 提供的 jar 文件,负责在 Native层与 FrameWork 层进行交互。 /system/bin/app_process 进程启动过程中会加载该jar 包,其它的 Moles 的开发与运行都是基于该 jar 包的。
Xposed : Xposed 的 C++ 部分,主要是用来替换 /system/bin/app_process ,并为 XposedBridge 提供 JNI 方法。
XposedInstaller : Xposed 的安装包,负责配置 Xposed 工作的环境并且提供对基于 Xposed 框架的 Moles 的管理。
XposedMods :使用 Xposed 开发的一些 Moles ,其中 AppSettings 是一个可以进行权限动态管理的应用
1.2 Mechanism :原理
1.2.1 Zygote
在 Android 系统中,应用程序进程都是由 Zygote 进程孵化出来的,而 Zygote 进程是由 Init 进程启动的。 Zygote 进程在启动时会创建一个 Dalvik 虚拟机实例,每当它孵化一个新的应用程序进程时,都会将这个 Dalvik 虚拟机实例复制到新的应用程序进程里面去,从而使得每一个应用程序进程都有一个独立的 Dalvik 虚拟机实例。
Zygote 进程在启动的过程中,除了会创建一个 Dalvik 虚拟机实例之外,还会将 Java运行时库加载到进程中来,以及注册一些 Android 核心类的 JNI 方法来前面创建的 Dalvik 虚拟机实例中去。注意,一个应用程序进程被 Zygote 进程孵化出来的时候,不仅会获得 Zygote 进程中的 Dalvik 虚拟机实例拷贝,还会与 Zygote 一起共享 Java 运行时库。这也就是可以将XposedBridge 这个 jar 包加载到每一个 Android 应用程序中的原因。 XposedBridge 有一个私有的 Native ( JNI )方法 hookMethodNative,这个方法也在 app_process 中使用。这个函数提供一个方法对象利用 Java 的 Reflection 机制来对内置方法覆写。具体的实现可以看下文的 Xposed 源代码分析。
1.2.2 Hook/Replace
Xposed 框架中真正起作用的是对方法的 hook 。在 Repackage 技术中,如果要对APK 做修改,则需要修改 Smali 代码中的指令。而另一种动态修改指令的技术需要在程序运行时基于匹配搜索来替换 smali 代码,但因为方法声明的多样性与复杂性,这种方法也比较复杂。
在 Android 系统启动的时候, zygote 进程加载 XposedBridge 将所有需要替换的 Method 通过 JNI 方法 hookMethodNative 指向 Native 方法 xposedCallHandler , xposedCallHandler 在转入 handleHookedMethod 这个 Java 方法执行用户规定的 Hook Func 。
XposedBridge 这个 jar 包含有一个私有的本地方法: hookMethodNative ,该方法在附加的 app_process 程序中也得到了实现。它将一个方法对象作为输入参数(你可以使用 Java 的反射机制来获取这个方法)并且改变 Dalvik 虚拟机中对于该方法的定义。它将该方法的类型改变为 native 并且将这个方法的实现链接到它的本地的通用类的方法。换言之,当调用那个被 hook 的方法时候,通用的类方法会被调用而不会对调用者有任何的影响。在 hookMethodNative 的实现中,会调用 XposedBridge中的handleHookedMethod这个方法来传递参数。 handleHookedMethod 这个方法类似于一个统一调度的 Dispatch 例程,其对应的底层的 C++ 函数是 xposedCallHandler 。而 handleHookedMethod 实现里面会根据一个全局结构 hookedMethodCallbacks 来选择相应的 hook函数,并调用他们的 before, after 函数。
当多模块同时 Hook 一个方法的时候, Xposed 会自动根据 Mole 的优先级来排序,调用顺序如下:
A.before -> B.before -> original method -> B.after -> A.after
2 源代码分析
2.1 Cpp 模块
其文件分类如下:
app_main.cpp :类似 AOSP 中的 frameworks/base/cmds/app_process/app_main.cpp,即/system/bin/app_process 这个 zygote 真实身份的应用程序的源代码。关于zygote 进程的分析可以参照 Android:AOSP&Core 中的 Zygote 进程详解。
xposed.cpp :提供给 app_main.cpp 的调用函数以及 XposedBridge 的 JNI 方法的实现。主要完成初始化工作以及 Framework 层的 Method 的 Hook 操作。
xposed.h , xposed_offsets.h :头文件
Xposed 框架中的 app_main.cpp 相对于 AOSP 的 app_main.cpp 中修改之处主要为区分了调用 runtime.start() 函数的逻辑。 Xposed 框架中的 app_main.cpp 在此处会根据情况选择是加载 XposedBridge 类还是 ZygoteInit 或者 RuntimeInit 类。而实际的加载 XposedBridge 以及注册 JNI 方法的操作发生在第四步: xposedOnVmCreated中。
1.包含 cutils/properties.h ,主要用于获取、设置环境变量, xposed.cpp 中需要将XposedBridge 设置到 ClassPath 中。
2.包含了 dlfcn.h ,用于对动态链接库的操作。
3.包含了 xposed.h ,需要调用 xposed.cpp 中的函数,譬如在虚拟机创建时注册 JNI 函数。
4.增加了 initTypePointers 函数,对于 Android SDK 大于等于 18 的会获取到 atrace_set_tracing_enabled 函数指针,在 Zygote 启动时调用。
5.AppRuntime 类中的 onVmCreated 函数中增加 xposedOnVmCreated 函数调用。
6.源代码中的 Log* 全部重命名为 ALog*, 所以 Logv 替换为 Alogv ,但是功能不变。
7.Main 函数开始处增加了大量的代码,但是对于 SDK 版本小于 16 的可以不用考虑。

2.1.1 Main 函数: zygote 入口
int main(int argc, char* const argv[])

㈦ 如何Android hook https http

1.创建工程android4.0.3(api15,测试发现其他版本也可以),可以不用activity

2.修改AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.robv.android.xposed.mods.tutorial"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<meta-data
android:name="xposedmole"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="Easy example" />
<meta-data
android:name="xposedminversion"
android:value="54" />
</application>
</manifest>

3.在工程目录下新建一个lib文件夹,将下载好的XposedBridgeApi-54.jar包放入其中.

eclipse 在工程里 选中XposedBridgeApi-54.jar 右键–Build Path–Add to Build Path.

IDEA 鼠标右键点击工程,选择Open Mole Settings,在弹出的窗口中打开Dependencies选项卡.把XposedBridgeApi这个jar包后面的Scope属性改成provided.

4.模块实现接口

[java] view plain


package de.robv.android.xposed.mods.tutorial;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;

public class Tutorial implements IXposedHookLoadPackage {
public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
XposedBridge.log("Loaded app: " + lpparam.packageName);
}
}

5.入口assets/xposed_init配置,声明需要加载到 XposedInstaller 的入口类:

[java] view plain


de.robv.android.xposed.mods.tutorial.Tutorial //完整类名:包名+类名

6.定位要hook的api
编译目标程序,查看Smali代码
直接在AOSP(android源码)中查看

7.XposedBridge to hook it
指定要 hook 的包名
判断当前加载的包是否是指定的包
指定要 hook 的方法名
实现beforeHookedMethod方法和afterHookedMethod方法

㈧ 请教android中有类似hook功能的函数吗侦听某个函数的调用

java层应该没有,如果kernel linux有的话,那么android的底层应该有。不过android有权限安全机制。这个没了解

热点内容
scratch少儿编程课程 发布:2025-04-16 17:11:44 浏览:637
荣耀x10从哪里设置密码 发布:2025-04-16 17:11:43 浏览:366
java从入门到精通视频 发布:2025-04-16 17:11:43 浏览:82
php微信接口教程 发布:2025-04-16 17:07:30 浏览:308
android实现阴影 发布:2025-04-16 16:50:08 浏览:789
粉笔直播课缓存 发布:2025-04-16 16:31:21 浏览:339
机顶盒都有什么配置 发布:2025-04-16 16:24:37 浏览:210
编写手游反编译都需要学习什么 发布:2025-04-16 16:19:36 浏览:810
proteus编译文件位置 发布:2025-04-16 16:18:44 浏览:364
土压缩的本质 发布:2025-04-16 16:13:21 浏览:590