android逆向奇技淫巧一:去掉開屏廣告


  相信不少網友都有相似的經歷:很多app剛開始用的時候很清爽,沒啥廣告;等用了一段時間后廠家就開始大量上廣告的了,我個人覺得這是典型的利用大數據殺熟:廠家看到用戶的月活、日活都挺高的,說明用戶對自己的app已經產生依賴,此時可以開始“殺豬吃肉”了!開屏廣告是我最討厭的一種:點開app就被逼着看,而且非會員一般要5秒后才能跳過,不想被逼着看廣告的就花錢充會員;怎么才能不花錢去掉app的開屏廣告了?

  先簡單回顧一下windows下PE文件的執行原理:PE文件的文件頭有個字段叫AddressOfEntryPoint,會標記程序代碼的入口。用戶雙擊exe后,windows操作系統會解析這個字段,找到標記的程序入口,然后跳轉到這里去執行代碼;為了避開程序自身的CRC檢測,很多外掛都選擇了入口點注入這種方式,原因很簡單:入口點這里程序自己的代碼都還沒開始執行了,這時的exe就像一只待宰羔羊,任憑外掛干任何事都無法反抗!同理:android也有類似的入口點,用戶雙擊app后,android也會跳轉到app標記的入口點去執行,那么這個入口點(注意:嚴格講這應該是入口界面,和入口點不是一個概念)在哪了?----- AndroidMainfest.xml文件有兩個標簽頁,如下:

<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>

  凡是看到這兩個標簽一起出現的就是app的入口activity了,用戶點開app肯定會從這里指定的入口開始執行。這里以某雲筆記為例,其原始入口如下:

<activity android:launchMode="singleTop" android:name="com.xxxx.note.activity2.SplashActivity" android:screenOrientation="portrait" android:theme="@style/FullScreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

  所以這里實錘:開屏廣告就是從這里開始看的!所以現在的需求就編變成了繞過這個廣告Activity,直接到我們期望的Activity!這又該怎么操作了?這里先找到我們期望的activity,如下:我期望打開app就能直接開到筆記的列表,而不是開屏廣告,所以這里可以先在打開期望的界面,然后用“adb shell dumpsys activity top”查看這個頁面的activity:

  

   我期望的activity是“activity2.MainActivity”,所以在android killer打開這個apl,在AndroidMainfest.xml中找到這個activity,

<activity android:configChanges="keyboardHidden|orientation" android:exported="true" android:launchMode="singleTop" android:name="com.xxxx.note.activity2.MainActivity" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan|stateHidden"/>

  接下來的工作就好走了,先找到LAUNCHER的activity,把上面那兩個標簽剪切,復制到我們期望的activity下面即可,如下:

<activity android:configChanges="keyboardHidden|orientation" android:exported="true" android:launchMode="singleTop" android:name="com.xxxx.note.activity2.MainActivity" android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan|stateHidden">
        <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

     然后重新用android killer編譯打包,再安裝新的apk即可!

  總結:這里本質是通過配置文件,改變app的入口activity!AndroidManifest.xml核心功能簡介如下(本質上是個配置文件,告啥android系統本app的各種配置):

  • 描述app的包名:

      Android設備據此區分不同的app,如果每個app是一個人的話,包名就相當於是這個人的名字(為了防止惡意軟件仿冒其他app,只有新的app的包名和簽名均與舊的app相同時才能升級覆蓋安裝成功).

  • 描述app使用的android系統版本信息:

      因為android系統在不斷的升級,新的系統版本會增加新的API,但是舊的Android設備上並沒有這些API,那么就會出現新版本的應用使用新的API但是在舊的系統上運行的問題(在舊的系統上調用新的API應用會崩潰),因此需要說明本應用支持的最低android系統版本是哪個,比如說將minSdkVersion設置為19就是說這個應用在API19以及以上的設備上運行沒有問題.

  • 描述app本身的版本信息,這樣對於同一個app的兩個版本,系統就能區分那個是新版本,哪個是舊版本.

  • 很重要的一個作用是描述應用對外暴露的組件(或者叫接口):

      Activity,Service,Provider,BroadcastReceiver這四大組件的每一個都可以獨立運行,都可以作為app啟動的入口點。AndroidManifest.xml可以告知系統點擊應用圖標后進入哪個Activity;可以告知系統本應用某個類(BroadcastReceiver的子類)需要監聽網絡變化等信息(廣播);告知系統本應用可以其他應用提供服務(ContentProvider和Service);告知系統本應用某些類能夠處理一些特定的請求(比如打開pdf擴展名的文件);等等

  • 其他各種需要用文本直接告知系統的:比如申請的權限,應用的主題等等。

    歸根結底就是Android系統的app需要通過文本方式直接告訴系統的信息太多了

 

參考:1、https://www.yisu.com/zixun/356182.html   AndroidManifest.xml的作用有哪些


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM