Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Xposed¿ò¼ÜÔ­ÀíÉîÈëÑо¿
 
  4075  次浏览      29
 2019-3-5  
 
±à¼­ÍƼö:
±¾ÎÄÀ´×Ôcsdn,Ö÷Òª½éÉÜÁËXposedµÄºËÐÄÄÚÈÝ£¬Í¨¹ý°¸ÀýµÄ½²½â½øÐÐÁËÒ»¸öÉîÈëµÄÑо¿¡£

Xposed¿ò¼ÜºËÐÄ˼ÏëÔÚÓÚ½«Java²ãÆÕͨº¯Êý×¢²á³É±¾µØJNI·½·¨£¬ÒÔ´ËÀ´±äÏàʵÏÖhook»úÖÆ£¨·ÅÔÚÎÄÕ¿ªÍ·µÄ»°ºÜÖØÒªÅ¶£¬¼Çס£¡£©¡£

Xposed¿ò¼ÜµÄ¼¼ÊõºËÐĽ¨Á¢ÔÚJvmÔ­ÉúµÄJNI»úÖÆÖ®ÉÏ£¬ÎªÁ˶ÔXposed¿ò¼Ü½øÐÐÉîÈë·ÖÎö£¬Í¬Ê±·½±ã´ó¼ÒÀí½â£¬ÎÒÃÇ´ÓÒÔÏÂÈý¸öÎÊÌâ×ÅÊÖ£º

1.DalvikÐéÄâ»úÔÚÖ´ÐÐjava²ã´úÂëʱÈçºÎʶ±ðJNI·½·¨£¿

2.ÔõÑù²ÅÄܽ«java²ãÆÕͨ·½·¨×¢²á³ÉJNI·½·¨£¿

3.Xposed¿ò¼Ü×öÁËʲô£¿

ÓÐÒÉÎÊ£¬ÄǾÍÒ»¸öÒ»¸öÀ´½â¾ö°É¡£

µÚÒ»¸öÎÊÌ⣺DalvikÐéÄâ»úÔÚÖ´ÐÐjava²ã´úÂëʱÈçºÎʶ±ðJNI·½·¨£¿

ÏÈÀ´Á˽âÒ»ÏÂÀàµÄ¼ÓÔØ¹ý³Ì£ºµ±Ò»¸öÀàµÚÒ»´Î±»Ê¹Óõ½Ê±£¬Õâ¸öÀàµÄ×Ö½ÚÂë»á±»¼ÓÔØµ½Äڴ棬²¢ÇÒÖ»»á»ØÔØÒ»´Î¡£ÔÚÕâ¸ö±»¼ÓÔØµÄ×Ö½ÚÂëµÄÈë¿Úά³Ö×ÅÒ»¸ö¸ÃÀàËùÓз½·¨ÃèÊö·ûµÄlist£¬ÕâЩ·½·¨ÃèÊö·û°üº¬ÕâÑùһЩÐÅÏ¢£º

£¨1£©·½·¨´úÂë´æÓں䦣¬

£¨2£©ËüÓÐÄÄЩ²ÎÊý£¬

£¨3£©·½·¨µÄÃèÊö·û£¨public¡¢nativeÖ®Àࣩ£¬ etc...

Èç¹ûÒ»¸ö·½·¨ÃèÊö·ûÄÚÓÐnative£¬Õâ¸öÃèÊö·û¿é½«ÓÐÒ»¸öÖ¸Ïò¸Ã·½·¨µÄʵÏÖµÄÖ¸Õë¡£ÏÂÃæÀ´¿´¿´·½·¨ÃèÊö·ûµÄÑù×Ó¡£

×¢Ò⣺·½·¨ÃèÊö·ûʵ¼ÊÉÏÊÇÒ»¸ö½á¹¹Ìå!

Ö÷Òªµ½ÉÏÃæµÄaccessFlagsÁËÂð£¬Ëü±ê¼Çן÷½·¨µÄÀàÐÍ£¬public¡¢nativeµÈµÈ£¬ËùÒÔ£¬ÒªÊÇÏë°ÑÒ»¸ö·½·¨×¢²á³É±¾µØ·½·¨£¬Õâ¸ö±ê¼ÇÊDZØÐëÒª¸ÄµÄ£¡

ÎÒÃÇÖªµÀÁËaccessFlagsµÄ×÷Óû¹²»¹»µÄ£¬×îºÃ»¹ÊÇÔÙÁ˽âÒ»ÏÂËüÔÚÖ´Ðйý³ÌÖÐÊÇÔõô·¢»Ó×÷Óõģ¬×·±¾ËÝÔ´Âð£¡

ÕâÀï¼òÒªµÄÃèÊöÒ»ÏÂDalvikÐéÄâ»úÖ´ÐдúÂë»ù±¾¹ý³Ì£º

Ò»¸öÀàÔÚÖ´ÐÐ֮ǰÏÈ»á±»×°ÔØ£¬Ö®ºóÒª½øÐÐ×Ö½ÚÂëÑéÖ¤£¨dvmVerifyCodeFlow£¨£©£¬¸ÐÐËȤµÄÈ¥²é²éÔ´Â룩£¬¼ìÑéÍê³ÉÖ®ºóÐéÄâ»ú»á½ô½Ó×ŵ÷ÓÃFindClass()À´²éÕÒ²¢×°ÔØmainµÄ·½·¨Àà¡£´ËºóJNIEnvÀàµ÷ÓóÉÔ±º¯ÊýCallStaticVoidMethodÖ´ÐÐmain·½·¨£¬³ÌÐò¿ªÊ¼ÔËÐС£À´¿´ÏÂÃæÕâÕź¯Êýµ÷ÓÃÁ÷³Ìͼ¡£

ÕÒµ½Ó¦ÓõÄÈë¿Úº¯Êý£¨main£©£¬ÒÀ´Îµ÷ÓÃÖ´ÐС£

×îÖÕ»áµ÷Óõ½dvmCallMethodVÕâ¸ö·½·¨£¬ÏÂÃæÊÇÕâ¸ö·½·¨µÄʵÏÖ¡£

µ÷ÓÃÁËÒ»¸ö¹Ø¼üµÄº¯ÊýdvmIsNativeMethod£¬Õâ¸ö·½·¨µÄ×÷ÓþÍÊÇÅжϺ¯ÊýµÄÀàÐÍ£¬Í¨¹ý±È¶Ô·½·¨ÃèÊö·ûÖеÄaccessFlagsÓëACC_NATIVE£¨³£Á¿£©ÊÇ·ñÏàµÈÀ´Ê¶±ð¸Ã·½·¨ÊÇ·ñÊÇNATIVE·½·¨¡£ÈçÏÂͼ¡£

ÎÒÃÇÏÖÔÚÒѾ­Á˽âÁËjava²ã·½·¨Ö´ÐеÄÁ÷³Ì£¬ÒÔ¼°Ê¶±ðNative·½·¨µÄ»úÀí£¬ÏÂÃæ¾ÍÀ´¾ßÌåÑо¿Ò»ÏÂÈçºÎ½«Ò»¸öÆÕͨ·½·¨×¢²á³ÉÒ»¸öNative·½·¨¡£

µÚ¶þ¸öÎÊÌ⣺ÔõÑù²ÅÄܽ«java²ãÆÕͨ·½·¨×¢²á³ÉJNI·½·¨£¿

ÉÏÃæÊÇxposed.cppÖн«ÆÕͨ·½·¨×¢²áΪNATIVE·½·¨Ê±ËùÖ´ÐеĹؼüÒ»²½¡£½«methodÃèÊö·ûÖеÄaccessFlagsÐÞ¸ÄΪNATIVE·½·¨FLAG.

nativeFunc´æ´¢¸Ã·½·¨Êµ¼Êµ÷Óõı¾µØ·½·¨µÄÖ´ÐÐλÖã¨×¢Ò⣬¿¼Âǵ½¿çƽ̨µÄÎÊÌâÕâÀï´æ´¢µÄ¿ÉÄÜÊÇJNIbridge´úÂëÖ´ÐеÄλÖã¬ÔÚ·ÖÎöxpose¿ò¼ÜʱÔݲ»ÐèÒª¹Ø×¢´Ëϸ½Ú£¬ÓÐDalvik×ÔÐд¦Àí£©£¬½«ÒªhookµÄjava²ã·½·¨×¢²á³É±¾µØ·½·¨£¬Native²ã·½·¨Í³Ò»µÄÈë¿ÚµãÉèÖÃΪxposedCallHander¡£¼ÌÐøÍùÏ¿´¡£

insns´æ´¢¸Ã·½·¨ÕæÊµÖ´ÐеØÖ·£¨Ã»ÓÐ×¢²á³ÉNative·½·¨Ç°µÄÖ´ÐÐλÖã©¡£

Ϊע²áµÄnativeFunc·½·¨²ÎÊýÁбí·ÖÅäµÄ¿Õ¼ä£¬Óëjava×Ô´ø·½·¨µÄµÈ´óС¼´¿É¡£

ÉÏÃæÁ½¸öÎÊÌⶼŪÇå³þÁË£¬ÏÂÃæ¸ÃÀ´¾ßÌåÑо¿Ò»ÏÂXposed¿ò¼Ü¾ßÌå×öÁËʲô¹¤×÷¡£

µÚÈý¸öÎÊÌ⣺£ºXposed¿ò¼Ü×öÁËʲô£¿

XposedÐÞ¸ÄÁËapp_process³ÌÐò£¬ÔÚÖ´ÐеÚÒ»¸öjava³ÌÐò£¨com.Android.internal.os.ZygoteInit£©Ö®Ç°½øÐнػñ,¸Ä±äÖ´ÐÐÁ÷³Ì£¬½øÈëµ½×ÔÉíµÄmainº¯ÊýÌåÄÚ£¬Õⲿ·Öjava²ã´úÂ붼дÔÚÁËXposedBridge.jarÖС£Ö´ÐеÄÈë¿ÚµãÔÚXposedBridge.jar°üÖеÄXposedBridge.java¡£mainº¯ÊýÖ´ÐÐÌåÄÚÖ÷ÒªÍê³ÉÁËÏÂÃæËĸö²¿·Ö¹¦ÄÜ£¬ÎÒÃÇÀ´ÖðÌõÑо¿¡£

initNativeÊDZ¾µØ·½·¨£¬Íê³ÉÁËXposed¿ò¼ÜµÄ³õʼ»¯¹¤×÷¡£

ΪÁË·½±ãXpsoed¿ò¼ÜµÄnative·½·¨¶ÔÉϲãjava·½·¨µÄµ÷Óã¬Ôڸò¿·Ö¶ÔÏà¹Ønative·½·¨½øÐÐÁ˳õʼ»¯¹¤×÷¡£¸Õ²ÅÌáµ½µÄnative²ã·½·¨xposedCallHander»Øµ÷µÄhandleHookedMethodÕæÕýʵÏÖÌå¾Í·ÅÔÚjava²ã¡£Í¬Ê±½«invokeOriginalMethodNative×¢²áΪ±¾µØ·½·¨£¬³õʼ»¯ÁËhook×ÊÔ´ÎļþʱÓõ½µÄ¶ÔÏóµÈ¡£

±È½ÏÖØÒª¡£

initXbridgeZygote()Ö÷ÒªhookÁ˼¸¸öÉæ¼°µ½Ó¦Óýø³Ì´´½¨¡¢Æô¶¯µÄ¹Ø¼üÀࡣеÄÓ¦Óýø³Ì´´½¨Ê±»áµ÷ÓÃÕ⼸¸öÀàµÄÌØ¶¨·½·¨£¨µ÷ÓÃÆäÖеÄÒ»ÖÖ£¬ÓëÓ¦Óýø³Ì´´½¨Ä£Ê½ÓйØÏµ£©£¬Xposed¿ò¼Üͨ¹ý½Ø»ñÓ¦Óýø³Ì´´½¨Ê±µÄÏà¹ØÐÅÏ¢À´¾ö¶¨¶ÔÆä´¦ÀíÂß¼­£¨ÊÇ·ñ¼ÓÔØ¿ª·¢ÈËÔ±ËùдµÄhookÄ£¿é£¬ÓиÐÐËȤµÄÓ¦Óã¬Èç΢ÐÅ¡¢Ïà»úµÈ´´½¨Ê±£¬È¥×¢²áhookÄ£¿éÖÐËùÖ¸¶¨µÄÏà¹Ø·½·¨Îª±¾µØ·½·¨£©¡£

µÚÒ»´¦£¬

ÏÂÃæÒ»¶Î´úÂëÊÇÖ´ÐÐ×Ô¶¨Òå´úÂëµÄʾÀý£¬

ÏÂÃæÕ⼸ÐдúÂëÊÇhookÁËxposedInstaller£¨Xposed¿ò¼ÜÌṩ¸øÓû§µÄ¹ÜÀí¹¤¾ß£©µÄgetActiveXposedVersion·½·¨£¬Èç¹ûϵͳÖеÄXposed¿ò¼ÜûÓÐÕý³£Æô¶¯£¬ÏÔʾµÄ°æ±¾ºÅ²»ÕýÈ·¡£

µÚ¶þ´¦£¬

µÚÈý´¦£¬

ÕâÒ»´¦ÓÃÓÚ´¦Àí×ÊÔ´Îļþhook¡£

ÏÂÃæÔÚÀ´¿´¿´mainº¯ÊýÌåÄÚ×öµÄµÚÈý¼þÖØÒªµÄÊÂÇ飬¶ÁȡϵͳÖзÅÖõÄhookÄ£¿é¡£¼òµ¥µÄ˵¾ÍÊǰÑhookÄ£¿éËæ±ãÕÒ¸öµØ·½¶ª½øÈ¥£¬È»ºó°Ñ¸ÃÄ£¿éµÄ·¾¶Ð´½øconf/modules.listÖоͿÉÒÔÁË¡£

¶ÁÈ¡¡°conf/modules.list¡±ÎļþÖÐдÈëµÄapkÃû³Æ¡£

´Óÿһ¸öapkÖжÁÈ¡Æä¡°/assets/xposed_init¡±ÎļþÖÐÉùÃ÷µÄhookÖ÷Ä£¿éÀàµÄÃû³Æ¡£

classLoader¼ÓÔØ¸÷hookÖ÷Ä£¿éÀà¡£

ÅжϼÓÔØµÄÀàÊôÓÚÄÄÒ»ÖÖÀà±ð¡£

ÅжϼÓÔØµÄÀàÊôÓÚÄÄÒ»ÖÖÀà±ð£¬¸ù¾ÝÀà±ðµ÷Óò»Í¬µÄ´¦Àí·½·¨¡£

¹²ÓÐÈýÖÖ£¬³£ÓõÄIXposedHookLoadPackage

Xposed¿ò¼Ü¼ÓÔØÍê±ÏºóÖ´Ðн«Ö´ÐÐȨ»¹¸øcom.android.internal.os.ZygoteInit£¬Íê³ÉÕý³£µÄϵͳÆô¶¯Á÷³Ì¡£Xposed¿ò¼Ü¼ÓÔØÍê±Ï£¬ÏµÍ³Õý³£Æô¶¯¡£

×îºó£¬¼òµ¥×ܽáһϣ¬Xposed¿ò¼ÜÖ´ÐÐÁ÷³Ì£º

´´½¨ÐÂÓ¦Ó㬻ñÈ¡°üÃûµÈÐÅÏ¢¡£

µ÷ÓÃXC_LoadPackage.callAll£¬ÒÀ´ÎÖ´Ðи÷hookÄ£¿éµÄ´úÂë¡£

Èç¹ûÓаüÃûÆ¥ÅäµÄhookÄ£¿é£¬Ôò×¢²áÄ£¿éÖÐÒªhookµÄ·½·¨Îª±¾µØ·½·¨¡£

µ±¸Ã·½±»µ÷ÓõÄʱºò£¬×ªÒƵ½±¾µØxposedCallHandler¡£

xposedCallHandler»Øµ÷ÉϲãhandlerHookedMethod(ÒòΪ¼ÓÔØµÄhookÄ£¿é´úÂ룬һЩ±äÁ¿¶¼´æ´¢ÔÚjava²ã)¡£

handlerHookedMethodÖ´ÐмÓÔØµÄ¸÷hookÄ£¿é¡£

£¨²»Í¬hookÄ£¿é¿ÉÉèÖÃÓÅÏȼ¶£¬¸ù¾ÝÓÅÏÈ˳ÐòÀ´Ö´ÐУ©

   
4075 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì