溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android基礎(chǔ)逆向沒怎么實現(xiàn)

發(fā)布時間:2022-01-12 16:08:43 來源:億速云 閱讀:119 作者:iii 欄目:網(wǎng)絡(luò)安全

這篇文章主要介紹“Android基礎(chǔ)逆向沒怎么實現(xiàn)”,在日常操作中,相信很多人在Android基礎(chǔ)逆向沒怎么實現(xiàn)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Android基礎(chǔ)逆向沒怎么實現(xiàn)”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

0x01 Activity 跳轉(zhuǎn)

demo還是上一次的demo,這次我們更改一下Button邏輯,改成跳轉(zhuǎn)。

建一個新的Activity

Android基礎(chǔ)逆向沒怎么實現(xiàn)

跳轉(zhuǎn)Activity

這里跳轉(zhuǎn)到我們新建的Activity。
使用Intent進行跳轉(zhuǎn),Intent相當(dāng)于一個載體。
具體代碼如下:

        Intent i=new Intent(MainActivity.this,Main2Activity.class);        startActivity(i);


Android基礎(chǔ)逆向沒怎么實現(xiàn)

設(shè)置標(biāo)識


Android基礎(chǔ)逆向沒怎么實現(xiàn)

生成apk測試


Android基礎(chǔ)逆向沒怎么實現(xiàn)

0x02 Androidmanifest.xml說明

首先來看下Androidmanifest.xml的內(nèi)容

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.hanlei.first_demo">    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">        <activity android:name=".MainActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity android:name=".Main2Activity"></activity>    </application></manifest>

在這里我們可以看到有兩個Activity。

如何設(shè)置最先啟動?

這里有兩個Activity,那么app是怎么識別那個是最先啟動的Activity呢。
這里我們對比一下兩個Activity的區(qū)別。
這是第一個Activity

 <activity android:name=".MainActivity">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>

這個是我們的第二個Activity

  <activity android:name=".Main2Activity"></activity>

是不是區(qū)別很明顯,一個有一大堆的內(nèi)容,一個只有一句話。
所以我們的重點就是:

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

很容易就發(fā)現(xiàn)是因為這個所以才是最先啟動的。
我們來做一個簡單的測試。
我們把這個移動一下位置。
現(xiàn)在Androidmanifest,xml是這個樣子。

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.hanlei.first_demo">    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">        <activity android:name=".MainActivity">        </activity>        <activity android:name=".Main2Activity">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>

測試

現(xiàn)在我們生成apk。
Android基礎(chǔ)逆向沒怎么實現(xiàn)

我們發(fā)現(xiàn),點開之后發(fā)現(xiàn)已經(jīng)不是之前的Activity,而是我們之后自己添加的Activity。
基于這個思路,我們可以想嘛,如果有第三方的Activity注入,我們是不是可以通過改變啟動的Activity從而避開一些驗證問題。
恩,之后通過實戰(zhàn)來進行一個測試。

0x03 反編譯

有到了學(xué)習(xí)smali的時候到了??赡芎軣o聊吧,但是寫的人卻是很有興趣呢。
廢話不說,開始吧。

1. 丟Android Killer里。

2.找到關(guān)鍵代碼

恩。在$2里。

.method public onClick(Landroid/view/View;)V    .locals 3    .param p1, "v"    # Landroid/view/View;    .prologue
    .line 33    new-instance v0, Landroid/content/Intent;

    iget-object v1, p0, Lcom/example/hanlei/first_demo/MainActivity$2;->this$0:Lcom/example/hanlei/first_demo/MainActivity;

    const-class v2, Lcom/example/hanlei/first_demo/Main2Activity;    invoke-direct {v0, v1, v2}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V    .line 34    .local v0, "i":Landroid/content/Intent;
    iget-object v1, p0, Lcom/example/hanlei/first_demo/MainActivity$2;->this$0:Lcom/example/hanlei/first_demo/MainActivity;

    invoke-virtual {v1, v0}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V    .line 35    return-void
.end method

這里我們不一句一句翻譯,想看的回去翻之前的內(nèi)容,很多。
我們來看這里的主要代碼:
新建一個 Intent對象

new-instance v0, Landroid/content/Intent;

獲取MainActivity對想存儲在v1中

 iget-object v1, p0, Lcom/example/hanlei/first_demo/MainActivity$2;->this$0:Lcom/example/hanlei/first_demo/MainActivity;

把Main2Activity存入v2中

 const-class v2, Lcom/example/hanlei/first_demo/Main2Activity;

然后把v1和v2放入v0中。

invoke-direct {v0, v1, v2}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V

startActivity調(diào)用即可。還是很簡單的,很容易理解的。

.line 34    .local v0, "i":Landroid/content/Intent;
    iget-object v1, p0, Lcom/example/hanlei/first_demo/MainActivity$2;->this$0:Lcom/example/hanlei/first_demo/MainActivity;

    invoke-virtual {v1, v0}, Lcom/example/hanlei/first_demo/MainActivity;->startActivity(Landroid/content/Intent;)V

怎么說呢,smali見過了,雖然不知道什么意思,但是很熟悉,一下子就理解了。恩,語言還是多看看,多分析分析,有好處的。當(dāng)初學(xué)c語言的時候就是,敲了很多行,做了幾個項目恩就很熟練了。

0x04 實戰(zhàn)分析

樣本

樣本為了方便我就傳在百度云里了
原APK:鏈接:https://pan.baidu.com/s/1pMwcuef 密碼:a673

試玩

不知道為什么我的夜深模擬器打不開了。試試別的模擬器。

Android基礎(chǔ)逆向沒怎么實現(xiàn)

一打開游戲,就彈出個這個界面,很不喜歡,我想直接彈出我的游戲界面。
好,我們用我們剛開始的技能。

1.apk反編譯

Android基礎(chǔ)逆向沒怎么實現(xiàn)

2.查看Androidmanifest.xml文件

<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="preferExternal" package="com.sxiaoao.farm.farmherohx">    <uses-feature android:glEsVersion="0x00020000" android:required="true"/>    <uses-permission android:name="android.permission.WAKE_LOCK"/>    <uses-permission android:name="android.permission.INTERNET"/>    <uses-permission android:name="android.permission.VIBRATE"/>    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>    <uses-permission android:name=""/>    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>    <uses-permission android:name="android.permission.GET_TASKS"/>    <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>    <uses-permission android:name="android.permission.READ_CONTACTS"/>    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>    <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS"/>    <uses-permission android:name="android.permission.INTERNET"/>    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>    <application android:icon="@drawable/icon" android:label="美人魚消消" android:name="com.sxiaoao.farm.farmherohx.CmgameApplication">        <activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:label="美人魚消消" android:launchMode="singleTask" android:name="MainActivity" android:screenOrientation="sensorPortrait"/>        <activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:label="美人魚消消" android:launchMode="singleTask" android:name="LogActivity" android:screenOrientation="sensorPortrait"/>        <activity android:configChanges="keyboard|orientation|screenSize" android:name="cn.cmgame.billing.api.GameOpenActivity" android:screenOrientation="sensorPortrait" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>                <category android:name="tv.ouya.intent.category.GAME"/>            </intent-filter>            <intent-filter>                <action android:name="android.intent.action.CHINAMOBILE_OMS_GAME"/>                <category android:name="android.intent.category.CHINAMOBILE_GAMES"/>            </intent-filter>        </activity>        <activity android:name="cn.cmgame2_0.launch_model.shortcut.main.MiguHomeActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Dialog">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="cn.cmgame2_0.category.migu_home"/>            </intent-filter>        </activity>        <service android:name="cn.cmgame.billing.service.GameService"/>        <activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:exported="true" android:label="美人魚消消" android:launchMode="singleTop" android:name="com.sxiaoao.farm.farmherohx.wxapi.WXEntryActivity" android:screenOrientation="sensorPortrait"/>        <receiver android:name="com.xiaoao.pay.util.update.UpdataBroadcastReceiver">            <intent-filter>                <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>            </intent-filter>        </receiver>        <meta-data android:name="UMENG_APPKEY" android:value="552f4eeafd98c57677001cb8"/>        <meta-data android:name="UMENG_CHANNEL" android:value="8556"/>    </application></manifest>

3.嘗試跳轉(zhuǎn)

首先來看下我們的跳轉(zhuǎn)。

<activity android:configChanges="keyboard|orientation|screenSize" android:name="cn.cmgame.billing.api.GameOpenActivity" android:screenOrientation="sensorPortrait" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">            <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>                <category android:name="tv.ouya.intent.category.GAME"/>            </intent-filter>            <intent-filter>                <action android:name="android.intent.action.CHINAMOBILE_OMS_GAME"/>                <category android:name="android.intent.category.CHINAMOBILE_GAMES"/>            </intent-filter>        </activity>

跳轉(zhuǎn)的Activity名稱為:cn.cmgame.billing.api.GameOpenActivity,Gameopen。。。恩,這是什么唉,好奇怪。但是呢,肯定就是我們打開的界面。恩。我覺得這個有點重要,以后可能會涉及到。所以還是找個小本子記下來。我應(yīng)該建立一個小本子。
我們來看一下我們的Activity。

<activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:label="美人魚消消" android:launchMode="singleTask" android:name="MainActivity" android:screenOrientation="sensorPortrait"/><activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:label="美人魚消消" android:launchMode="singleTask" android:name="LogActivity" android:screenOrientation="sensorPortrait"/>

這里有兩個Activity:
第一個Activity的name:android:name="MainActivity"
第二個Activity的name:android:name="LogActivity"
作為開發(fā)人員,MainActivity,就是一個開始恩。我們直接開始更改。

<activity android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:label="美人魚消消" android:launchMode="singleTask" android:name="MainActivity" android:screenOrientation="sensorPortrait">              <intent-filter>                <action android:name="android.intent.action.MAIN"/>                <category android:name="android.intent.category.LAUNCHER"/>                <category android:name="tv.ouya.intent.category.GAME"/>            </intent-filter>            <intent-filter>                <action android:name="android.intent.action.CHINAMOBILE_OMS_GAME"/>                <category android:name="android.intent.category.CHINAMOBILE_GAMES"/>            </intent-filter>         </activity>

這個是修改后的Activity。
其實我也只是對

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

這兩句有了解。但是還有三句是什么,一起來看一下吧。關(guān)于測試的問題,我們學(xué)習(xí)完之后再進行測試吧。
首選是

<category android:name="tv.ouya.intent.category.GAME"/>

Android基礎(chǔ)逆向沒怎么實現(xiàn)

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

這兩個直接挪過去,直接失敗。所以,還是分析一下吧。
剛才說的

<category android:name="tv.ouya.intent.category.GAME"/>

這句就是必須的。
還有兩句

 <action android:name="android.intent.action.CHINAMOBILE_OMS_GAME"/><category android:name="android.intent.category.CHINAMOBILE_GAMES"/>

到此,關(guān)于“Android基礎(chǔ)逆向沒怎么實現(xiàn)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI