Android進程注入,android進程
所有代碼在這裡下載:http://download.csdn.net/detail/a345017062/8133239
裡面有兩個exe,inj是一個C層進程注入的例子。inj_dalvik是我寫的Java注入。
C層的進程注入借直接拉的洗大師的開源項目(https://code.google.com/p/libandroidinjector/)
Android的基礎服務大部分都是使用Java寫的,只是C層的注入,想要直接存取的話還是比較麻煩。所以需要在遠端載入一個dex包(代碼中寫死了載入/data/local/inj目錄下的dex)。載入dex需要Dalvik虛擬機器的Context,也就是JNIEnv,這個稍微遇到了一些麻煩,直接在源碼上面編譯的話,構建源碼的編譯環境就比較費時間了,最後還是從源碼中拉出Header檔案,又從My Phone(ZTE N5 4.1.2)中adb pull下來了android_runtime和nativehelper這兩個.so才解決了編譯、連結的問題。
C層載入dex之後,可以調用Java的main方法執行Java代碼了,但是想做一些訪問系統服務的事情的話,沒有Context是不行的,所以通過反射調用ActivityThread,拿到Application。
我最初的想法是使用inj_dalvik注入到system_server進程,然後訪問裡面所有的Android系統服務,但後來發現這樣有兩個問題,dex在system_server進程執行時不能使用PackageManager這樣的遠端服務代理,只能使用ServiceManager.getService("package")直接擷取PackageManagerService執行個體。而且發現PackageManagerServer這樣的服務,介面變動比較頻繁,版本適配上比較麻煩。所以最後還是決定注入到一個user為system的客戶進程,比如com.android.settings。然後整個流程就跑通了。
現在面臨的一個未解決的問題是com.android.setting這樣的進程並不是系統Daemon,不是常駐進程,我們的代碼注入後不能永遠存活。但其它像/system/bin/surfaceflinger這樣的進程,因為本身是C程式,啟動時並沒有AndroidRuntime,無法載入我們的Dex並Java代碼。所以,要麼在需要執行遠端代碼時後台偷偷啟動com.android.settings進程,要麼自己fork出一個具有AndroidRuntime的進程來,並把它註冊到init.rc中。
期待大家能給出個建議或者方案。
資源下載時設定的分數比較高,實在是因為我太窮了。如果親沒有分了,可以關注公用賬戶聯絡我,我會發給親的。
對於android進程意外停止的問題 android開發
使用button 的SetOnClickListener是錯誤的,首先你沒有繼承OnClickListener介面,所以你給button設定的點擊事件其實是activity,還強制轉換為OnClickListener,就好像別人要一扇門,你非要給別人一堵牆,你覺得對嗎?
方法有很多
最簡單的方法就是繼承OnClickListener介面,記住是View.view包下的OnClickListener介面
防止某個進程被注入,應該怎設定
只要搞清楚什麼是“注入”,和注入其它進程的方式,就知道怎麼防禦了。所謂注入,就是程式把自己的代碼放到別的進程的地址空間去執行,來對這個進程進行操作,獲得、修改進程的資料等。把自己的代碼放入別的進程的地址空間,可以讓別的進程載入自己的DLL,也可以直接在別的進程地址空間建立遠程線程。進程注入的方法主要有:(1)修改HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs,全域注入DLL到所有使用User32.dll的進程;(2)訊息鉤子;(3)CreateRemoteThread;(4)Fake DLL。防(1),用RD;防(2)和(3),在AD裡對應的是訪問記憶體和鉤子;防(4)一定程度上可以用FD。白+黑也是(4),但是沒啥好辦法防(無限彈窗流就不要說了)。
這是我的想法,我也才接觸不久防止某進程被注入(武裝該進程)也可以等於:阻止所有程式注入(去掉後來程式的武裝)應用程式配置為: * ----(所有程式)自訂規則:全部允許 -----(程式可以做任何事)受保護的檔案/目錄 那一項的排除中 -----(程式唯獨不能做這件事)阻止的檔案/檔案夾 選你要保護的那個進程想法而已,規則是不是這麼寫的 就不知道了我現在還開的學習模式,打算一直學習一周再開始使用