- 浏览: 2196482 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1240)
- mac/IOS (287)
- flutter (1)
- J2EE (115)
- android基础知识 (582)
- android中级知识 (55)
- android组件(Widget)开发 (18)
- android 错误 (21)
- javascript (18)
- linux (70)
- 树莓派 (18)
- gwt/gxt (1)
- 工具(IDE)/包(jar) (18)
- web前端 (17)
- java 算法 (8)
- 其它 (5)
- chrome (7)
- 数据库 (8)
- 经济/金融 (0)
- english (2)
- HTML5 (7)
- 网络安全 (14)
- 设计欣赏/设计窗 (8)
- 汇编/C (8)
- 工具类 (4)
- 游戏 (5)
- 开发频道 (5)
- Android OpenGL (1)
- 科学 (4)
- 运维 (0)
- 好东西 (6)
- 美食 (1)
最新评论
-
liangzai_cool:
请教一下,文中,shell、C、Python三种方式控制led ...
树莓派 - MAX7219 -
jiazimo:
...
Kafka源码分析-序列5 -Producer -RecordAccumulator队列分析 -
hp321:
Windows该命令是不是需要安装什么软件才可以?我试过不行( ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
hp321:
Chenzh_758 写道其实直接用一下代码就可以解决了:JP ...
ImageIO读jpg的时候出现javax.imageio.IIOException: Unsupported Image Type -
huanghonhpeng:
大哥你真强什么都会,研究研究。。。。小弟在这里学到了很多知识。 ...
android 浏览器
Cydiasubstrate对于果粉来说一点也不陌生,越狱必备也提供了很多modules供用户个性化使用。当然Cydiasubstrate也推出了Android版。当然Xposed也能实现了对应的功能,但两者实现的技术手段有些不一样,由于Xposed开源,也有不少相关文章分析了实现方式,其主要原理是替换了/system/bin/app_process这个程序,在机子启动时加载自身的XposedBridge.jar完成对虚拟机的劫持。而Cydiasubstratet并不开源但根据比对两者"installer",我猜测Cydiasubstrate应该是采用注入的方式完成hook的:
总的来说,要学习还是建议Xposed毕竟是开源,要快速部署我还是比较推荐Cydiasubstrate,毕竟开发简洁,也支持Native。这一篇文章主要介绍Cydiasubstrate modules 的java开发。官方网站 http://www.cydiasubstrate.com/ 文档简单明了,也提供了下载地址,也有saurik 就Xposed区别的声明http://www.cydiasubstrate.com/id/34058d37-3198-414f-a696-73e97e0a80db/
编写模块之前我们需要一些部署工作:
1.root手机
由于不舍得拿自己的机子开刀,索性在模拟器上进行了部署我们需要下载一些必备的工具su busybox mkfs.yaffs2.arm下载好了上面必备的工具,我们就开始root 吧
各种安装好后,在adb shell中执行 su grep等扩展命令成功后,证明我们完成了相应的工作,但这时候别急,如果关掉模拟器的话,是不会写到对应system.img里的,当我们下次重新启动模拟器的时候,一切又回到的原点,所以我们还需要如下操作:
接着将该my_system.img替换 $ANDROID_SDK/sdk/system-images/android-xx 下的system.img即可
2.应用设置
安装好com.saurik.substrate.apk之后
3.模块开发
首先得先下载Cydiasubstrate SDK,打开AndroidSDK Manager -> tools -> add on site
不一会就下好了,之后可以开始进行开发,创建一个新工程吧,完成的功能是对系统发送的短信进行监听,首先将如下关键字加入到AndroidManifestxml中:
AndroidManifestxml如下:
我新建的项目src目录如下:
Main是必须包含的,完成一些必要的初始化工作,有initialize函数负责,MS.hookClassLoad的功能在于:当xxxx类要被加载的时候,使用我们自己构造的ClassLoader,我这里是要hook android.telephony.SmsManager类实现对对短信的监听,Main如下:
当然这里我把对应的ClassLoader继续了一次封装,因为要是对多个类进行hook,代码也实现在同一个文件我会有强迫症,看官网的教程更加简洁,SmsHookClassLoader如
下:
主要是我们需要实现:
1.MS.ClassLoadHook中的classLoaded(Class<?> xxxx)函数,其表示在android.telephony.SmsManager第一次被加载的时候,我们要执行的classLoaded的功能,这里我通过反射找到sendTextMessage函数。
2.利用void hookMethod(Class _class, Member member, MS.MethodAlteration alteration);对方法进行hook,第一个参数为classLoaded传下来的类参数,第二个参数为之前反射得到需要hook的方法,第三个参数为MS.MethodAlteration它完成了最后跳转的封装。
3.我们需要实现MS.MethodAlteration.invoked(Object _this, Object... args),在这个方法中完成我们的自定义功能,this表示类,args为该函数的参数,由于我们是监听短信发送,所以,仅仅打印log……
通过这个Application标签,我们知道这段代码被加载在了com.android.mms 我们的短信进程中进行
Cydiasubstrate很简洁,这样下来在hook几个方法动态分析的demo就搞定了,当然官网说支持native,我看了下demo感觉只是说可以通过native实现功能,好像不能hook native函数,也希望了解的人给我一个答案。折腾了一天,虽然实现了功能,没有学到任何东西,除非分析它的工作原理,那么还是洗洗睡吧
总的来说,要学习还是建议Xposed毕竟是开源,要快速部署我还是比较推荐Cydiasubstrate,毕竟开发简洁,也支持Native。这一篇文章主要介绍Cydiasubstrate modules 的java开发。官方网站 http://www.cydiasubstrate.com/ 文档简单明了,也提供了下载地址,也有saurik 就Xposed区别的声明http://www.cydiasubstrate.com/id/34058d37-3198-414f-a696-73e97e0a80db/
编写模块之前我们需要一些部署工作:
1.root手机
由于不舍得拿自己的机子开刀,索性在模拟器上进行了部署我们需要下载一些必备的工具su busybox mkfs.yaffs2.arm下载好了上面必备的工具,我们就开始root 吧
adb shell #mount -o remount,rw /dev/block/mtdblock0 /system adb push su /system/bin/ #chmod 4755 /system/bin/su #exit adb install super.apk adb install busybox.apk
各种安装好后,在adb shell中执行 su grep等扩展命令成功后,证明我们完成了相应的工作,但这时候别急,如果关掉模拟器的话,是不会写到对应system.img里的,当我们下次重新启动模拟器的时候,一切又回到的原点,所以我们还需要如下操作:
adb shell #mkdir /filesname #exit adb push mkfs.yaffs2.arm /filesname adb shell #cd /filesname #./mkfs.yaffs2.arm /system /filesname/my_system.img #exit adb pull /filesname/my_system.img
接着将该my_system.img替换 $ANDROID_SDK/sdk/system-images/android-xx 下的system.img即可
2.应用设置
安装好com.saurik.substrate.apk之后
3.模块开发
首先得先下载Cydiasubstrate SDK,打开AndroidSDK Manager -> tools -> add on site
不一会就下好了,之后可以开始进行开发,创建一个新工程吧,完成的功能是对系统发送的短信进行监听,首先将如下关键字加入到AndroidManifestxml中:
<meta-data android:name="com.saurik.substrate.main" android:value=".Main"/> <uses-permission android:name="cydia.permission.SUBSTRATE"/>
AndroidManifestxml如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.rois.hookdroid" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="com.saurik.substrate.main" android:value=".Main"/> <activity android:name="com.rois.hookdroid.CydiaTest" android:label="@string/app_name" > <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>
我新建的项目src目录如下:
Main是必须包含的,完成一些必要的初始化工作,有initialize函数负责,MS.hookClassLoad的功能在于:当xxxx类要被加载的时候,使用我们自己构造的ClassLoader,我这里是要hook android.telephony.SmsManager类实现对对短信的监听,Main如下:
package com.rois.hookdroid; import com.rois.core.SmsHookClassLoader; import com.saurik.substrate.MS; public class Main { static void initialize(){ MS.hookClassLoad("android.telephony.SmsManager", SmsHookClassLoader.getInstance()); } }
当然这里我把对应的ClassLoader继续了一次封装,因为要是对多个类进行hook,代码也实现在同一个文件我会有强迫症,看官网的教程更加简洁,SmsHookClassLoader如
下:
package com.rois.core; import java.lang.reflect.Method; import android.app.PendingIntent; import android.util.Log; import com.rois.utils.Config; import com.saurik.substrate.MS; public class SmsHookClassLoader implements MS.ClassLoadHook{ private static SmsHookClassLoader smsHookClassLoader; public SmsHookClassLoader() { super(); } public static SmsHookClassLoader getInstance(){ if (smsHookClassLoader == null) { smsHookClassLoader = new SmsHookClassLoader(); } return smsHookClassLoader; } @SuppressWarnings({ "unchecked", "rawtypes" }) public void classLoaded(Class<?> SmsManager) { //code to modify the class when loaded Method sendTextMessage; try { sendTextMessage = SmsManager.getMethod("sendTextMessage", new Class[]{String.class,String.class,String.class,PendingIntent.class,PendingIntent.class}); } catch (NoSuchMethodException e) { sendTextMessage = null; } MS.hookMethod(SmsManager, sendTextMessage, new MS.MethodAlteration() { public Object invoked(Object _this,Object... _args) throws Throwable{ Log.i(Config.TAG,"SEND_SMS"); Log.i(Config.TAG,"destination:"+_args[0]); Log.i(Config.TAG,"source:"+_args[1]); Log.i(Config.TAG,"text:"+_args[2]); return invoke(_this, _args); } }); } }
主要是我们需要实现:
1.MS.ClassLoadHook中的classLoaded(Class<?> xxxx)函数,其表示在android.telephony.SmsManager第一次被加载的时候,我们要执行的classLoaded的功能,这里我通过反射找到sendTextMessage函数。
2.利用void hookMethod(Class _class, Member member, MS.MethodAlteration alteration);对方法进行hook,第一个参数为classLoaded传下来的类参数,第二个参数为之前反射得到需要hook的方法,第三个参数为MS.MethodAlteration它完成了最后跳转的封装。
3.我们需要实现MS.MethodAlteration.invoked(Object _this, Object... args),在这个方法中完成我们的自定义功能,this表示类,args为该函数的参数,由于我们是监听短信发送,所以,仅仅打印log……
通过这个Application标签,我们知道这段代码被加载在了com.android.mms 我们的短信进程中进行
Cydiasubstrate很简洁,这样下来在hook几个方法动态分析的demo就搞定了,当然官网说支持native,我看了下demo感觉只是说可以通过native实现功能,好像不能hook native函数,也希望了解的人给我一个答案。折腾了一天,虽然实现了功能,没有学到任何东西,除非分析它的工作原理,那么还是洗洗睡吧
发表评论
-
jni未释放资源问题。Failed adding to JNI local ref table (has 512 entries)
2016-02-01 14:51 979Native Code 本身的内存泄漏 JNI 编程首先是一 ... -
android ApkPlug使用
2015-12-09 15:14 712直接下载附件吧, 有两个是官方的demo包,还有一个是他们技术 ... -
dynamic-load-apk-Apk动态加载框架使用初体验
2015-12-03 10:40 794因为想要将本网站上的开源代码直接做成一个能显示效果的app,决 ... -
Android动态加载进阶 代理Activity模式
2015-11-30 17:20 880技术背景 简单模式中 ... -
Android NDK rb5 文档之本地活动和应用程序
2015-11-24 22:34 811Native Activities and Applicati ... -
Android NDK rb5 文档之 native_activity.h 文件翻译
2015-11-24 22:30 1003/** * Copyright (C) 2010 The A ... -
Android新技术学习——阿里巴巴免Root无侵入AOP框架Dexposed
2015-11-21 13:49 1785引用阿里巴巴无线事业部最近开源的Android平台下的无侵入运 ... -
Android NDK开发之JNI基础知识
2015-11-21 13:05 1123JAVA层与JNI层数据类型的对应 下面是一个测试方法 pu ... -
ANDROID2.2 JNI 配置luajit2
2015-11-21 11:18 736去http://luajit.org/官网下载最新的版本 在 ... -
在Android平台上加载本地库的危险性[转]
2015-11-13 09:30 1586在2012年KeepSafe的创业初期,我们试图找到一种为An ... -
JNI: 能否用 GetFieldID()/GetStaticFieldID()取得enum变量的属性?
2015-11-06 11:52 1834没有问题的,jni下面一样可以动态获取的 仅供参考! VOI ... -
ndk-stack定位不出崩溃代码行的问题
2015-10-30 08:51 1246NDK开发包中自带的NDK-STACK工具是可以查看崩溃栈信息 ... -
Android.mk文件详解
2015-10-27 09:23 1831Android.mk是Android提供的 ... -
NDK在增加断点时跳不进去,不管用的解决办法
2015-10-26 10:09 1103先看下面的错,如果报的不是这个那就不是我这个问题,那就不用再看 ... -
插件化的基石 -- apk动态加载
2015-09-25 09:13 967Android动态加载技术在蘑菇街的第一次实践,还是在14年的 ... -
warning:deprecated conversion from string constant to 'char *' 解决方案
2015-09-25 09:01 1847char* createClass(){ ret ... -
jni内存释放
2015-09-24 12:03 3671调用GetStringUTFChars,GetDoubleAr ... -
如何不要让ndk-build自动删除.so
2015-08-04 15:33 1157在用ndk-build的时候突然发现在编译完成之后会自动删除a ... -
超简单的NDK单步调试方法
2015-08-03 21:19 599最近为了性能需求,开始搞JNI,白手起搞真心不容易。中间差点崩 ... -
JNI调用java中的类方法和静态方法
2015-08-03 16:46 2754在JNI调用中,肯定会涉及到本地方法操作Java类中数据和方法 ...
相关推荐
然而,使用`Cydia Substrate`也需要对底层编程有深入理解,且在非越狱设备上使用可能需要额外的权限和技巧。 在压缩包文件`cydia_substrate`中,我们可以找到`Cydia Substrate`的相关资源,包括库文件、头文件以及...
CydiaSubstrate 作为 iOS 平台上的一款强大的动态挂钩框架,其核心功能之一就是实现了高效的 Inline Hook 技术。 #### 二、问题背景与分析 在 CydiaSubstrate 的实现中,Inline Hook 主要通过改变目标函数中的指令...
cydia substrate 源码,早期开源的一个版本,目前在实战项目中使用,稳定可靠;cydia substrate主要是做Inline Hook实现,关键入口函数MSHookFunction; 欢迎私聊交流谈论
本文将深入探讨Android Hook的基本概念,并通过Cydia Substrate框架介绍如何在Android设备上实现简单的Hook操作。 首先,理解Android Hook的基础:在Android系统中,大部分应用程序都是基于Java编写的,但它们最终...
4. **应用Hook**:最后,使用Cydiasubstrate或对应的Java库,将这些hook逻辑注入到目标应用中。对于Cydiasubstrate,这通常涉及创建一个substrate插件,定义hook点,并提供替换方法。 在实际应用中,HttpHook有多种...
Cydia Substrate APK,用做hook工具,需要手机root
【标题】:“hook的demo和工具cydia”指的是在iOS设备上进行动态代码 Hook 的实践教程及相关的Cydia Substrate工具。Hook技术是iOS逆向工程中的重要手段,它允许开发者在不修改原始代码的情况下,拦截和修改应用程序...
5. **Hook工具**:项目中的`cydiasubstrate_hooktools-master`可能包含了一些基于Cydia Substrate的Hook工具,用于在iOS环境中对Java和JNI函数进行Hook。这些工具可能需要开发者有一定的iOS和Objective-C背景知识。 ...
Hook编程是一种在软件开发中广泛使用的技术,尤其是在Windows API、Android和React Native等环境中。它允许开发者拦截并修改系统函数调用或者特定程序的行为,从而实现功能扩展、调试、日志记录等多种目的。本篇文章...
Java Hook 和 Android Hook 是两种在Java和Android平台上进行动态代码修改和行为监控的技术。它们主要应用于调试、性能分析、安全检测以及插件化开发等领域。本文将深入探讨这两种技术的概念、原理及其应用。 首先...
"注入安卓进程,并hook java世界的方法"这一主题主要涵盖了如何在Android环境中对Java层进行动态代码注入和函数Hook的技术。 首先,我们需要理解什么是进程注入。在计算机系统中,进程注入是一种技术,它允许一个...
fiddler的编程猫插件,可使用hook,加解密手段
Java是一种高性能、跨平台的面向对象编程语言。它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势...
《HOOK编程》是深入理解计算机系统中一种非常关键的技术,主要涉及程序的动态拦截与调试。HOOK技术在软件开发、系统分析以及逆向工程等领域有着广泛的应用。它允许程序员在程序运行时插入自定义代码,以便监控、修改...
- 第三方库`org.sf.feeling.swt.win32.extension`包含了对Windows API的封装,使得Java程序可以跨过了Java原生API的限制,直接调用Windows系统级别的Hook功能。这里的`lib`目录下的三个`.dll`文件是Windows动态链接...
本篇文章将深入探讨Hook API的核心概念、主要应用场景以及如何实现对ReadFile、WriteFile、LoadLibrary等关键API的挂钩。 首先,我们要理解什么是Hook API。在Windows操作系统中,Hook是一种机制,允许程序在其他...
标题“SSDTFunction_64_Test_Windows编程_ssdthook_”暗示了这是一个关于在Windows 7系统中实现SSDT(System Service Dispatch Table)钩子函数的项目。SSDT是Windows内核的一个核心组件,它包含了操作系统对外提供...