惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Securelist
O
OpenAI News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Google Online Security Blog
Google Online Security Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
N
News and Events Feed by Topic
S
Security Affairs
SecWiki News
SecWiki News
Project Zero
Project Zero
L
Lohrmann on Cybersecurity
P
Proofpoint News Feed
P
Palo Alto Networks Blog
L
LINUX DO - 最新话题
H
Hacker News: Front Page
Recent Commits to openclaw:main
Recent Commits to openclaw:main
I
Intezer
Simon Willison's Weblog
Simon Willison's Weblog
W
WeLiveSecurity
T
The Exploit Database - CXSecurity.com
K
Kaspersky official blog
The GitHub Blog
The GitHub Blog
I
InfoQ
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
B
Blog
IT之家
IT之家
AWS News Blog
AWS News Blog
Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Google DeepMind News
Google DeepMind News
Spread Privacy
Spread Privacy
N
News and Events Feed by Topic
Security Latest
Security Latest
美团技术团队
C
Check Point Blog
WordPress大学
WordPress大学
T
Tenable Blog
S
Security @ Cisco Blogs
Last Week in AI
Last Week in AI
博客园 - 聂微东
月光博客
月光博客
博客园 - 【当耐特】
S
Schneier on Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Secure Thoughts
Schneier on Security
Schneier on Security
C
Cisco Blogs
Cyberwarzone
Cyberwarzone

博客园 - 星辰之力

网站工具 Vue项目用于Ios和Android端开发 Android assets文件夹之位置放置和作用 cordov vue项目中调用手机原生api Android 直接修改dex破解 Android 逆向实战篇(加密数据包破解) Android JNI中C调用Java方法 Android Studio NDK JNI动态注册本地方法 JNI C反射调用java方法 JNI NDK (AndroidStudio+CMake )实现C C++调用Java代码流程 Jni 线程JNIEnv,JavaVM,JNI_OnLoad(GetEnv返回NULL?FindClass返回NULL?) Jni OnLoad()和OnUnload() Android JNI之C/C++层调用JAVA Android NDK编译之undefined reference to 'JNI_CreateJavaVM' Android 开创java世界(JNI Invocation API) Android JNI c/c++调用java 无需新建虚拟机 cmake:善用find_package()提高效率暨查找JNI支持 如何解决用CMake未定义引用`JNI_CreateJavaVM'? [Linker error] undefined reference to `_imp__JNI_CreateJavaVM@12'
轻松搭建Xposed Hook
星辰之力 · 2019-03-30 · via 博客园 - 星辰之力

 0x2.导入xposed库文件XposedBridgeApi-XX.jar,将库文件放在app/lib目录下,自己创建一个lib目录,别放在libs目录下,否则会出错,然后导入库,修改 Scope 为 Provided0x1.打开AS建立一个没有界面的空工程,然后在清单文件中添加如下代码

<application
    android:allowBackup="true" android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name" android:supportsRtl="true"
    android:theme="@style/AppTheme"
    >
    <!--  使 xposed 模块有效  -->
    <meta-data android:name="xposedmodule" android:value="true"/>
    <!-- xposed 模块名称  -->
    <meta-data android:name="xposeddescription" android:value="Xposed模块示例"/>
    <!-- xposed 模块最低版本  -->
    <meta-data android:name="xposedminversion" android:value="54"/>
</application>

 0x2.导入xposed库文件XposedBridgeApi-XX.jar,将库文件放在app/lib目录下,自己创建一个lib目录,别放在libs目录下,否则会出错,然后导入库,修改 Scope 为 Provided

0x3. 创建一个类Main,并在Main中实现 xposed 中的接口 IXposedHookLoadPackage 并重写方法handleLoadPackage

public class Main implements IXposedHookLoadPackage {
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable{
        //  不是需要 Hook 的包直接返回
        if (!loadPackageParam.packageName.equals("com.example.y0n.hookdemo"))
            return;
        XposedBridge.log("Loaded app: " + loadPackageParam.packageName);
    }
}

0x4. 声明主入口类路径需要在 main 文件夹下建立 assets 文件夹中新建一个 xposed_init 的文件,并在其中声明主入口类,com.example.y0n.hookdemo.MainActivity,如下图所示:

0x5.在重载的函数中写入想要hook的函数等

//  找到对应的方法,进行替换
//  参数 1 :类名
//  参数 2:  方法名
//  参数 3 :实现监听,重写方法
// replaceHookedMethod  替换方法
// beforeHookedMethod  方法前执行
// afterHookedMethod 方法后执行
XposedHelpers.findAndHookMethod(TelephonyManager.class,
        "getDeviceId", new XC_MethodReplacement() {
            @Override
            protected Object replaceHookedMethod(MethodHookParam param)
                    throws Throwable {
                return "this is y0n";
            }
        });
XposedHelpers.findAndHookMethod(TelephonyManager.class,
        "getSubscriberId", new XC_MethodReplacement() {
            @Override
            protected Object replaceHookedMethod(MethodHookParam param)
                    throws Throwable {
                return "this is y0n";
            }
        });

0x6.如果hook的是非系统类,而是第三方类,且含有参数,则第一个参数为要hook的类名字符串,同时需要修改第二个参数的classloader 为当前实例的classloader,第三个参数则为hook的方法名,第四个参数为hook函数的参数,具体根据实际hook的函数来写,第5个参数为hook的重写,参考代码如下:

//  找到对应的方法,进行替换
//  参数 1 :类名
//  参数 2:  方法名
//  参数 3 :实现监听,重写方法
// replaceHookedMethod  替换方法
// beforeHookedMethod  方法前执行
// afterHookedMethod 方法后执行
XposedHelpers.findAndHookMethod("org.sugram.base.MainActivity",
        loadPackageParam.classLoader,
        "onCreate",
        Bundle.class,
        new XC_MethodReplacement() {
            @Override
            protected Object replaceHookedMethod(MethodHookParam param)
                    throws Throwable {
                XposedBridge.log("y0n log : onCreate() is hooked!");
                return 0;
            }
        });

0x7.编译为apk,并安装,重启激活插件并重启手机,插件即可生效,具体插件安装及工具下载请参考:

https://www.xda-developers.com/xposed-framework-for-android-oreo-beta/

0x8.运行效果