From 1d964762ca1d0c814934ed483ec76ae34914a79f Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Thu, 21 Jul 2022 23:35:03 +0300 Subject: [PATCH] new adblock (alpha) --- .../ru/vtosters/lite/hooks/JsonInjectors.java | 67 +++++++++++++++++++ .../ru/vtosters/lite/hooks/NewsfeedHook.java | 7 +- .../java/ru/vtosters/lite/utils/Newsfeed.java | 11 +-- smali/assets/CopyrightAds.txt | 3 +- .../b/h/c/w/NewPostRequest.smali | 4 ++ .../dto/feedlikes/FeedLikesResponse$b.smali | 19 +++++- .../vk/dto/stories/GeoNewsResponse$a1.smali | 19 +++++- .../api/newsfeed/NewsfeedCustomGet$a.smali | 4 ++ .../lite/api/newsfeed/NewsfeedGet.smali | 4 ++ .../api/newsfeed/NewsfeedGetComments.smali | 16 +++++ .../NewsfeedGetRecommendedLiveVideos.smali | 4 ++ .../lite/api/newsfeed/NewsfeedSearch.smali | 34 +++++++++- .../com/vtosters/lite/api/wall/WallGet.smali | 4 ++ .../vtosters/lite/api/wall/WallGetById.smali | 21 +++++- 14 files changed, 202 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java b/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java index e3731ab09..31bc7d59f 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/JsonInjectors.java @@ -8,11 +8,20 @@ import static ru.vtosters.lite.utils.Base64Utils.decode; import static ru.vtosters.lite.utils.Globals.getContext; import static ru.vtosters.lite.utils.Globals.getPrefsValue; import static ru.vtosters.lite.utils.Globals.getUserToken; +import static ru.vtosters.lite.utils.Newsfeed.checkCaption; +import static ru.vtosters.lite.utils.Newsfeed.checkCopyright; +import static ru.vtosters.lite.utils.Newsfeed.injectFiltersReposts; +import static ru.vtosters.lite.utils.Newsfeed.isBadNews; +import static ru.vtosters.lite.utils.Preferences.ads; +import static ru.vtosters.lite.utils.Preferences.adsgroup; import static ru.vtosters.lite.utils.Preferences.adsstories; +import static ru.vtosters.lite.utils.Preferences.authorsrecomm; import static ru.vtosters.lite.utils.Preferences.dev; import static ru.vtosters.lite.utils.Preferences.friendsblock; +import static ru.vtosters.lite.utils.Preferences.friendsrecomm; import static ru.vtosters.lite.utils.Preferences.getBoolValue; import static ru.vtosters.lite.utils.Preferences.hasVerification; +import static ru.vtosters.lite.utils.Preferences.postsrecomm; import android.util.Log; @@ -211,6 +220,64 @@ public class JsonInjectors{ return items; } + public static JSONArray newsfeedadtest(JSONArray items) throws JSONException{ + for (int j = 0; j < items.length(); j++) { + var list = items.optJSONObject(j); + var type = list.optString("type"); + + var isAds = list.has("ads") + || type.contains("ads") + || type.contains("carousel") + || type.contains("app_video") + || type.contains("html5_ad") + || type.contains("app_slider") + || type.contains("promo_button") + || type.contains("ads_easy_promote") + || type.contains("app_widget"); + + var isAuthorRecommendations = type.contains("authors_rec"); + + var isPostRecommendations = type.contains("inline_user_rec") || type.contains("live_recommended"); + + var isFriendsRecommendations = type.contains("friends_recommendations") || type.contains("user_rec") || type.contains("friends_recomm"); + + var isGroupAds = list.optBoolean("marked_as_ads"); + + var isRecomsGroup = type.contains("recommended_groups"); + + var isMusicBlock = type.contains("recommended_audios") || type.contains("recommended_artists") || type.contains("recommended_playlists"); + + var isNewsBlock = type.contains("tags_suggestions"); + + var isBadNews = isBadNews(list.optString("text")); + + var isCopyrightBlocked = checkCopyright(list); + + var isCaptionBlocked = checkCaption(list); + + var reposts = injectFiltersReposts(list); + + if (isAds && ads() + || isAuthorRecommendations && authorsrecomm() + || isPostRecommendations && postsrecomm() + || isFriendsRecommendations && friendsrecomm() + || isGroupAds && adsgroup() + || isRecomsGroup && authorsrecomm() + || isMusicBlock && authorsrecomm() + || isNewsBlock && ads() + || isBadNews + || isCopyrightBlocked + || isCaptionBlocked + || reposts) { + items.remove(j); + + if (dev()) Log.d("NewsfeedAdBlockV2", "Removed post " + list.optInt("post_id") + " from feed, type: " + type + ", isAds: " + isAds + ", marked as ads: " + isGroupAds + ", is bad news: " + isBadNews + ", is copyright blocked: " + isCopyrightBlocked + ", is caption blocked: " + isCaptionBlocked + ", repost blocked: " + reposts + ", is author recommendations: " + isAuthorRecommendations + ", is post recommendations: " + isPostRecommendations + ", is friends recommendations: " + isFriendsRecommendations + ", is music block: " + isMusicBlock + ", is news block: " + isNewsBlock); + } + } + + return items; + } + public static JSONObject music(JSONObject json) throws JSONException{ var catalog = json.optJSONObject("catalog"); diff --git a/app/src/main/java/ru/vtosters/lite/hooks/NewsfeedHook.java b/app/src/main/java/ru/vtosters/lite/hooks/NewsfeedHook.java index 13fab2b18..2f12aba47 100644 --- a/app/src/main/java/ru/vtosters/lite/hooks/NewsfeedHook.java +++ b/app/src/main/java/ru/vtosters/lite/hooks/NewsfeedHook.java @@ -6,7 +6,7 @@ import static ru.vtosters.lite.utils.Newsfeed.checkCopyright; import static ru.vtosters.lite.utils.Newsfeed.injectFiltersReposts; import static ru.vtosters.lite.utils.Newsfeed.isAds; import static ru.vtosters.lite.utils.Newsfeed.isAuthorRecommendations; -import static ru.vtosters.lite.utils.Newsfeed.isBadNew; +import static ru.vtosters.lite.utils.Newsfeed.isBadNews; import static ru.vtosters.lite.utils.Newsfeed.isFriendsRecommendations; import static ru.vtosters.lite.utils.Newsfeed.isGroupAds; import static ru.vtosters.lite.utils.Newsfeed.isMusicBlock; @@ -16,9 +16,6 @@ import static ru.vtosters.lite.utils.Newsfeed.isRecomsGroup; import static ru.vtosters.lite.utils.Preferences.getBoolValue; import static ru.vtosters.lite.utils.Preferences.vkme; -import android.view.View; -import android.view.ViewGroup; - import com.vk.core.preference.Preference; import org.json.JSONException; @@ -44,7 +41,7 @@ public class NewsfeedHook{ if (checkCopyright(obj)) return false; - if (isBadNew(obj.optString("text", ""))) return false; + if (isBadNews(obj.optString("text", ""))) return false; if (checkCaption(obj)) return false; diff --git a/app/src/main/java/ru/vtosters/lite/utils/Newsfeed.java b/app/src/main/java/ru/vtosters/lite/utils/Newsfeed.java index 065680338..86b4d1325 100644 --- a/app/src/main/java/ru/vtosters/lite/utils/Newsfeed.java +++ b/app/src/main/java/ru/vtosters/lite/utils/Newsfeed.java @@ -2,6 +2,7 @@ package ru.vtosters.lite.utils; import static ru.vtosters.lite.utils.Globals.getContext; import static ru.vtosters.lite.utils.Globals.getPrefsValue; +import static ru.vtosters.lite.utils.Preferences.*; import static ru.vtosters.lite.utils.Preferences.adsgroup; import static ru.vtosters.lite.utils.Preferences.authorsrecomm; import static ru.vtosters.lite.utils.Preferences.copyright_post; @@ -82,7 +83,7 @@ public class Newsfeed{ } } - return isBadNew(Array); + return isBadNews(Array); } // get repost information and inject our text filters public static boolean checkCopyright(JSONObject json) throws JSONException{ @@ -109,14 +110,14 @@ public class Newsfeed{ } public static boolean isNewsBlock(String src){ - return (src.equals("tags_suggestions")) && Preferences.ads(); + return (src.equals("tags_suggestions")) && ads(); } public static String getAllFilters(){ return getPrefsValue("spamfilters"); } - public static boolean isBadNew(String text){ + public static boolean isBadNews(String text){ for (String filter : mFilters) { if (text.toLowerCase().contains(filter.toLowerCase())) { if (dev()) Log.d("VTLite", text.toLowerCase()); @@ -129,7 +130,7 @@ public class Newsfeed{ public static boolean checkCaption(JSONObject postJson){ try { var captionJson = postJson.getJSONObject("caption"); - if (Preferences.captions()) + if (captions()) return true; boolean postAds = postsrecomm(); @@ -148,7 +149,7 @@ public class Newsfeed{ return (optString.equals("ads_easy_promote") || optString.equals("promo_button") || optString.equals("app_widget") || - optString.equals("ads")) && Preferences.ads(); + optString.equals("ads")) && ads(); } public static boolean isAuthorRecommendations(String optString){ diff --git a/smali/assets/CopyrightAds.txt b/smali/assets/CopyrightAds.txt index 92b82048b..6f36f1cfe 100644 --- a/smali/assets/CopyrightAds.txt +++ b/smali/assets/CopyrightAds.txt @@ -9,4 +9,5 @@ bitmain cents-apps cent-app centapp -/?a= \ No newline at end of file +/?a= +minerx \ No newline at end of file diff --git a/smali/smali_classes2/b/h/c/w/NewPostRequest.smali b/smali/smali_classes2/b/h/c/w/NewPostRequest.smali index 68cf0bff2..dca52f5ba 100644 --- a/smali/smali_classes2/b/h/c/w/NewPostRequest.smali +++ b/smali/smali_classes2/b/h/c/w/NewPostRequest.smali @@ -539,6 +539,10 @@ move-result-object p1 + invoke-static {p1}, Lru/vtosters/lite/hooks/JsonInjectors;->newsfeedadtest(Lorg/json/JSONArray;)Lorg/json/JSONArray; + + move-result-object p1 + const/4 v0, 0x0 if-eqz p1, :cond_7 diff --git a/smali/smali_classes2/com/vk/dto/feedlikes/FeedLikesResponse$b.smali b/smali/smali_classes2/com/vk/dto/feedlikes/FeedLikesResponse$b.smali index 9e86dff6c..8f0db4d02 100644 --- a/smali/smali_classes2/com/vk/dto/feedlikes/FeedLikesResponse$b.smali +++ b/smali/smali_classes2/com/vk/dto/feedlikes/FeedLikesResponse$b.smali @@ -36,7 +36,7 @@ # virtual methods .method public final a(Lorg/json/JSONObject;Ljava/lang/String;)Lcom/vk/dto/feedlikes/FeedLikesResponse; - .locals 9 + .locals 10 .line 1 new-instance v0, Landroid/util/SparseArray; @@ -171,6 +171,10 @@ .line 14 :cond_4 + invoke-static {v4}, Lru/vtosters/lite/hooks/JsonInjectors;->newsfeedadtest(Lorg/json/JSONArray;)Lorg/json/JSONArray; + + move-result-object v4 + invoke-virtual {v4}, Lorg/json/JSONArray;->length()I move-result v6 @@ -183,6 +187,19 @@ move-result-object v7 + invoke-static {v7}, Lru/vtosters/lite/hooks/NewsfeedHook;->injectFilters(Lorg/json/JSONObject;)Z + + move-result v9 + + if-nez v9, :cond_99 + + add-int/lit8 v3, v3, 0x1 + + goto :goto_4 + + :cond_99 + + invoke-static {v7, v2}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V .line 16 diff --git a/smali/smali_classes2/com/vk/dto/stories/GeoNewsResponse$a1.smali b/smali/smali_classes2/com/vk/dto/stories/GeoNewsResponse$a1.smali index 45dfa4eb9..424aabcf9 100644 --- a/smali/smali_classes2/com/vk/dto/stories/GeoNewsResponse$a1.smali +++ b/smali/smali_classes2/com/vk/dto/stories/GeoNewsResponse$a1.smali @@ -36,7 +36,7 @@ # virtual methods .method public final a(Lorg/json/JSONObject;Ljava/lang/String;)Lcom/vk/dto/stories/GeoNewsResponse1; - .locals 15 + .locals 16 move-object/from16 v1, p1 @@ -235,6 +235,10 @@ .line 20 :cond_5 + invoke-static {v11}, Lru/vtosters/lite/hooks/JsonInjectors;->newsfeedadtest(Lorg/json/JSONArray;)Lorg/json/JSONArray; + + move-result-object v11 + invoke-virtual {v11}, Lorg/json/JSONArray;->length()I move-result v12 @@ -247,6 +251,19 @@ move-result-object v0 + invoke-static {v0}, Lru/vtosters/lite/hooks/NewsfeedHook;->injectFilters(Lorg/json/JSONObject;)Z + + move-result v15 + + if-nez v15, :cond_99 + + add-int/lit8 v10, v10, 0x1 + + goto :goto_5 + + :cond_99 + + invoke-static {v0, v6}, Lkotlin/jvm/internal/Intrinsics;->a(Ljava/lang/Object;Ljava/lang/String;)V .line 22 diff --git a/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedCustomGet$a.smali b/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedCustomGet$a.smali index 00e856ab8..b14f6a70f 100644 --- a/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedCustomGet$a.smali +++ b/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedCustomGet$a.smali @@ -210,6 +210,10 @@ .line 13 :cond_2 + invoke-static {p2}, Lru/vtosters/lite/hooks/JsonInjectors;->newsfeedadtest(Lorg/json/JSONArray;)Lorg/json/JSONArray; + + move-result-object p2 + invoke-virtual {p2}, Lorg/json/JSONArray;->length()I move-result p1 diff --git a/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedGet.smali b/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedGet.smali index 910f2627b..5d510d0c6 100644 --- a/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedGet.smali +++ b/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedGet.smali @@ -745,6 +745,10 @@ .line 37 :cond_2 :goto_2 + invoke-static {v1}, Lru/vtosters/lite/hooks/JsonInjectors;->newsfeedadtest(Lorg/json/JSONArray;)Lorg/json/JSONArray; + + move-result-object v1 + invoke-virtual {v1}, Lorg/json/JSONArray;->length()I move-result v2 diff --git a/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedGetComments.smali b/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedGetComments.smali index 74f4e83d2..5dd5dc5db 100644 --- a/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedGetComments.smali +++ b/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedGetComments.smali @@ -177,6 +177,10 @@ .line 10 :goto_1 + invoke-static {v5}, Lru/vtosters/lite/hooks/JsonInjectors;->newsfeedadtest(Lorg/json/JSONArray;)Lorg/json/JSONArray; + + move-result-object v5 + invoke-virtual {v5}, Lorg/json/JSONArray;->length()I move-result v4 @@ -192,6 +196,18 @@ move-result-object v4 + invoke-static {v4}, Lru/vtosters/lite/hooks/NewsfeedHook;->injectFilters(Lorg/json/JSONObject;)Z + + move-result v8 + + if-nez v8, :cond_70 + + add-int/lit8 v0, v0, 0x1 + + goto :goto_1 + + :cond_70 + .line 12 invoke-virtual {v4}, Lcom/vk/dto/newsfeed/Owner;->getUid()I diff --git a/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedGetRecommendedLiveVideos.smali b/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedGetRecommendedLiveVideos.smali index d580c2581..a5e81c880 100644 --- a/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedGetRecommendedLiveVideos.smali +++ b/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedGetRecommendedLiveVideos.smali @@ -139,6 +139,10 @@ move-result-object v1 + invoke-static {v1}, Lru/vtosters/lite/hooks/JsonInjectors;->newsfeedadtest(Lorg/json/JSONArray;)Lorg/json/JSONArray; + + move-result-object v1 + const-string v2, "profiles" .line 2 diff --git a/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedSearch.smali b/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedSearch.smali index b0e30cd75..e012e6977 100644 --- a/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedSearch.smali +++ b/smali/smali_classes4/com/vtosters/lite/api/newsfeed/NewsfeedSearch.smali @@ -220,7 +220,7 @@ # virtual methods .method public a(Lorg/json/JSONObject;)Lcom/vtosters/lite/api/newsfeed/NewsfeedSearch$List; - .locals 9 + .locals 10 .annotation system Ldalvik/annotation/Signature; value = { "(", @@ -365,6 +365,10 @@ .line 14 :goto_2 + invoke-static {v4}, Lru/vtosters/lite/hooks/JsonInjectors;->newsfeedadtest(Lorg/json/JSONArray;)Lorg/json/JSONArray; + + move-result-object v4 + invoke-virtual {v4}, Lorg/json/JSONArray;->length()I move-result v6 @@ -376,6 +380,17 @@ move-result-object v6 + invoke-static {v6}, Lru/vtosters/lite/hooks/NewsfeedHook;->injectFilters(Lorg/json/JSONObject;)Z + + move-result v9 + + if-nez v9, :cond_71 + + add-int/lit8 v3, v3, 0x1 + + goto :goto_3 + + :cond_71 invoke-static {v6}, Lcom/vk/dto/newsfeed/Owner;->b(Lorg/json/JSONObject;)Lcom/vk/dto/newsfeed/Owner; move-result-object v6 @@ -396,6 +411,10 @@ .line 17 :goto_3 + invoke-static {v2}, Lru/vtosters/lite/hooks/JsonInjectors;->newsfeedadtest(Lorg/json/JSONArray;)Lorg/json/JSONArray; + + move-result-object v2 + invoke-virtual {v2}, Lorg/json/JSONArray;->length()I move-result v4 @@ -412,6 +431,19 @@ move-result-object v6 + invoke-static {v6}, Lru/vtosters/lite/hooks/NewsfeedHook;->injectFilters(Lorg/json/JSONObject;)Z + + move-result v9 + + if-nez v9, :cond_70 + + add-int/lit8 v3, v3, 0x1 + + goto :goto_3 + + :cond_70 + + invoke-static {v4, v6, p1, v1}, Lcom/vk/dto/newsfeed/entries/NewsEntryFactory;->a(Ljava/lang/String;Lorg/json/JSONObject;Landroid/util/SparseArray;Ljava/lang/String;)Lcom/vk/dto/newsfeed/entries/NewsEntry; move-result-object v4 diff --git a/smali/smali_classes4/com/vtosters/lite/api/wall/WallGet.smali b/smali/smali_classes4/com/vtosters/lite/api/wall/WallGet.smali index b826c7e9e..b3e744f71 100644 --- a/smali/smali_classes4/com/vtosters/lite/api/wall/WallGet.smali +++ b/smali/smali_classes4/com/vtosters/lite/api/wall/WallGet.smali @@ -524,6 +524,10 @@ .line 19 :goto_2 + invoke-static {p1}, Lru/vtosters/lite/hooks/JsonInjectors;->newsfeedadtest(Lorg/json/JSONArray;)Lorg/json/JSONArray; + + move-result-object p1 + invoke-virtual {p1}, Lorg/json/JSONArray;->length()I move-result v8 diff --git a/smali/smali_classes4/com/vtosters/lite/api/wall/WallGetById.smali b/smali/smali_classes4/com/vtosters/lite/api/wall/WallGetById.smali index 4d5fdba87..c6db4e3da 100644 --- a/smali/smali_classes4/com/vtosters/lite/api/wall/WallGetById.smali +++ b/smali/smali_classes4/com/vtosters/lite/api/wall/WallGetById.smali @@ -56,7 +56,7 @@ .end method .method private a(Landroid/util/SparseArray;Lorg/json/JSONArray;)[Lcom/vk/dto/newsfeed/entries/NewsEntry; - .locals 5 + .locals 6 .annotation system Ldalvik/annotation/Signature; value = { "(", @@ -75,6 +75,10 @@ } .end annotation + invoke-static {p2}, Lru/vtosters/lite/hooks/JsonInjectors;->newsfeedadtest(Lorg/json/JSONArray;)Lorg/json/JSONArray; + + move-result-object p2 + .line 14 invoke-virtual {p2}, Lorg/json/JSONArray;->length()I @@ -86,6 +90,10 @@ .line 15 :goto_0 + invoke-static {p2}, Lru/vtosters/lite/hooks/JsonInjectors;->newsfeedadtest(Lorg/json/JSONArray;)Lorg/json/JSONArray; + + move-result-object p2 + invoke-virtual {p2}, Lorg/json/JSONArray;->length()I move-result v2 @@ -97,6 +105,17 @@ move-result-object v2 + invoke-static {v2}, Lru/vtosters/lite/hooks/NewsfeedHook;->injectFilters(Lorg/json/JSONObject;)Z + + move-result v5 + + if-nez v5, :cond_70 + + add-int/lit8 v1, v1, 0x1 + + goto :goto_0 + + :cond_70 const-string v3, "type" const-string v4, "post"