編輯:關於Android編程
關於反匯編內容,大家還可以參考我這篇博文:http://blog.csdn.net/itleaks/article/details/30342955
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、自定義View實現字母導航欄2、ListView實現聯系人列表3、字母導航欄滑動事件處理4、字母導航欄與中間字母的聯動5、字母導航欄與ListView的聯動
1 概述在Android中,我們常常使用PendingIntent來表達一種“留待日後處理”的意思。從這個角度來說,PendingIntent可以
前言很多人開始安卓入門的學習,都會選擇Google官方的Android Studio作為開發工具,由於他跟之前的Eclipse不太一樣,所以出的問題也比較多。主要是導入的
介紹 做項目到一定龐大的時候就會發現方法數太多,安裝包根本就裝不上去了,這個也不足為奇,我們都知道當方法數目超過65536這個數目限制的時候,擋在2.x的系統上面就會出現