您现在的位置是:网站首页>文章详情文章详情
Android hook框架之Cydia插件开发
inlike2019-11-23【 原创文章 】 浏览(2356) 评论(0) 喜欢(30)
简介Cydia全称是Cydia基板,与Xposed框架是安卓领域最著名的插件开发框架,尤其是Cydia在早期苹果越狱方面大部分出众,同时Cydia在Android hook尽管Cycy功能强大,但是因为其不开源所以该框架的发展并不如人意,目前官方声明支持Android2.3至4.3,亲测4.4也可以使用。
Cydia全称是Cydia Substrate,与Xposed框架是安卓领域最著名的插件开发框架,尤其是Cydia在早期苹果越狱方面较多出众,同时Cydia在Android hook 。
尽管Cydia功能强大,但是因为其不开源所以该框架的发展并不如人意,目前官方声明支持Android 2.3至4.3,亲测4.4也可以使用。
Cydia同Xposed一样提供了简洁的接口,我们可以通过这些接口锁定需要hook类,然后进一步处理该类下的函数,在使用该框架过程中环境构建,插件开发花费了很多时间,总算一个个坑的躺过来。
本篇文章将通过一个案例讲述Cydia框架下的插件开发流程。首先准备一个简单的app,这个app就是helloWord,在Androidstudio样式的项目中,helloWord界面如下:
<meta-data android:name="com.saurik.substrate.main"
android:value=".Main"/><uses-permission android:name="cydia.permission.SUBSTRATE"/>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.cydiahook">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<meta-data android:name="com.saurik.substrate.main"
android:value=".Main"/>
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="cydia.permission.SUBSTRATE"/>
</manifest>import com.saurik.substrate.MS;
import java.lang.reflect.Method;package com.example.cydiahook;
import com.saurik.substrate.MS;
import java.lang.reflect.Method;
public class Main {
static void initialize() {
//代码部分
}
}void hookClassLoad(String name, MS.ClassLoadHook hook);
//name是要hook的类,hook是被hook类的实例化也是我们实现逻辑修改的地方package com.example.cydiahook;
import com.saurik.substrate.MS;
import java.lang.reflect.Method;
public class Main {
static void initialize() {
MS.hookClassLoad("com.example.cydia.MainActivity", new MS.ClassLoadHook() {
public void classLoaded(Class<?> resources) {
Method word;
try {
word = resources.getMethod("word");
} catch (NoSuchMethodException e) {
word = null;
}
}
}}package com.example.cydiahook;
import com.saurik.substrate.MS;
import java.lang.reflect.Method;
public class Main {
static void initialize() {
MS.hookClassLoad("com.example.cydia.MainActivity", new MS.ClassLoadHook() {
public void classLoaded(Class<?> resources) {
Method word;
try {
word = resources.getMethod("word");
} catch (NoSuchMethodException e) {
word = null;
}
if (word != null) {
final MS.MethodPointer old = new MS.MethodPointer();
MS.hookMethod(resources, word, new MS.MethodHook() {
public Object invoked(Object resources, Object... args)
throws Throwable
{
String text = (String) old.invoke(resources, args);
return text+"测试hook";
}
}, old);
}
}
});
}
}final MS.MethodPointer old = new MS.MethodPointer();
MS.hookMethod(resources, word, new MS.MethodHook() {
public Object invoked(Object resources, Object... args)
throws Throwable
{
String text = (String) old.invoke(resources, args);
return text+"测试hook";
}
}, old);
相关文章
本栏推荐
标签云
猜你喜欢
站点信息
- 建站时间:2019-5-24
- 网站程序:like in love
- 主题模板:《今夕何夕》
- 文章统计:104条
- 文章评论:***条
- 微信公众号:扫描二维码,关注我们