Hijack

Android平台dalvik模式下java Hook框架ddi的分析(1)

人走茶凉 提交于 2020-10-02 08:48:15
本文博客地址: http://blog.csdn.net/qq1084283172/article/details/75710411 一、前 言 在前面的博客中已经学习了作者crmulliner编写的,针对Android系统的跨进程 inline Hook的实现即Android native Hook框架adbi的实现。Android Hook框架adbi主要是针对的Android的native函数进行inline Hook操作,那么如果需要对Android系统中Java编写的函数进行Hook,又该怎么操作呢?作者crmulliner后面又实现了针对Android的java函数进行Hook的框架ddi。adbi Hook框架和ddi java Hook框架的实现流程都差不多,首先实现root权限下Android跨进程的so注入,在so库文件被加载注入到目标进程中时,调用该so库文件的构造函数有一次代码执行的机会,利用这一次代码执行的机会既可以进行针对Android系统底层native函数的inline Hook或者.got Hook等,也可以进行针对Android系统的java函数进行dalvik Hook或者art Hook。Android平台的所有跨进程Hook都是基于Android系统root权限下的so注入和一次代码执行机会来实现的,只要能实现Android的跨进程注入

[WPF]使用附加属性处理 ScrollViewer 的滚动轮劫持问题

核能气质少年 提交于 2020-10-01 16:26:27
之前写过一篇博客 关于 ScrollViewer 和滚动轮劫持(scroll-wheel-hijack) ,里面介绍了 ScrollViewer 的滚动轮劫持问题,以及如果解决。当时的做法是继承 ScrollViewer 并重写 OnMouseWheel,全部代码如下: public class ExtendedScrollViewer : ScrollViewer { protected override void OnMouseWheel(MouseWheelEventArgs e) { if (ViewportHeight + VerticalOffset >= ExtentHeight && e.Delta <= 0) return; if (VerticalOffset == 0 && e.Delta >= 0) return; base.OnMouseWheel(e); } } 最近有人提到能不能使用附加属性处理,所以我就试试。暂时发现简单地用附加属性处理,除非查找 VisualTree 上的父节点 ScrollView 并调用它的 LineUp 和 LineDown ,全部代码如下: public class ScrollViewerService { /// <summary> /// 从指定元素获取 CanScrollOuter 依赖项属性的值。 /// <

Android平台dalvik模式下java Hook框架ddi的分析(2)--dex文件的注入和调用

巧了我就是萌 提交于 2020-08-20 06:37:16
本文博客地址: http://blog.csdn.net/qq1084283172/article/details/77942585 前面的博客《 Android平台dalvik模式下java Hook框架 ddi 的分析(1) 》中,已经分析了dalvik模式下 ddi 框架Hook java方法的原理和流程,这里来学习一下ddi框架代码中涉及到的 dex文件的注入和调用。将一个Android的so库文件跨进程注入到另一个进程中,在so库文件的实现里,我们可以做很多的事情,例如:inline Hook,java方法的Hook,dex文件的注入和调用,ndk的jni函数的Hook等等。 1 .ddi框架在进行dex文件的注入和调用是在原来dalvik模式下java方法Hook的基础上修改过来的,在 hijack注入工具将android so库文件注入到目标pid进程时实现android的inline Hook操作,为了保证android的inline Hook操作的顺利执行,需要为注入到目标pid进程中android so库文件定义 .init段或者.init_array段的构造函数,如下图中的my_init构造函数;在inline Hook操作的自定义函数my_epoll_wait里进行dalvik虚拟机模式下的java方法Hook操作。 代码的流程梳理如下: 1.

Android Hook框架adbi的分析(1)---注入工具hijack

本小妞迷上赌 提交于 2020-08-16 12:41:06
本文博客地址: http://blog.csdn.net/qq1084283172/article/details/74055505 一、Android Hook框架adbi的基本介绍 adbi是Android平台的inline Hook框架,和前面博客中提到的libinject和poison注入工具原理差不多,要说具体的相似性的话,poison注入工具可以替换此处adbi的hijack注入工具实现so的注入和函数的Hook。adbi Hook框架和前面poison注入工具实现函数Hook的原理是一样的,先通过进程注入工具将so库文件注入到指定的目标pid进程中,函数Hook的执行在so库文件注入到目标pid中即so库文件被目标pid进程加载的时候执行的,具体的原理可以参考前面的博客 《 Android so注入(inject)和Hook(挂钩)的实现思路讨论 》,在so库文件加载的时候,会首先执行.init段的构造函数,该构造函数的定义方法为: void __attribute__((constructor)) x_init(void) 当我们向目标pid进程注入so库文件时,会最先执行该x_init函数,因此可以实现Hook目标pid进程函数的目的,该x_init函数唯一的不足就是不能传递函数参数。 Android Hook框架adbi的源码地址: https://github

Android Hook框架adbi的分析(2)--- inline Hook的实现

有些话、适合烂在心里 提交于 2020-08-14 07:04:51
本文博客地址: http://blog.csdn.net/qq1084283172/article/details/74452308 一、 Android Hook框架adbi源码中inline Hook实现部分的代码结构 Android Hook框架adbi源码中inline Hook部分的实现代码结构示意图如下所示,hijack代码部分是前面的博客中提到的root下Android跨进程注入so的注入工具,instruments\base代码部分为inline Hook的操作实现,instruments\example代码部分则为Android Hook框架adbi实现Hook系统调用函数epoll_wait的使用例子。 二、 adbi源码中inline Hook实现的详细步骤分析 1 .inline Hook函数被调用的时机 在so库文件加载的时候,会首先执行.init段的构造函数,因此在编写注入到Android目标进程中的so库文件时要定义该构造函数并实现在此处调用inline Hook。inline Hook实现就是在so库文件注入到Android进程中被加载调用该构造函数时被执行的。Android Hook框架adbi基于模块化的设计思想,该构造函数的编写是放在自定义Hook函数的接口中来实现的,在这里就是在Hook函数代码示例instruments\example

Android Hook框架adbi的分析(3)---编译和inline Hook实践

怎甘沉沦 提交于 2020-08-12 23:13:20
本文博客地址: http://blog.csdn.net/qq1084283172/article/details/75200800 一、序言 在前面的博客中,已经分析过了Android Hook框架adbi源码的具体实现,Android Hook框架adbi的实现主要分为两部分,一部分是root权限下的Android跨进程的so注入,一部分是基于Android系统的inline Hook。只要搞清楚了Android系统的跨进程so注入和基于Android系统的inline Hook这两个知识点,理解adbi等Android的Hook框架就不是问题了。Android系统的跨进程so注入和Android的各种Hook非常重要而且它们应用的范围也非常广,Android加固中的反调试对抗、反内存dump对抗,基于ClassLoader的VirtualApp的Hook等等。前面的博客中已经学习了adbi的实现原理,但是仅仅理解原理还不够,实践一下证明adbi的inline Hook是有效的才ok,在接下来的博文将着重记录一下adbi的源码的编译和inlineHook操作实践。 二、Android Hook框架adbi的inline Hook代码的简析 Android Hook框架adbi的inline Hook部分主要代码的简要解析和说明。 带有注释分析的Android

[WPF]使用附加属性处理 ScrollViewer 的滚动轮劫持问题

邮差的信 提交于 2020-08-09 12:43:37
之前写过一篇博客 关于 ScrollViewer 和滚动轮劫持(scroll-wheel-hijack) ,里面介绍了 ScrollViewer 的滚动轮劫持问题,以及如果解决。当时的做法是继承 ScrollViewer 并重写 OnMouseWheel,全部代码如下: public class ExtendedScrollViewer : ScrollViewer { protected override void OnMouseWheel(MouseWheelEventArgs e) { if (ViewportHeight + VerticalOffset >= ExtentHeight && e.Delta <= 0) return; if (VerticalOffset == 0 && e.Delta >= 0) return; base.OnMouseWheel(e); } } 最近有人提到能不能使用附加属性处理,所以我就试试。暂时发现简单地用附加属性处理,除非查找 VisualTree 上的父节点 ScrollView 并调用它的 LineUp 和 LineDown ,全部代码如下: public class ScrollViewerService { /// <summary> /// 从指定元素获取 CanScrollOuter 依赖项属性的值。 /// <

SSH的哪些keys

南笙酒味 提交于 2020-04-10 09:10:44
Known Host Keys 防止中间人攻击。 https://www.ssh.com/ssh/host-key#known-host-keys SSH clients store host keys for hosts they have ever connected to. These stored host keys are called known host keys , and the collection is often called known hosts . In OpenSSH, the collection of known host keys is stored in /etc/ssh/known_hosts and in .ssh/known_hosts in each user's home directory. Each host (i.e., computer) should have a unique host key. Sharing host keys is strongly not recommended, and can result in vulnerability to man-in-the-middle attacks . However, in computing clusters sharing hosts keys may

获取应用自身获取所有Activity的方法。

不想你离开。 提交于 2020-02-27 00:37:17
方法一:PackageManager获取: PackageManager packageManager = getPackageManager(); PackageInfo packageInfo = null; try { packageInfo = packageManager.getPackageInfo( getPackageName(), PackageManager.GET_ACTIVITIES); for (ActivityInfo activity : packageInfo.activities) { Class<!--?--> aClass = Class.forName(activity.name); Log.i("packageManager ","===========activityList======"+aClass); } } catch (Exception e) { e.printStackTrace(); } 方法二:只能查询指定action Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.setPackage(context.getPackageName()); for (ResolveInfo info : context.getPackageManager()