安卓逆向要學多久(安卓逆向基礎)
2023-07-31 05:34:22
0x01 activity 跳轉demo還是上一次的demo,這次我們更改一下Button邏輯,改成跳轉。
建一個新的Activity
跳轉Activity
這裡跳轉到我們新建的Activity。
使用intent進行跳轉,Intent相當於一個載體。
具體代碼如下:
Intent i=new Intent(MainActivity.this,Main2Activity.class); startActivity(i);
設置標識
生成apk測試
0x02 Androidmanifest.xml說明首先來看下Androidmanifest.xml的內容
在這裡我們可以看到有兩個Activity。
如何設置最先啟動?
這裡有兩個Activity,那麼app是怎麼識別那個是最先啟動的Activity呢。
這裡我們對比一下兩個Activity的區別。
這是第一個Activity
這個是我們的第二個Activity
是不是區別很明顯,一個有一大堆的內容,一個只有一句話。
所以我們的重點就是:
很容易就發現是因為這個所以才是最先啟動的。
我們來做一個簡單的測試。
我們把這個移動一下位置。
現在Androidmanifest,xml是這個樣子。
測試
現在我們生成apk。
我們發現,點開之後發現已經不是之前的Activity,而是我們之後自己添加的Activity。
基於這個思路,我們可以想嘛,如果有第三方的Activity注入,我們是不是可以通過改變啟動的Activity從而避開一些驗證問題。
恩,之後通過實戰來進行一個測試。
0x03 反編譯有到了學習smali的時候到了。可能很無聊吧,但是寫的人卻是很有興趣呢。
廢話不說,開始吧。
1. 丟Android Killer裡。
2.找到關鍵代碼
恩。在$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;->(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
這裡我們不一句一句翻譯,想看的回去翻之前的內容,很多。
我們來看這裡的主要代碼:
新建一個 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;->(Landroid/content/Context;Ljava/lang/Class;)V
startActivity調用即可。還是很簡單的,很容易理解的。
.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見過了,雖然不知道什麼意思,但是很熟悉,一下子就理解了。恩,語言還是多看看,多分析分析,有好處的。當初學c語言的時候就是,敲了很多行,做了幾個項目恩就很熟練了。
0x04 實戰分析樣本
樣本為了方便我就傳在百度雲裡了
原APK:連結:https:///s/1pMwcuef 密碼:a673
試玩
不知道為什麼我的夜深模擬器打不開了。試試別的模擬器。
一打開遊戲,就彈出個這個界面,很不喜歡,我想直接彈出我的遊戲界面。
好,我們用我們剛開始的技能。
1.apk反編譯
2.查看Androidmanifest.xml文件
3.嘗試跳轉
首先來看下我們的跳轉。
跳轉的Activity名稱為:cn.cmgame.billing.api.GameOpenActivity,Gameopen。。。恩,這是什麼唉,好奇怪。但是呢,肯定就是我們打開的界面。恩。我覺得這個有點重要,以後可能會涉及到。所以還是找個小本子記下來。我應該建立一個小本子。
我們來看一下我們的Activity。
這裡有兩個Activity:
第一個Activity的name:android:name="MainActivity"
第二個Activity的name:android:name="LogActivity"
作為開發人員,MainActivity,就是一個開始恩。我們直接開始更改。
這個是修改後的Activity。
其實我也只是對
這兩句有了解。但是還有三句是什麼,一起來看一下吧。關於測試的問題,我們學習完之後再進行測試吧。
首選是
國內百度搜不到。
收藏的谷歌鏡像掉鏈子。
bing或許是一個不錯的選擇。
這個是我找到的結果。
Cortex,ARM公司在經典處理器ARM11以後的產品改用Cortex命名,並分成A、R和M三類,旨在為各種不同的市場提供服務。
For your Cortex app to show up in the PLAY section,這句話的含義就是,在你的ARM app 展現的遊戲部分。我用百度翻譯 自己瞎編的也不知道對不對哈。
it must have an activity that contains a filter for either。它必須有一個包含過濾器的活動。
說這麼多廢話。我又不做遊戲開發。說不定以後要做,但是現在不做。所以說白了,就是必須的。
其實我之前做了一個錯誤的測試就是直接把
這兩個直接挪過去,直接失敗。所以,還是分析一下吧。
剛才說的
這句就是必須的。
還有兩句
好了,我們搜一搜,最後發現是:移動基地運營商sdk需要添加所必須的。
好嘛,做測試的時候直接挪過來的。現在我們刪了做一下測試吧。
4.測試
測試結果,成功了。不過值得一說的是藍疊模擬器也掉鏈子了。還是自己的手機好用啊。成功的跳過了。手機發圖好麻煩的,恩,自己做測試吧。
以上。
,