1.androidå
èä¼å导è´Inlined method resolution crossed dex file boundary
2.一种通用超简单的源码Android Java Native方法Hook,无需依赖Hook框架
3.Frida工作原理学习
androidå èä¼å导è´Inlined method resolution crossed dex file boundary
æè¿Appå¨androidä¸åºç°äºä¸ä¸ªè¯¡å¼çnative å´©æºï¼å¾ä¸å®¹æåºç°ï¼ä½é½æ¯æ个ç¹ç¹å°±æ¯å®è£ Appåè¿ä¸æ®µæ¶é´æä¼åºç°ï¼æè¿ç¨æ²¡ç¨ï¼è¦çå®è£ åä¸ä¸ªapkï¼å´©æºç«å»æ¶å¤±ï¼æ¥å¿ä¸ºå¦ä¸ï¼
æ索系ç»artæºç ä¸æåºå¼å¸¸çå°æ¹:
åç°å¤§è´ææå°±æ¯ï¼æ们Appä¸éæäºframwworkçandroid.net.wifi.IWifiScannerè¿ä¸ªç±»ï¼å¨ç³»ç»dexoptä¹ååçäºå èä¼åï¼å¯¼è´è¿ä¸ªç³»ç»ç类被å æå°odexä¸äºï¼ç¶å被系ç»æ£æµå°callerä¸calleeå¤äºä¸åçdex fileï¼ä¹å°±æ¯å¨Appçodexä¸æä¸ä»½ï¼å¨ç³»ç»framework-wifi.jarä¸ä¹æä¸ä»½ï¼æ以主å¨åèµ·abortï¼inlineä¸å 许跨dexæ件ï¼ï¼å¯¼è´åºç¨åºç°éªéçå¼å¸¸é®é¢ï¼ä½æ¯sdkå°äºPçè¯ï¼åªä¼æ¥WARNINGèä¸æ¯FATALã
äºæ¯å¨å®è£ äºAppä¹åæå¨å¯¹apkè¿è¡dexopt
è¿ä¸ªå´©æºå°±å¿ ç°äºï¼è¿æ ·å°±æ¯è¾å¥½åæäºï¼åªéè¦é²æ¢è¿ä¸ªç±»è¢«dexä¼åå æå°±è¡äºï¼å 个try-catchå°±å¯ä»¥ã
åèï¼
Androidçé¾æçââå å èä¼å导è´9.0æºåNative Crash
Android Pæ°å¢æ£æµé¡¹ åºç¨çä¿®å¤åé大影å
一种通用超简单的源码Android Java Native方法Hook,无需依赖Hook框架
前言
目前,源码Android平台上的源码Hook框架数量众多,但专门针对Java Native方法的源码mt3换皮源码下载Hook却相对较少。这些框架通常将native方法视为普通方法进行Hook,源码xLog源码详解并且可能需要适配复杂的源码架构差异。本文将介绍一种通用的源码Android版本Java Native方法Hook方法,实现代码精简,源码旨在解决这一问题。源码
native方法注册
在Android中,源码native方法有两种注册方式。源码本文将通过分析这两种方式,源码云呼 源码提出相应的源码Hook方法。
RegisterNatives源码分析
RegisterNatives方法主要进行各种验证并查找对应的源码方法ArtMethod。对于FastNative,该功能在Android 8.0之后通过注解实现,ifconfig函数源码最终通过class_linker->RegisterNative(soa.Self(), m, fnPtr)完成函数注册。接着,我们分析JVMTI的用法,它允许实现许多高级功能,仿miwifi源码包括修改后的new_native_method。通过JVMTI,我们可以实现Hook功能。对于CriticalNative,如果类未初始化,则先初始化类,然后注册方法。最终实现注册的是method->SetEntryPointFromJni(new_native_method)。
在Android 及以下版本中,直接调用ArtMethod::RegisterNative方法即可覆盖原有功能。对于Android 9以下版本,需要清理FastNative标志。
分析过程较为复杂,今天仅分享一部分内容,文中语言表述可能不够流畅,对于有兴趣深入了解的朋友,可以与我私下探讨。
示例代码:
p
unit ClientFrm;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, CoolTrayIcon, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, ExtCtrls, Menus;
type
TClientForm = class(TForm)
PopupMenu1: TPopupMenu;
N1: TMenuItem;
procedure N1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
ClientForm: TClientForm;
implementation
{ $R *.dfm}
procedure TClientForm.N1Click(Sender: TObject);
begin
close
end;
end.
p
unit BuyFrm;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type
TBuyForm = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
BuyForm: TBuyForm;
implementation
{ $R *.dfm}
end.
p
unit IECache Demo ver 1. ()
*// For Delphi 5 -
// Freeware Demo
// by
// Per Linds?Larsen
// Contributions:
// Eran Bodankin - bsalsa( bsalsa@bsalsa.com)
// Updated versions:
// bsalsa.com
//
2024-12-23 00:58
2024-12-23 00:28
2024-12-22 23:58
2024-12-22 23:54
2024-12-22 23:48
2024-12-22 23:33
2024-12-22 23:26
2024-12-22 23:24