Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android視頻應用去廣告學習實踐

Android視頻應用去廣告學習實踐

編輯:關於Android編程


注意:本文只供學習研究用途

第一步 素材搜集

 

 

第二步 反匯編:


apktool d TencentVideo.apk
執行完後你將發現當前目錄新增了一個

 

關於反匯編內容,大家還可以參考我這篇博文:http://blog.csdn.net/itleaks/article/details/30342955

第三步 廣告分析


目前Android應用廣告的方式有幾種

 

1) 小平台應用---由於小平台應用沒有能力做自己的廣告系統,一般它們會嵌入廣告發行商的SDK來顯示廣告,然後和廣告發行商分成。這種廣告類型屏蔽有兩種:

1. 找出主流廣告發行商的廣告地址,讓其不可訪問。將這些網址添加到/etc/hosts裡即可。

實例:127.0.0.1 xxx.com

2. 廣告要顯示,肯定必須得存在某個view裡,而一般這個view都是在sdk定義好了的,且是固定的。所以有了第二種方法,找出主流廣告發行商廣告對應的view,將其摘掉。

2) 視頻類大平台應用—由於視頻類應用廣告投放量大且其本身屬於媒體且一般都是財主燒錢類型肯定會構建自己的廣告系統。這種廣告類型不太可控,只有從程序本身下手。視頻類程序都有一個行為---廣告加載失敗直接播放視頻,因此屏蔽方案就是讓廣告加載失敗。

 

第四步 修改


下面以騰訊視頻程序為例來實踐如何讓其廣告加載失敗:
騰訊視頻加載廣告的邏輯在smali/com/tencent/ads/view/AdView.smali文件裡,在該文件裡搜索fail就可知道修改如下函數可以有所作為:

 

method private handleAdResponse(Lcom/tencent/ads/service/AdResponse;)V
    ……….

    invoke-static {v6}, Lcom/tencent/ads/utility/SLog;->v(Ljava/lang/String;)V

    .line 860
    array-length v6, v0
//如果v6不等於0跳轉至cond_2,等於0則繼續往下走,繼續往下走自然就
//會執行fireFailedEvent。我們的目標就是無論如何都讓其調用fireFailedEvent
//函數。怎麼辦呢?很簡單,去掉這個條件判斷即可達到目的
    if-nez v6, :cond_2

    .line 862
    new-instance v6, Lcom/tencent/ads/view/ErrorCode;

    const/16 v7, 0x65

    const-string v8, no ad for this vid.

    invoke-direct {v6, v7, v8}, Lcom/tencent/ads/view/ErrorCode;->(ILjava/lang/String;)V

    iput-object v6, p0, Lcom/tencent/ads/view/AdView;->mErrorCode:Lcom/tencent/ads/view/ErrorCode;

    .line 863
    invoke-direct {p0}, Lcom/tencent/ads/view/AdView;->fireFailedEvent()V
修改後:

 

 

.line 860
    array-length v6, v0

    .line 862
    new-instance v6, Lcom/tencent/ads/view/ErrorCode;

    const/16 v7, 0x65

    const-string v8, no ad for this vid.

    invoke-direct {v6, v7, v8}, Lcom/tencent/ads/view/ErrorCode;->(ILjava/lang/String;)V

    iput-object v6, p0, Lcom/tencent/ads/view/AdView;->mErrorCode:Lcom/tencent/ads/view/ErrorCode;

    .line 863
    invoke-direct {p0}, Lcom/tencent/ads/view/AdView;->fireFailedEvent()V

 

第五步 打包簽名:

apktool b TencentVideo tmp.apk
java –jar signapk.jar testkey.x509.pem testkey.pk8 tmp.apk tmp_signed.apk

第六步安裝使用:

由於修改後的apk使用的是test簽名,和官方的簽名沖突,必須保證你的手機上的騰訊視頻軟件已經卸載

 

adb install tmp_signed.apk


 

附錄:

完整的操作過程如下:

 

itleaks@itleaks-a:/tmp$ apktool d TencentVideo.apk 
I: Baksmaling...
I: Loading resource table...
I: Loaded.
I: Loading resource table from file: /home/itleaks/apktool/framework/1.apk
I: Loaded.
I: Decoding file-resources...
I: Decoding values*/* XMLs...
I: Done.
I: Copying assets and libs...
itleaks@itleaks-a:/tmp$ vi TencentVideo/smali/com/tencent/ads/view/AdView.smali 
itleaks@itleaks-a:/tmp$ apktool b TencentVideo/ tmp.apk
I: Checking whether sources has changed...
I: Smaling...
I: Checking whether resources has changed...
I: Building resources...
I: Copying libs...
I: Building apk file...
itleaks@itleaks-a:/tmp$ java –jar signapk.jar testkey.x509.pem testkey.pk8 tmp.apk tmp_signed.apk

 

/********************************
* 本文來自博客 “愛踢門”
* 轉載請標明出處:http://blog.csdn.net/itleaks
******************************************/


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved