• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            xiaoguozi's Blog
            Pay it forword - 我并不覺的自豪,我所嘗試的事情都失敗了······習慣原本生活的人不容易改變,就算現狀很糟,他們也很難改變,在過程中,他們還是放棄了······他們一放棄,大家就都是輸家······讓愛傳出去,很困難,也無法預料,人們需要更細心的觀察別人,要隨時注意才能保護別人,因為他們未必知道自己要什么·····

            iOS通過讓本地代碼攔截JavaScript中調用的 window.location=”gap://Class.method/args”命令,來實現從JavaScript到本地代碼之間的通信。在本地 代碼攔截該命令后,解析獲取的參數,然后調用對應的類、方法并傳遞參數。對應的,使用 UIWebView.stringByEvaluatingJavaScriptFromString來實現本地代碼調用JavaScript。

            Android通 過攔截JavaScript的prompt命令實現從JavaScript到本地代碼的通信。JavaScript prompt命令默認會彈出對話框,而PhoneGap的Android本地代碼會攔截該對話框,并進一步取得JavaScript數據。相應 的,Android上的PhoneGap內部,使用Java實現了一個HTTP服務器,通過持久性的XHR連接,JavaScript可以不斷輪詢內部 XHR服務器存儲的信息,從而實現了從Java到JavaScript方向的通信。

            BlackBerry 4.xJavaScript 與本地代碼之間的唯一通信方式是通過document.cookie實現的。JavaScript設定Cookie,本地代碼從Cookie中獲取信息。 對應的,本地代碼也可以設定Cookie,允許JavaScript從Cookie中獲取本地代碼信息。

            BlackBerry WebWorks新 的BlackBerry WebWorks SDK更好地支持了Java與JavaScript之間的交互通信。通過ScriptEngine.addExtension,Java對象可以被暴露給 JavaScript,而對應的Java可以使用ScriptEngine.executeScript來調用JavaScript。

            Windows Phone 7在Windows Phone 7中,JavaScript通過window.external.Notify可以將信息發送給本地代碼。而相應的,WebBrowser.InvokeScript允許本地代碼調用JavaScript。

            posted @ 2013-02-22 15:16 小果子 閱讀(1620) | 評論 (0)編輯 收藏

            瀏覽器探究——執行網頁跳轉

            Main線程中執行。

            UrlInputView

            控件UrlInputView執行OnEditorAction->finishInput

            /**

             *url/search input view

             *handling suggestions

             */

            public class UrlInputView extendsAutoCompleteTextView

                   implements OnEditorActionListener,

                   CompletionListener, OnItemClickListener, TextWatcher

            由此可見,UrlInputView即輸入網址的那個控件,該控件包括輸入URL和執行搜索輸入。

            Controller

            在經過UrlInputView的處理后,會調用Controller.handleNewIntent。

            Controller是瀏覽器中最重要的類,作為整個瀏覽器的主控類。Controller中有IntentHandler,這里會調用IntentHandler.onNewIntent

            IntentHandler

            //Handle all browser related intents

            這里對一些特殊的URL做處理這里還包含了一些debug信息,比如”about:debug.dom.file"這種形式的網址。如果是普通的 url,不需要做特殊處理,則執行到最后執行Controller.loadUrlDataIn,即經過了IntentHandler后又回到了 Controller。

            Controller

            /**

                * Load UrlData into a Tab and update the title bar to reflect the new

                * load.  Call this instead ofUrlData.loadIn directly.

                * @param t The Tab used to load.

                * @param data The UrlData being loaded.

                */

            經過簡單的處理,會把要加載的url作為參數調用被顯示的tab,即執行Tab.loadUrl。這樣看來Controller還只是個橋梁的作 用,把從UrlInputView得到的url,交給IntentHandler做處理,然后再把url交給Tab做實際的加載。

            Tab

            //Class for maintaining Tabs with a mainWebView and a subwindow.

            Tab作為一個窗口的抽象概念而存在,對一個窗口的操作都需要通過Tab來進入。另外有個TabControl用來管理所有的Tab.

            執行語句mMainView.loadUrl。這個mMainView是個WebView。從這終于進入了framework的webkit層了。

            WebView

            WebView作為Tab的核心控件,負責網頁的真正的加載,顯示等操作,是framework/webkit中最主要的類。通過Tab來找到WebView.

            在WebView.loadUrl->WebView.loadUrlImpl中會向WebViewCore發消息,

            WebViewCore

            該類在一個獨立的線程中運行,該類主要通過Message,Handler的機制在WebView與WebViewCore之間通訊的,這里 WebView是在Main線程中,而WebViewCore是在單獨的 WebViewCoreThread線程中。WebViewCore是 framework/webkit核心類,它在單獨的線程中來接收消息,每個消息相當于一個請求的任務,而這個WebViewCore相當于一個服務,它 在消息循環中不停的接收任務(消息),然后處理任務,然后再接收下一個任務(消息)。任務的執行很多是通過jni調用c層webkit來操作的。在c層 webkit有webkit/Source/WebKit/android/jni/WebViewCore.cpp與該java層的 WebViewCore對應。即這個WebViewCore是java層與c層的一個主要橋梁。

            在WebView.loadUrlImpl在執行了mWebViewCore.sendMessage(EventHub.LOAD_URL, arg);則WebViewCore接收到LOAD_URL任務,執行對它的處理。

            WebViewCore中有BrowserFrame成員

            BrowserFrame

            BrowserFrame extends Handler它也有很多JNI與C層的webkit的Webkit/Source/WebKit/android/jni /WebCoreFrameBridge.cpp對應。它用來處理頁面的具體情況,即Frame,這個Frame是一個具體的頁面的概念。

            WebViewCore.loadUrl會調用BrowserFrame.loadUrl。BrowserFrame會調用到WebCoreFrameBridge.cpp的LoadUrl。

            這里略去c層的處理部分。

            WebCoreFrameBridge.cpp的LoadUrl執行后會執行到WebCoreFrameBridge.cpp的loadStarted,這里又會回調BrowserFrame.loadStarted函數。

            /**

                * native callback

                * Indicates the beginning of a new load.

                * This method will be called once for the main frame.

                */

            即通過BrowserFrame的loadUrl在c層做處理后,又回調到BrowserFrame的loadStarted。

            這里在理一下,主線程中有Tab,Tab里有WebView。即WebView也是運行在主線程的。而WebView里有WebViewCore,WebViewCore又是運行在一個單獨的線程里的。

            那么多個WebView是否就對應多個WebViewCore和多個WebViewCore線程呢?

            看下WebView,WebView的構造函數中會mWebViewCore= new WebViewCore(context, this, mCallbackProxy, javaScriptInterfaces);創建了WebViewCore對象,即每個WebView都有個WebViewCore對象。但是 WebViewCore中的WebCoreThread是一個靜態的,即一個單例的。而這個WebCoreThread中運行的 privatestatic Handler sWebCoreHandler;也是個靜態的。

            由此可見WebViewCore類本身就是個外殼,真正處理任務的是WebCoreThread及其里面的sWebCoreHandler,這個真 正處理任務的是靜態的,只有一份,WebViewCore這個外殼只是溝通webView與WebCoreThread的橋梁,相當于一個代理類。是 WebCoreThread提供給外面的處理接口。

            那么BrowserFrame呢?在WebViewCore的構造最后會發送一個INITIALIZE的消息給 WebCoreThread,WebCoreThread接收到后會執行WebViewCore.initialize,這個函數會構造 mrowserFrame。即每次構造WebViewCore時同樣會構造一個BrowserFrame。但是為什么不在主線程中創建呢?一方面它是繼承 自Handler,這個Handler需要在WebViewCoreThread線程中運行,所以需要在該線程來創建。另一方面在它的構造中需要創建 JWebCoreJavaBridge這個是C層的類,貌似這個類也需要在WebViewCoreThread線程中創建和銷毀才行。

            由上分析可知,WebView包含一個WebViewCore,WebViewCore包含一個BrowserFrame。多個 WebViewCore共同對應唯一的一個WebCoreThread。WebViewCore只是個外殼,WebCoreThread作為任務的處 理,WebCoreThread主要就是個大Handler不停的處理接收到的任務,WebCoreThread會調用很多jni來調用webkit接 口,BrowserFrame也有很多jni來調用webkit接口。由他們的組成情況又可知WebCoreThread直接調的jni是多個 WebView共同的,即不跟具體的WebView相關,而通過BrowserFrame調用的則跟一個具體的WebView相關了。

            CallBackProxy

            /**

             *This class is a proxy class for handling WebCore -> UI thread messaging. All

             *the callback functions are called from the WebCore thread and messages are

             *posted to the UI thread for the actual client callback.

             */

            /*

             *This class is created in the UI thread so its handler and any private classes

             *that extend Handler will operate in the UI thread.

             */

            class CallbackProxy extends Handler {

            另外還有個類CallBackProxy。它存在于WebView,WebViewCore,BrowserFrame中。在WebView構造函 數中創建,并在WebViewCore和BrowserFrame構造函數中作為參數傳入并賦值給它們內部的引用。可見CallBackProxy是 WebViewCore和BrowserFrame向WebView回調的橋梁。

            CallBackProxy是一個Handler,它在主線程中被創建,即WebViewCore和BrowserFrame會通過發消息的方式將 需求傳遞到主線程的CallBackProxy中,CallBackProxy的事件處理循環會執行相應的處理。可見主線程中WebView通過 WebViewCore發消息給WebViewCoreThread線程執行操作,WebViewCoreThread線程又會通過 CallBackProxy回調消息給主線程執行處理。

            再回到BrowserFrame.loadStarted處。

            BrowserFrame.loadStarted會調用 CallBackProxy.onPageStarted,CallBackProxy.onPageStarted中會給發PAGE_STARTED消 息,主線程中的CallBackProxy的handleMessage會執行處理。在處理時會執行 WebViewClient.onPageStarted。

            WebViewClient

            mWebViewClient本身只是提供一個接口基類,Tab中private finalWebViewClient mWebViewClient = new WebViewClient()

            // WebViewClient implementation for themain WebView

            //Set the WebViewClient that will receivevarious notifications and requests. This will replace the current handler.

            這個WebViewClient會傳給Tab中的WebView的CallbackProxy。這個WebViewClient會讓CallbackProxy返回信息或回調處理給Tab。

            回到WebViewClient.onPageStarted,這里做了一些判斷處理后,調用WebViewController.onPageStarted。

            WebViewController

            //WebView aspect of the controller

            public interface WebViewController

            在Tab的構造時,WebViewController會作為參數傳入,并設置給Tab。那么Tab中的WebViewController到底是什么?Tab是在TabController中創建的,而Tab構造時傳入的是Controller。

            public class Controller implementsWebViewController, UiController

            由此可見Tab中的WebViewController其實就是對應Controller。只是通過WebViewController接口作為引用的。即Tab中只關心Controller的WebViewController接口部分。

            這樣就可以看出BrowserFrame通過消息與主線程中的CallbackProxy處理循環關聯,CallbackProxy又通過 WebViewClient與Tab關聯,回調了Tab提供的接口,而Tab又通過WebViewController接口,調用了Controller 這個核心類的函數。即調用到WebViewController.onPageStarted,也即是 Controller.onPageStarted.

            Controller.onPageStarted中一個主要的處理是

            if (!mNetworkHandler.isNetworkUp()) {           view.setNetworkAvailable(false);       }這里判斷網絡是否是激活狀態,如果不是激活 狀態則執行WebView.SetNetworkAvailable(Boolean networkUp)

            /**     * Inform WebView ofthe network state. This is used to set    * the JavaScript property window.navigator.isOnline and     * generates the online/offline event asspecified in HTML5, sec. 5.7.7     *@param networkUp boolean indicating if network is available     */

            該函數其實就是像WebViewCore發送SET_NETWORK_STATE消息,好吧,又回到了WebViewCoreThread線程了, 處理的方式是直接BrowserFrame.sJavaBridge.setNetworkOnLine。這個函數是個jni函數,其調用的是c層 JavaBridge的函數。這個jni函數主要就是通知c層WebCore網路狀態已經變化,并把最新的網絡狀態告訴WebCore。

            由此可見WebView.setNetworkAvailable還是個挺重要的函數,通過它才能告訴底層網絡的狀態。

            那么額外看下網絡狀態如何獲取并傳遞的,在loadUrl發起加載url這塊判斷了一次,即當無網絡時主動通知一次。其他的呢?

            在NetworkStateHandler中會注冊一個BroadcastReceiver,該receiver會關注 ConnectivityManager.CONNECTIVITY_ACTION廣播,該廣播是在網絡發生連接變化時被發出,該receiver在接收 到網絡連接變化的廣播后,會查詢當前的連接情況,然后執行NetworkStarteHandler.onNetworkToggle,這個函數里面就會 調用WebView.setNetworkAvailable,也即跟上述描述的那樣,給WebViewCoreThread線程發消息,通知c層 WebCore網絡的最新狀態。

            這樣就清楚了,網絡廣播時會通知C層最新狀態,在執行loadUrl時,如果網絡不可用也會通知C層網絡最新狀態。

            這里先跨過Controller.onPageStarte的其他處理過程。此次任務處理完畢。

            此時WebViewCoreThread線程中BrowserFrame仍然處于c層的LoadUrl中,此時的調用棧為:

            BrowserFrame.nativeLoadUrl

            BrowserFrame.loadUrl

            WebViewCore.loadUrl

            這里又會回調BrowserFrame.shouldInterceptRequest,它會調用BrowserFrame.inputStreamForAndroidResource函數

             /**
                 * Get the InputStream for an Android resource
                 * There are three different kinds of android resources:
                 * - file:///android_res
                 * - file:///android_asset
                 * - content://
                 * @param url The url to load.
                 * @return An InputStream to the android resource
                 */

            這個函數會對幾種特殊的url做不同的處理,當輸入一個標準的http的url時,該函數不起什么作用。

            BrowserFrame.shouldInterceptReques接下來會調用 CallbackProxy.shouldInterceptRequest,看到調用CallbackProxy的函數,基本上就是要發消息給主線程讓 主線程去處理任務了,這里發送了LOAD_RESOURCE消息,主線程接收后執行WebViewClient.onLoadResource。回到 BrowserFrame.nativeLoadUrl處,此時這個jni的函數終于執行完畢,也不再回調其他函數了,該函數完 成,WebViewCoreThread線程執行完LoadUrl的處理。

            當沒有連接網絡時,有個單獨的線程會執行JWebCoreJavaBridge.signalServiceFuncPtrQueue這個JNI的 回調函數,該回調函數會發FYBCPTR_MESSAGE消息給WebViewCoreThread線程,但處理函數是 JWebCoreJavaBridge.handle,由此可見WebViewCoreThread線程不僅僅有一個Handler在處理事件.

            JWebCoreJavaBridge

            JWebCoreJavaBridge extends Handler 可見JWebCoreJavaBridge也是個Handler也是在WebViewCoreThread線程中運行的,只是發送消息的線程不是主線程, 是另一個單獨的線程,并且消息的發送來源是JNI的回調。

            JWebCoreJavaBridge對應的JNI是webkit/Source/WebKit/android/jni/JavaBridge.cpp的函數。

            JWebCoreJavaBridge處理FYBCPTR_MESSAGE消息時會調用一個JNI函數,在JNI函數里又會回調BrowserFrame.reportError。

            又是跟上面類似的流程,BrowserFrame.reportError調用CallbackProxy.onReceiveError,這個 CallbackProxy里會發消息REPORT_ERROR,然后主線程接收消息,執行 WebViewClient.onReceivedError。

            接著又是收到FUNCPTR_MESSAGE消息,調用nativeServiceFuncPtrQueue,但是這里回調了 BrowserFrame.loadStarted,然后的處理流程跟上述的LoadUrl中調用BrowserFrame.loadStarted過程 一樣。

            接著WebViewCoreThread線程又是收到FUNCPTR_MESSAGE消息,調用 JWebCoreJavaBridge.nativeServiceFuncPtrQueue,WebViewCore.contentDraw被調用, 該函數發送WEBKIT_DRAW,處理該消息會執行繪制的操作。

            接著WebViewCoreThread線程中JWebCoreJavaBridge.handleMessage又被調用,還是 FUNCPTR_MESSAGE消息,仍然是調用nativeServiceFuncPtrQueue。但此時BrowserFrame收到 loadFinished的回調,發PAGE_FINISHED消息,主線程接收消息處理時會執行WebView.onPageFinished和 WebViewClient.onFinished.

            http://blog.csdn.net/hxwwf/article/details/7281318
            posted @ 2013-02-22 15:07 小果子 閱讀(1651) | 評論 (0)編輯 收藏

            1、使用軟件更新的方式:

            打開Eclipse -> Help -> Install New Software 然后在彈出對話框的 Work with 框中輸入如下的地址,回車。

            http://update.aptana.com/update/studio/3.2/

            然后就會一步步選擇需要安裝的組件即可。

            2、在Eclipse 4.2 上安裝 Aptana 3.2遇到的錯誤,提示找不到 org.eclipse.update.ui 0.0.0

            通過google(這種時候記得別使用百度),看到有同樣的問題:

            http://boards.developerforce.com/t5/General-Development/Trouble-with-Force-com-IDE-installation-in-Eclipse-4-2/m-p/480891#M73687

             

            其中的有人回答:

            Hi, After i am downloadinng org.eclipse.update.ui_3.2.300.v20100512.jar and org.eclipse.update.ui.source_3.2.300.v20100512.jar files from the below site and placed it under eclipse/plugins directory and it worked for me.http://grepcode.com/snapshot/repository.grepcode.com/java/eclipse.org/3.6/org.eclipse.update/ui/3.2.... thanks, Ravi
             
            按照提示的這個網址,去下載 ui組件,放置到eclipse目錄的 plugins 之中,重啟eclipse,再次安裝即可成功。
             
            注:Eclipse 4.2的update ui,在這里:http://grepcode.com/search /?r=repository.grepcode.com$java$eclipse.org$4.2&start=20&query=org.eclipse.update+ui+3.2....&entity=project
             
            另外如果要安裝Aptana直接輸入:http://download.aptana.com/studio3/plugin/install 進行更新即可。

            Re: Trouble with Force.com IDE installation in Eclipse 4.2

            ‎08-09-2012 10:06 AM

            Update:

             

            In the post I linked above: http://boards.developerforce.com/t5/General-Development/Install-Eclipse-Juno-4-2-with-Force-com-IDE/..., there's been a solution that worked for me.

             

            To Quote Zokito:

             

            08-09-2012 09:04 AM

            Hi,

             

            cause of the problem lies here:

             

            http://www.eclipse.org/eclipse/development/porting/4.2/incompatibilities.html

            (search for org.eclipse.update.ui)

             

            It should be possible to fetch the deependency automatically through the marketplace but for me it's not working.... so what would you need to do is install the org.eclipse.update.ui manually from e.g.

            http://www.java2s.com/Code/Jar/o/Downloadorgeclipseupdateui32300v20100512jar.htm

             

             

            extract it and than copy the jar file to your eclipse/plugins/ directory. 

            Start Eclipse again and then try to install the Force IDE plugin.

             

             

            this solved the issue for me

             

            Hope this is helpful!

             

            Kelly

            posted @ 2013-02-22 10:25 小果子 閱讀(1716) | 評論 (0)編輯 收藏

            android root權限獲取的教程有很多,為了讓大家更進一步的了解root的奧秘所在,靈客風特為您奉獻本文,希望對您有所幫助。

            Android的應用程序入口肯定是java程序。應用程序的啟動者是由系統臨時根據Androidmanifest.xml中定義的權限而創建的臨時用戶。而不像linux那樣是使用登陸者的身份啟動,從而使得進程具有登陸者的所有權限。這也是Android的安全機制之一。

            新的權限機制也帶來新的問題,Android給應用程序的權限是按功能來分,java雖然可以訪問文件系統。但由于應用程序本身是臨時用戶啟動,這個臨時用戶權限十分有限。因此誕生了<越獄/root機器>這樣的產物。

            其實root機器不是真正能讓你的應用程序具有root權限。它原理就跟linux下的像sudo這樣的命令。在系統的bin目錄下放個su程序并屬主是root并有suid權限。則通過su執行的命令都具有Android root權限。

            Su的源代碼網上也有,有興趣的同學去google下。

            當然使用臨時用戶權限想把su拷貝的/system/bin目錄并改屬性并不是一件容易的事情。這里用到2個工具跟2個命令。工具就是busybox。不熟悉的同學可以去網上google下。這個太有名了我就不多說了。

            把busybox拷貝到你有權限訪問的目錄然后給他賦予4755權限,你就可以用它做很多事了。

            當然busybox只能不能提升權限,真正提升權限的是ratc這個程序,這個程序中一鍵root包里面可以找到,作用是rooting在adb的shell。

            網上介紹Ratc的文章不多,它是rage against the cage 的縮寫。是真正的提升權限的破解程序。雖然我沒看過源代碼,但估計是利用adb源代碼部分內容來實現的,原理估計跟模擬器使用adb shell登陸可以獲得root shell差不多。(因為它運行需要adb連接才會成功)。

            使用busybox前先運行ratc,這樣運行busybox的UID將是0,也就是root。

            首先把system目錄改成可讀性的:busybox mount -o remount,rw /system,

            當然你還不能改下面的文件,因為system下文件的所有者都不是你。

            但你可以偷梁換柱把system下的目錄給換掉。

            使用命令Busybox mount -t tmpfs none /system/xbin,呵呵這下xbin目錄你隨便寫了。

            將su跟busybox弄過去cp /data/data/xxx/su /system/xbin。然后賦權限chmod 4755 /system/xbin/su。

            然后使目錄生效busybox --install -s /system/xbin,

            別忘善后busybox mount -o remount,ro /system去掉system可寫。

            這樣只是臨時的,只能用su跟busybox能執行一些原來系統沒有權限執行的命令而已。當系統重啟后/system/xbin又變為原來的文件。 真正要改系統的話需要自己寫內核代碼(相當于windows的驅動程序)。內核文件擁有所有權限。使用busybox命令insmod /data/data/xxx/xxx.ko裝載內核文件,你想干嘛就可以干嘛了。

            當然我們不是搞破解的沒必要去改別人的機器,我們只是想讓自己應用程序具有root權限而已。所以臨時的su就可以了。我們用c++寫一個可執行文 件。使用socket可以跟java的程序通訊。然后將需要使用root權限才能執行的代碼放在c++程序里,然后java程序中創建新的su進程,將 c++程序帶全路徑作為參數1。啟動后就可以通過socket調用c++函數去執行你想干的事了。

            最后程序執行完了別忘了善后busybox umount /system/xbin。

            最后說說要注意的事情,如果機器已經擁有Android root權限的話就不需要做這些事情了,但root過的機器都有裝有個權限管理的程序。會彈出對話框。但這個程序管理能力有限,如果不想讓他彈出的話。也許可以通過改su文件名來解決。有興趣的同學不妨試試。


            現在Android系統的root破解基本上成為大家的必備技能!網上也有很多中一鍵破解的 軟件,使root破解越來越容易。但是你思考過root破解的原理嗎?root破解的本質是什么呢?難道是利用了Linux kernal的漏洞嗎?本文將簡單對root的破解原理進行分析。

                 網上有一篇文章已經對root破解的基本原理進行了簡單介紹,大家可以先參考一下《android root權限破解分析》,本文只能說對root原理進行了方向性的描述,但是在一些具體的方面沒有描述清楚。本文將會對其進行一些必要的擴展和補充。

                 如果你進行過程序開發,在root過的手機上面獲得root權限的代碼如下:

            1. Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream());  
            2. ......  
            3. os.writeBytes("exit\n");  
            4. os.flush();  

                 從上面代碼我們可以看到首先要運行su程序,其實root的秘密都在su程序中,《android root權限破解分析》中講到Android系統默認的su程序只能root和shell可以用運行su,這個是安全的。如果把這個限制拿掉,就是root破解了!

                 下面我們仔細分析一下程序是怎樣獲得root權限的,如果對Linux的su命令熟悉的朋友可能知道su程序都設置SUID位,我們查看一下我的手機(已經root破解)上的su權限設置,

                  我們發現su的所有者和所有組都是root,是其實是busybox的軟鏈接,我們查看busybox的屬性發現,其設置了SUID和SGID,并且所有者和所有組都是root。SUID和SGID的作用是什么呢?如果你不太清楚,請參考《Linux進程的實際用戶ID和有效用戶ID》,這樣運行busybox的普通用戶,busybox運行過程中獲得的是root的有效用戶。su程序則是把自己啟動一個新的程序,并把自己權限提升至root(我們前面提到su其實就是busybox,運行期它的權限是root,當然也有權限來提升自己的權限)。

                 再強調一下不光root手機上su需要設置SUID,所有的Linux系統上的su程序都需要設置SUID位。請參考一下UC服務器的su的權限情況:

                 我們發現su也設置了SUID位,這樣普通用戶也可以運行su程序,su程序會驗證root密碼,如果正確su程序可以把用戶權限提高的root(因為其設置SUID位,運行期是root權限,這樣其有權限提升自己的權限)。

                 這樣我們就可以看出其實Android系統的破解的根本原理就是替換掉系統中的su程序,因為系統中的默認su程序需要驗證實際用戶權限(只有root和 shell用戶才有權運行系統默認的su程序,其他用戶運行都會返回錯誤)。而破解后的su將不檢查實際用戶權限,這樣普通的用戶也將可以運行su程序, 也可以通過su程序將自己的權限提升。

                 到這里大家對root破解不感到神秘了吧。root破解沒有利用什么Linux內核漏洞(Linux內核不可能有這么大的漏洞存在),可以理解成root 破解就是在你系統中植入“木馬su”,說它是“木馬”一點兒都不為過,假如惡意程序在系統中運行也可以通過su來提升自己的權限的這樣的結果將會是災難性 的。所以一般情況下root過手機都會有一個SuperUser應用程序來讓用戶管理允許誰獲得root權限,也算是給系統加了一層保險吧!

                 如上是Simon的個人對root破解的一些認識,如果有錯誤的地方,歡迎朋友們指正.

            posted @ 2013-02-20 16:07 小果子 閱讀(7673) | 評論 (0)編輯 收藏
            – Makefile (全局的Makefile文件)
            – bionic (Bionic含義為仿生,這里面是一些基礎的C庫源代碼)
            – bootloader (引導加載器)
            build目錄中的內容不是目標所用的代碼,而是編譯和配置所需要的腳本和工具)
            – build (build目錄中的內容不是目標所用的代碼,而是編譯和配置所需要的腳本和工具)
            – cts (Android兼容性測試套件標準)
            – libcore (核心庫相關)
            Dalvik虛擬機 針對嵌入式設備優化的Java
            Java虛擬機)
            – dalvik ( Dalvik虛擬機,針對嵌入式設備優化的Java虛擬機)
            – development (創建應用程序所需要的模板和工具)
            qcom,
            – device (與具體設備相關的一些編譯腳本和庫,如htc,qcom,samsung等)
            – external (Android使用的一些外部的開源框架和庫)
            (應用程序的框架層,SDK
            SDK的接口基本都是在這里實現的)
            – frameworks (應用程序的框架層,SDK的接口基本都是在這里實現的)
            – hardware (與硬件相關的庫)
            Linux2.6
            – kernel (Linux2.6的內核源代碼)
            – ndk (本地開發套件--C語言開發套件)
            --C
            Android的各種應用程序)
            – packages (Android的各種應用程序)
            – prebuilt (Android在各種平臺下編譯的預置腳本)
            – sdk (SDK及模擬器)
            Android的底層的一些庫)
            – system (Android的底層的一些庫)
            `– vendor (廠商私有的代碼)
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            packages/
            |– apps (各種應用程序,如聯系人、瀏覽器等)
            |– experimental (一些實驗性的項目,如錯誤報告)
            |– inputmethods (輸入法相關)
            |– providers (各種數據源實現,如聯系人數據、媒體庫等信息)
            |– wallpapers (各種壁紙程序)
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            Android Framework功能介紹
            android.app :提供高層的程序模型和基本的運行環境。
            android.content :包含對各種設備上的數據進行訪問和發布。
            android.database :通過內容提供者瀏覽和操作數據庫。
            android.graphics :底層圖形庫,包含畫布、點、矩形等,可以將其直接繪制到屏幕上。
            android.location :定位和相關服務的類。
            android.media :提供一些類管理多種音頻、視頻的媒體接口。
            android.net :提供幫助網絡訪問的類,超過通常的 java.net.* 接口。
            android.os :提供了系統服務、消息傳輸和 IPC 機制。
            android.opengl :提供 OpenGL 的工具。
            android.provider :提供訪問 Android 內容提供者的類。
            android.telephony :提供與撥打電話相關的 API 交互。
            android.view :提供基礎的用戶界面接口框架。
            android.util :涉及工具性的方法,例如時間日期的操作。
            android.webkit :默認瀏覽器操作接口。
            android.widget :包含各種 UI 元素(大部分是可見的)在應用程序的布局中使用
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            build/
            |– buildspec.mk.default
            |– cleanspec.mk
            |– core (各種以mk為結尾的文件,它門是編譯所需要的Makefile)
            |– envsetup.sh
            |– libs
            |– target (包含board和product兩個目錄,為目標所需要文件)
            |– tools (編譯過程中主機所需要的工具,一些需要經過編譯生成)
            其中,core中的Makefile是整個Android編譯所需要的真正的Makefile,它被頂層目錄的Makefile引用。
            基本介紹到此,文章參考網絡中各種文章,如果有侵權啥行為的,請聯系刪除。
            posted @ 2013-02-20 14:16 小果子 閱讀(525) | 評論 (0)編輯 收藏
            僅列出標題
            共58頁: 1 2 3 4 5 6 7 8 9 Last 
            久久96国产精品久久久| 日本久久久精品中文字幕| 狠狠色丁香久久婷婷综合蜜芽五月| 久久久久久极精品久久久| 综合久久给合久久狠狠狠97色 | 99久久久精品| 久久WWW免费人成—看片| 久久精品国产亚洲αv忘忧草| 国内精品久久久久伊人av| 久久艹国产| 国产亚洲精久久久久久无码| 国产精品免费久久久久电影网| 亚洲欧洲久久av| 青青青国产成人久久111网站| 久久99热这里只有精品66| 国产成人久久精品区一区二区| 理论片午午伦夜理片久久 | 午夜不卡久久精品无码免费| 国产精品美女久久久| 18禁黄久久久AAA片| 久久久久国产一级毛片高清板| 久久久久久夜精品精品免费啦| 精品国产一区二区三区久久蜜臀| 久久精品国产精品亚洲精品| 久久天天躁狠狠躁夜夜av浪潮| 国产美女久久精品香蕉69| 久久久久久久精品妇女99| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 91久久精品电影| 国产亚洲精品自在久久| 亚洲精品国精品久久99热一| 久久国产精品无| 久久久久亚洲av毛片大| 国产精品内射久久久久欢欢| 91久久婷婷国产综合精品青草| 久久精品国产清自在天天线 | 久久99国产综合精品| 久久久国产乱子伦精品作者| 97精品伊人久久久大香线蕉| 久久久噜噜噜久久中文字幕色伊伊| 亚洲欧洲中文日韩久久AV乱码|