Android Hook 机制备忘

B站App Sign算法逆向复盘:从Java Hook到Native MD5的完整链路解析 本文详细解析了B站App Sign算法的逆向工程全链路,从Java层Hook到Native层MD5算法的完整还原过程。通过动态分析与静态还原相结合的方法,帮助安全研究人员掌握API签名机制的逆向技术,包括JNI交互分析、加密算法特征识别等关键技能。 阅读详情

Hook,又叫钩子,通常是指对一些方法进行拦截。这样当这些方法被调用时,也能够执行我们自己的代码,这也是面向切面编程的思想(AOP)。

这里涉及的是 Java 层面的 Hook。

需要涉及的内容:

1、代理模式
2、反射机制

(JDK 动态代理只支持接口,当要代理的类没有实现接口或者为了更好的性能,CGLIB是一个好的选择)

具体的步骤是:

1、找出 Hook 点(即找出被 Hook 的对象)
2、实现对应的代理类
3、使用反射机制替换掉被 Hook 的对象

具体的步骤可以参阅:Android插件化原理解析——Hook机制之动态代理

其他资料:
1、Android Hook技术防范漫谈
2、动态注入技术(hook技术)
3、CGLIB介绍与原理

iOS应用动态分析实战:Frida Hook环境搭建与脚本编写指南 动态代码插桩技术允许开发者和安全研究人员在不修改源代码的情况下,实时监控和修改应用程序的运行时行为。其核心原理是通过向目标进程注入自定义代码片段,拦截函数调用、读写内存,实现对程序执行流的动态控制。这项技术在移动安全、自动化测试和逆向工程领域具有重要价值,广泛应用于加密算法分析、网络协议调试、自动化漏洞挖掘等场景。本文以iOS平台为例,深入讲解如何利用Frida这一强大的动态插桩框架,从零开始搭建越狱环境、部署frida-server,并编写JavaScript脚本Hook Objective-C方法。通过 阅读详情

相关推荐

2024华为Android面试真题解析,kotlin面试题

最后我想说:对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,

2401_83621004的博客 956

反射与动态代理模式

1.反射 反射之中包含了一个「反」字,所以了解反射我们先从「正」开始。 一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的。于是我们直接对这个类进行实例化,之后使用这个类对象进行操作。 反射则是一开始并不知道我要初始化的类对象是什么,自然也无法使用 new 关键字来创建对象了。这时候,我们使用 JDK 提供的反射 API 进行反射调用。反射就是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用对应的方法。 Reflection(反射)是Java被视为动态语言的关键,反射机制

自古深情留不住,总是套路得人心 342

2020华为Android面试真题解析

6 Java 并发知识进阶(下) 229 6.1. 线程池 229 6.2. Atomic 原子类 232 6.3. AQS 236 第二章、Android知识点汇总 242 2.1 Activity 242 2.2 Fragment 249 2.3 Service 252 2.4 BroadcastReceiver 257 2.5 ContentProvider 258 2.6 数据存储 261 2.7 View 261 2.8 进程 276 2.9 Parcelable 接口 281 2.10 IPC

m0_67595789的博客 1081

面试:Android中的HOOK方案

Hook方案很多。

王温暖的博客 1946

hook支付宝源码

修改数据 修改数据

DEM数据下载,拼接,裁剪

目录: 1、数字高程模型(DEM)的数据下载 2、在ENVI里面进行拼接,生成SARscape标准格式的DEM数据3、在ArcGIS里面安装已有的矢量范文,进行掩膜裁剪 4、注意事项 数字高程模型的数据下载: 网址:http://dwtkns.com/srtm30m/ 1.对研究区域进行经纬度选择,然后进行选择下载即可 2.下载的数据是.hgt格式的,按照不同的需求进行转换,这里我是用于ENVI处理,且下载了四个,所有进行了拼接,拼接、格式转换如下 注:可能有时候需要登陆注册,点击下...

weixin_40874151的博客 2万+

盘点Android常用Hook技术

Android平台开发测试过程中,Hook技术是每个开发人员都常用的技术。可以用于绕过系统限制、修改别人发布的代码、动态化、调用隐藏API、插件化、组件化、自动化测试、沙箱等等。Hook...

音视频开发进阶 2765

AEB(自动紧急制动)

AEB系统对静止物体的误判率受多种因素影响,包括传感器精度、算法复杂性以及环境条件等。通过多传感器融合、算法优化、硬件升级以及环境适应性增强等技术手段,可以有效减少误判问题。美国和欧洲的AEB法规均强调了技术性能和安全性,但具体要求有所不同。美国的NHTSA规定更注重高速和复杂场景下的紧急制动能力,而欧盟的ECE R152法规则更侧重于基础的AEB功能覆盖范围。

百态·数智思维 | 聚焦大数据、量化与未来AI 2551

Android打造专有Hook第三篇,实战全量代码规范检查

我相信,搞出来属于自己公司的规范,也只是时间的问题,况且,大部分的场景,我也基本上都会实现,最后也会开源给大家,大家完全可是使用我的,或者在我的基础之上更改即可。

知足常乐 1170

UE5 C++教程(一、基本结构)

虚幻API由三块组成,分别是Runtime,Developer utilitiew,functionality for the Editor,大多数游戏性编程只使用运行时模块,最常见的三个是Corn、CornUObject和Engine。

skycol的博客 1万+

华为OD机试 新系统真题 【数字系统转换器】

华为OD机试 新系统真题【数字系统转换器】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【数字系统转换器】多语言题解。

qq_45776114的博客 544

Android Hook机制

其实Hook并不是Android的专属。其实在Android出现之前,HOOK(钩子,挂钩)是一种实现Windows平台下类似于中断的机制。HOOK机制允许应用程序拦截并处理Windows消息或指定事件,当指定的消息发出后,HOOK程序就可以在消息到达目标窗口之前将其捕获,从而得到对消息的控制权,进而可以对该消息进行处理或修改,加入我们所需的功能,PC端游戏外挂用的就是这个原理。

m0_56144365的博客 3808

整理 钢琴 约翰·汤普森现代钢琴(大汤)

大汤

TS的博客 4006

【备忘】零基础入门Android(安卓)逆向视频

百度网盘├─第一章:Android java 逆向基础4│ 课时1 Android环境配置与常用工具介绍.mp4│ 课时2 调试方法及Smali文件结构.mp4│ 课时3 新版本调试方法及Smali函数文件修改.mp4│ 课时4 JD-Gui进行代码快速阅读分析.mp4│ 课时5 实战演练如何去去除应用中的广告.mp4│...

weixin_34221112的博客 549

从你的全世界路过---陌陌X-SIGN还原

我们上期介绍了hook 接口方式,今天我分析so 层。学习是为了复杂的事情简单化。不用如此繁琐。跟进native_sdbyecbu37x这个函数,我们f5看伪代码 v13 = sign(v9, v10, v11, a6); 跟进这个函数 代码如下(示例): 2.代码贴入 SHA消息摘要java代码如下: java 代码如下(示例): 总结 算法,结合动态调试!

任雪飘的博客 2303

【人工智能 Open AI】程序员怎样提升研发效率?从技术、业务、项目管理等等多个方面来阐述。

程序员要想提升研发效率,需要从技术、业务、项目管理等多方面着手,多靠工具配合实践实现,从而提升研发效率。

AI天才研究院 5529

Android截图限制解除指南:FLAG_SECURE绕过工具让录屏更自由

你是否遇到过想截图记录重要信息,却被"禁止截图"提示阻止的尴尬?当银行应用阻止你保存交易记录,或者游戏应用禁止录制精彩瞬间时,FLAG_SECURE安全标志就像一道无形的墙。今天,我将介绍一款名为DisableFlagSecure的Android工具,它能帮你轻松解除截图限制,让你在任何应用中都能自由截图和录屏。 ## 📱 问题场景:当截图成为奢望 想象这些真实场景:你需要向客服展示应用错误

gitblog_00208的博客 947

SOME/IP协议详解「2.1.2·Payload数据类型序列化」

SOME/IP协议详解「2.1.2·Payload数据类型序列化」 点击返回雪云飞星的SOME/IP协议详解「总目录」 SOME/IP协议详解「2.1.2·Payload数据类型序列化」1 大小端问题2 数据对齐填充问题3 都有哪些数据类型 之前简单的概括了一下序列化/反序列化,就是降维打击,从这一章开始到2.1所有章节结束,都在讲解这个降维打击的详细规则与原理 1 大小端问题 首先什么是大小端: 大端:高字节存放到内存的低地址 小端:高字节存放到内存的高地址 假如有一个数据是0x12345678

雪云飞星的博客 4630

三年的 Android 开发就这水平?我还不如去招应届生,Android事件分发机制及设计思路

第一章 Java 知识点汇总 JVM JVM 工作流程 运行时数据区(Runtime Data Area) 方法指令 类加载器 垃圾回收 gc 对象存活判断 垃圾收集算法 垃圾收集器 内存模型与回收策略 Object equals 方法 hashCode 方法 static final String、StringBuffer、StringBuilder 异常处理 内部类 匿名内部类 多态 抽象和接口 集合框架 Has

m0_65511948的博客 169

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

DisableFlagSecure:彻底解除Android截图限制的终极方案

在日常使用Android设备时,许多用户都曾遇到过这样的困扰:想要在银行应用、支付工具或某些敏感应用中截图保存重要信息,却被系统提示"无法截图,该应用不允许屏幕截图"。这种限制虽然出于安全考虑,但在很多实际使用场景中却带来了极大的不便。 ## 问题根源:FLAG_SECURE安全标志 Android系统提供了FLAG_SECURE安全标志,应用开发者可以通过设置此标志来防止用户截图和屏幕录制。

gitblog_00709的博客 1062

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

2024年安卓最全2024华为Android面试真题解析(2),2024Android大厂面试经验

简历首选内推方式,速度快,效率高啊!然后可以在拉钩,boss,脉脉,大街上看看。简历上写道熟悉什么技术就一定要去熟悉它,不然被问到不会很尴尬!做过什么项目,即使项目体量不大,但也一定要熟悉实现原理!不是你负责的部分,也可以看看同事是怎么实现的,换你来做你会怎么做?做过什么,会什么是广度问题,取决于项目内容。但做过什么,达到怎样一个境界,这是深度问题,和个人学习能力和解决问题的态度有关了。大公司看深度,小公司看广度。大公司面试你会的,小公司面试他们用到的你会不会,也就是岗位匹配度。面试过程一定要有礼貌!

2401_84545884的博客 920

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Frida与夜神模拟器:构建Android应用动态分析沙箱的完整指南

动态插桩技术是现代移动安全分析和应用逆向工程的核心手段,它允许在目标应用运行时注入自定义代码,实时监控和修改其行为。这项技术的原理是通过在内存中拦截和替换函数调用,实现对应用逻辑的深度洞察与控制,无需修改原始安装包。其技术价值在于能够高效地绕过混淆、加密等防护措施,定位关键业务逻辑与安全漏洞。在Android平台,动态插桩广泛应用于安全评估、恶意软件分析、协议逆向和竞品研究等场景。Frida作为当前最流行的动态插桩框架,以其跨平台、脚本化(支持JavaScript/Python)和强大的API著称。本文将详

weixin_30924087的博客 319

android tcp xposed,利用Xposed对Android的so黑盒利用

又是N久没有更新, 真的懒是能变成习惯的, 今天记录一下安卓里的so黑盒利用;一般在逆向安卓的程序时, 重要的算法都在so里, 如果没有OLLVM还好, 如果一旦被VM了, 那么就只能退而其次想其他的解决办法, 那么开始吧0x1 常用的黑盒利用方式123456781. 自己写app, load并调用含有加密算法so不足: 如果算法里有上下文依赖关系, 就得想办法构造, 非常麻烦2. 使用xpose...

weixin_39700394的博客 1234

【先收藏再看系列】Android开发核心知识点笔记,kotlin编译器安卓版

引用类型 动态代理 元注解 Android 知识点汇总 Activity 生命周期 启动模式 启动过程 Fragment 特点 生命周期 与Activity通信 Service 启动过程 绑定过程 生命周期 启用前台服务 BroadcastReceiver 注册过程 ContentProvider 基本使用 数据存储 View MeasureSpec MotionEvent VelocityTrack..

m0_66264798的博客 223

2024华为Android面试真题解析,目前最稳定和高效的UI适配方案

现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!Android架构视频+BAT面试专题PDF+学习笔记,或者私信回复【技能提升】即可获取!

m0_60635321的博客 1209

【先收藏再看系列】Android开发核心知识点笔记,android高级开发面试题

OOM_ADJ 进程被杀情况 进程保活方案 Parcelable 接口 使用示例 方法说明 Parcelable 与 Serializable 对比 IPC IPC方式 Binder AIDL 通信 Messenger Window / WindowManager Window 概念与分类 Window 的内部机制 Window 的创建过程 Activity 的 Window 创建过程 Dialog 的 Window 创建过程 To..

wq221aas的博客 1130
上一篇: 在 styles.xml 中使用 ConstraintLayout 的属性
下一篇: Android Studio 的 editor-fold 标签 与 region
OneDeveloper
博客等级 码龄9年 61粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值