在啟動activity中出現activitynotfoundexception有兩種可能,一種是該activity的應用未安裝,一種是該activity未在androidmanifest中申明。在外掛程式化中,屬於情況一。所以在startactivity中需啟動activity實際是系統中不能找到的,我們又該如何騙過系統,正常啟動外掛程式中的activity呢?這裡就要引入hook的機制了,我們用乙個正常的activity代替這個外掛程式activity騙過系統服務,然後再在自己的程序中拉起外掛程式activity,而這個activity就像乙個殼一樣,幫助我們完成這次欺騙活動。
然後hook的地方需要注意了,在startactivity的流程中找乙個單例,確保這個單例物件在每次startactivity都會被用上,而不會被其他物件代替。在這裡,我們看到流程中activitymanager裡剛好有個單例(基於android o框架)
public
static iactivitymanager getservice()
private
static
final singletoniactivitymanagersingleton =
new singleton()
};
我們想辦法把iactivitymanagersingleton.get() hook掉,來看下singleton是什麼
public
abstract
class singleton
return minstance;}}
}
到這裡可以分析得到,我們只要把minstance 替換掉就可以了。如下:
public
void
hookactivitymanager() , new activityinvokehanlder(am));
instance.set(object, proxy);
} catch (classnotfoundexception e) catch (nosuchfieldexception e) catch (illegalacces***ception e)
}
到這裡雖然我們startactivity中雖然指定的是外掛程式activity,但是在流程中我們用乙個殼activity代替了,系統認為可以正常處理它。
private
class
activityinvokehanlder
implements
invocationhandler
@override
public object invoke(object proxy, method method, object args) throws throwable
if (loaddexutils.plug_activity_name[0].equals(intent.getcomponent().getclassname())
|| loaddexutils.plug_activity_name[1].equals(intent.getcomponent().getclassname())) }}
}return method.invoke(mbase, args);
}}
到這裡,我們開始傳的intent對應activity雖然是外掛程式中的activity,但是在把它交給系統之前,我們做了乙個偷梁換柱的動作,告訴系統乙個已經在androidmanifest中註冊的activity。最終系統經過檢測,這是乙個合法的intent。 Android實現免安裝APK外掛程式 三
雖然startactivity正常了,但是這不是要啟動的activity,豈不是做了無用功。然而事情往往沒那麼簡單,既然系統服務那關已經過了,我們得自己做點事情了。activity的建立及生命週期都是在自己程序中完成的,所以activitythread這個類似乎可以幫我們做事情。注意到activit...
Android實現免安裝APK外掛程式(四)
在獲取資源時,有三個重要的類resources,assetmanager,theme,我們通過context獲取它們的物件 override public assetmanager getassets override public resources getresources override p...
zencart 免登入購買外掛程式安裝
文章出處 134.8 kb,585 次 2.解壓後,將admin includes optiondarrows拷貝到zencart 的對應目錄。注意your template改正為自己的模板名。3 安裝sql指令碼 cowoa.sql 4 在後台啟動cowoa 後台後台 商店設定 cowoa 選擇相...