דילוג לתוכן
  • חוקי הפורום
  • פופולרי
  • לא נפתר
  • משתמשים
  • חיפוש גוגל בפורום
  • צור קשר
עיצובים
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • ברירת מחדל (ללא עיצוב (ברירת מחדל))
  • ללא עיצוב (ברירת מחדל)
כיווץ
מתמחים טופ
  1. דף הבית
  2. אנדרואיד - כללי
  3. עזרה הדדית - אנדרואיד
  4. מדריך | Webview מסונן (רוט)

מדריך | Webview מסונן (רוט)

מתוזמן נעוץ נעול הועבר עזרה הדדית - אנדרואיד
4 פוסטים 2 כותבים 76 צפיות 3 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • L מנותק
    L מנותק
    lilo159
    כתב נערך לאחרונה על ידי lilo159
    #1

    בין הזמנים וזה...
    תמיד הפרוייקטים האלו נראים יותר גדולים ממה שהם...
    2ef51794-89e2-4925-8a27-57fe998de8fb-image.png
    בקיצור,
    כמו תמיד, הAI הוא המתכנת, אבל האחריות עליכם...

    נתחיל מאיך זה מסנן:
    אתם מאחסנים קודם כל איפה שהוא באינטרנט (נגיד בגיטהאב, בתור קובץ RAW) קובץ JSON בפורמט הזה:

    {
      "global_whitelist":[
        "example.com",
        "more-example.com"
      ],
      "apps": {
        "com.example.blocked_app": {
          "policy": "blocked"
        },
        "com.tranzmate": {
          "policy": "open"
        },
        "com.waze": {
          "policy": "global"    
        },
        "com.example.custom_app": {
          "policy": "custom",
          "custom_whitelist":[
            "myspecial-api.com",
            "private-server.net"
          ]
        }
      }
    }
    

    יש כאן ארבעה מצבים:

    • blocked - חוסם את כל הקישורים באפליקציה
    • open - פותח את כל הקישורים באפליקציה
    • global - פותח רק את הקישורים שהוגדרו בתוך global_whitelist
    • custom - פותח רק את הקישורים שהוגדרו custom_whitelist

    באם אפליקציה לא הוגדרה בתוך הרשימה, היא כמובן פשוט תהיה על מצב גלובלי.
    וכן, אם לא הWEBVIEW לא יצליח לקבל את הרשימה, אז הכל יהיה חסום. (לומדים מטעויות, ע"ע אורורה סטור...)

    העריכה שאנחנו עושים לאפליקציה מוסיפה לה לוגים, כך שאפשר לראות את הקישור החסום שניסינו להכנס אליו לצורך פתיחה שלו.

    כמו כן ישנה תמיכה בקישורים מלאים, דהיינו, אם אנחנו רוצים לפתוח קישור מסויים, אבל פתיחה של הHOST תפתח גם קישור אחר שאנחנו לא רוצים, בשביל זה אפשר לציין את הנתיב המלא או היותר כולל, דהיינו:
    אם נזין את הקישור הזה:

    example.com/example
    

    אז הקישור הזה יהיה חסום:

    example.com/bad-example
    

    עכשיו לשינויים בתוך האפליקציה:
    למעשה לא ניסיתי את זה על הWEBVIEW של גוגל, כי אני משתמש בדאמבדרויד, שזה סוג של linageOS, שמשתמש בWEBVIEW משלו, אבל אולי זה אפשרי להשתמש איתו גם בגרסאות אחרות, איני יודע. אם יהיה ביקוש אני אנסה בלי נדר על של גוגל, אבל לכאורה יש להם הגנות. נראה.

    האפליקציה נמצאת בנתיב /product/app/webview/

    1. בנתיב com/android/webview/chromium
      ליצור את הקלאס UrlFetcher
      שזה תוכנו:
    .class public Lcom/android/webview/chromium/UrlFetcher;
    .super Ljava/lang/Thread;
    
    .field public static sJsonConfig:Lorg/json/JSONObject;
    
    .method static constructor <clinit>()V
        .registers 1
        const/4 v0, 0x0
        sput-object v0, Lcom/android/webview/chromium/UrlFetcher;->sJsonConfig:Lorg/json/JSONObject;
        return-void
    .end method
    
    .method public constructor <init>()V
        .registers 1
        invoke-direct {p0}, Ljava/lang/Thread;-><init>()V
        return-void
    .end method
    
    .method public static isAllowed(Ljava/lang/String;)Z
        .registers 11
        
        const/4 v0, 0x0
        const/4 v2, 0x1
        
        if-nez p0, :cond_0
        return v0
        
        :cond_0
        # === 1. הדפסת הכתובת המלאה והמקורית מיד כשהיא מגיעה ===
        const-string v1, "UrlFetcher"
        new-instance v3, Ljava/lang/StringBuilder;
        invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
        const-string v4, ">>> Intercepted URL: "
        invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v3, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v3
        invoke-static {v1, v3}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
    
        const-string v1, "javascript:"
        invoke-virtual {p0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
        move-result v1
        if-eqz v1, :cond_1
        return v2
        
        :cond_1
        const-string v1, "data:text/html"
        invoke-virtual {p0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
        move-result v1
        if-eqz v1, :cond_2
        return v2
        
        :cond_2
        # === 2. חילוץ ה-Host לצורך הדפסה בלוגקט (כמו שביקשת) ===
        invoke-static {p0}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;
        move-result-object v3
        invoke-virtual {v3}, Landroid/net/Uri;->getHost()Ljava/lang/String;
        move-result-object v3
        
        if-nez v3, :print_host
        goto :host_done
        
        :print_host
        const-string v1, "UrlFetcher"
        new-instance v4, Ljava/lang/StringBuilder;
        invoke-direct {v4}, Ljava/lang/StringBuilder;-><init>()V
        const-string v5, ">>> Extracted Host: "
        invoke-virtual {v4, v5}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v4, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v4
        invoke-static {v1, v4}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
        
        :host_done
        # הופך את הכתובת לאותיות קטנות למניעת בעיות Case Sensitivity (שומר במשתנה v3)
        invoke-virtual {p0}, Ljava/lang/String;->toLowerCase()Ljava/lang/String;
        move-result-object v3
    
        # === 3. המתנה לקובץ ה-JSON מגיטהאב ===
        const/4 v4, 0x0
        :wait_loop
        sget-object v1, Lcom/android/webview/chromium/UrlFetcher;->sJsonConfig:Lorg/json/JSONObject;
        if-nez v1, :after_wait
        const-wide/16 v5, 0x64
        :try_start_sleep
        invoke-static {v5, v6}, Ljava/lang/Thread;->sleep(J)V
        :try_end_sleep
        .catch Ljava/lang/Exception; {:try_start_sleep .. :try_end_sleep} :catch_sleep
        :catch_sleep
        add-int/lit8 v4, v4, 0x1
        const/16 v5, 0x1e
        if-ge v4, v5, :wait_loop
        
        :after_wait
        sget-object v1, Lcom/android/webview/chromium/UrlFetcher;->sJsonConfig:Lorg/json/JSONObject;
        if-nez v1, :config_ok
        const-string v1, "UrlFetcher"
        const-string v3, ">>> JSON is NULL! Blocking for safety."
        invoke-static {v1, v3}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
        return v0
        
        :config_ok
        # === 4. שליפת האפליקציה הנוכחית והמדיניות שלה מה-JSON ===
        invoke-static {}, Landroid/app/ActivityThread;->currentPackageName()Ljava/lang/String;
        move-result-object v4
        if-nez v4, :pkg_ok
        const-string v4, "unknown_package"
        :pkg_ok
        
        const-string v5, "apps"
        invoke-virtual {v1, v5}, Lorg/json/JSONObject;->optJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;
        move-result-object v5
        
        const-string v6, "global"
        
        if-nez v5, :check_app_node
        goto :policy_set
        
        :check_app_node
        invoke-virtual {v5, v4}, Lorg/json/JSONObject;->optJSONObject(Ljava/lang/String;)Lorg/json/JSONObject;
        move-result-object v5
        if-nez v5, :get_policy
        goto :policy_set
        
        :get_policy
        const-string v7, "policy"
        invoke-virtual {v5, v7, v6}, Lorg/json/JSONObject;->optString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
        move-result-object v6
        
        :policy_set
        const-string v7, "UrlFetcher"
        new-instance v8, Ljava/lang/StringBuilder;
        invoke-direct {v8}, Ljava/lang/StringBuilder;-><init>()V
        const-string v9, ">>> App: "
        invoke-virtual {v8, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v8, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        const-string v4, " | Policy: "
        invoke-virtual {v8, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v8, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v8}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v4
        invoke-static {v7, v4}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
    
        # === 5. אכיפת המדיניות (פתוח/חסום/כללי/מותאם) ===
        const-string v4, "blocked"
        invoke-virtual {v6, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
        move-result v4
        if-eqz v4, :check_open
        return v0
        
        :check_open
        const-string v4, "open"
        invoke-virtual {v6, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
        move-result v4
        if-eqz v4, :check_custom
        return v2
        
        :check_custom
        const-string v4, "custom"
        invoke-virtual {v6, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
        move-result v4
        if-eqz v4, :check_global
        
        if-nez v5, :load_custom
        return v0
        
        :load_custom
        const-string v4, "custom_whitelist"
        invoke-virtual {v5, v4}, Lorg/json/JSONObject;->optJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;
        move-result-object v1
        goto :process_array
        
        :check_global
        const-string v4, "global_whitelist"
        invoke-virtual {v1, v4}, Lorg/json/JSONObject;->optJSONArray(Ljava/lang/String;)Lorg/json/JSONArray;
        move-result-object v1
        
        :process_array
        if-nez v1, :array_loop_init
        return v0
        
        :array_loop_init
        invoke-virtual {v1}, Lorg/json/JSONArray;->length()I
        move-result v4
        const/4 v5, 0x0
        
        :array_loop
        if-ge v5, v4, :array_end
        invoke-virtual {v1, v5}, Lorg/json/JSONArray;->optString(I)Ljava/lang/String;
        move-result-object v6
        if-eqz v6, :array_next
        invoke-virtual {v6}, Ljava/lang/String;->isEmpty()Z
        move-result v7
        if-nez v7, :array_next
        
        # טריק ההתאמה המדויקת למניעת עקיפות!
        invoke-virtual {v6}, Ljava/lang/String;->toLowerCase()Ljava/lang/String;
        move-result-object v6
        
        # בדיקה 1: מתחיל ב- ://
        new-instance v7, Ljava/lang/StringBuilder;
        invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
        const-string v8, "://"
        invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v7, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v7
        invoke-virtual {v3, v7}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
        move-result v7
        if-eqz v7, :check_dot
        goto :found_match
        
        :check_dot
        # בדיקה 2: מתחיל ב- .
        new-instance v7, Ljava/lang/StringBuilder;
        invoke-direct {v7}, Ljava/lang/StringBuilder;-><init>()V
        const-string v8, "."
        invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v7, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v7
        invoke-virtual {v3, v7}, Ljava/lang/String;->contains(Ljava/lang/CharSequence;)Z
        move-result v7
        if-eqz v7, :array_next
    
        :found_match
        # === 6. לוג מיוחד שמדפיס איזה חוק ספציפי אישר את הגישה ===
        const-string v0, "UrlFetcher"
        new-instance v1, Ljava/lang/StringBuilder;
        invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
        const-string v3, ">>> ALLOWED by rule: "
        invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v1, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
        invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
        move-result-object v1
        invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
        return v2
        
        :array_next
        add-int/lit8 v5, v5, 0x1
        goto :array_loop
        
        :array_end
        const-string v1, "UrlFetcher"
        const-string v2, ">>> BLOCKED (Not in whitelist)"
        invoke-static {v1, v2}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
        return v0
    .end method
    .method public run()V
        .registers 4
        const-string v0, "UrlFetcher"
        const-string v1, ">>> Starting JSON config download..."
        invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
        :try_start_0
        new-instance v0, Ljava/net/URL;
        
        # =========================================================
        # הדבק כאן את כתובת ה-RAW של קובץ ה-JSON שלך
        # =========================================================
        const-string v1, "https://raw.githubusercontent.com/YOUR_USER/YOUR_REPO/main/config.json"
        
        invoke-direct {v0, v1}, Ljava/net/URL;-><init>(Ljava/lang/String;)V
        invoke-virtual {v0}, Ljava/net/URL;->openConnection()Ljava/net/URLConnection;
        move-result-object v0
        const/16 v1, 0x1388
        invoke-virtual {v0, v1}, Ljava/net/URLConnection;->setConnectTimeout(I)V
        invoke-virtual {v0, v1}, Ljava/net/URLConnection;->setReadTimeout(I)V
        invoke-virtual {v0}, Ljava/net/URLConnection;->getInputStream()Ljava/io/InputStream;
        move-result-object v0
        new-instance v1, Ljava/util/Scanner;
        invoke-direct {v1, v0}, Ljava/util/Scanner;-><init>(Ljava/io/InputStream;)V
        const-string v0, "\\A"
        invoke-virtual {v1, v0}, Ljava/util/Scanner;->useDelimiter(Ljava/lang/String;)Ljava/util/Scanner;
        move-result-object v0
        invoke-virtual {v0}, Ljava/util/Scanner;->hasNext()Z
        move-result v1
        if-eqz v1, :cond_empty
        invoke-virtual {v0}, Ljava/util/Scanner;->next()Ljava/lang/String;
        move-result-object v0
        new-instance v1, Lorg/json/JSONObject;
        invoke-direct {v1, v0}, Lorg/json/JSONObject;-><init>(Ljava/lang/String;)V
        sput-object v1, Lcom/android/webview/chromium/UrlFetcher;->sJsonConfig:Lorg/json/JSONObject;
        const-string v0, "UrlFetcher"
        const-string v1, ">>> JSON Config successfully parsed and loaded!"
        invoke-static {v0, v1}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
        goto :goto_end
        :cond_empty
        const-string v0, "UrlFetcher"
        const-string v1, ">>> JSON file is EMPTY!"
        invoke-static {v0, v1}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
        :goto_end
        :try_end_0
        .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
        return-void
        :catch_0
        move-exception v0
        const-string v1, "UrlFetcher"
        const-string v2, ">>> JSON Download FAILED!"
        invoke-static {v1, v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
        return-void
    .end method
    

    תסתכלו על שורה 260, שם אתם צריכים להדביק את הקישור לקובץ שלכם.

    1. באותו נתיב (com/android/webview/chromium)
      בקלאס WebViewChromium
      במתודה method public init(Ljava/util/Map;Z)V
      מיד אחרי השורה של הREGISTERS להדביק כך:
    .method public init(Ljava/util/Map;Z)V
        .registers 21
        #להדביק מכאן
        new-instance v0, Lcom/android/webview/chromium/UrlFetcher;
    
        invoke-direct {v0}, Lcom/android/webview/chromium/UrlFetcher;-><init>()V
    
        invoke-virtual {v0}, Lcom/android/webview/chromium/UrlFetcher;->start()V
        #עד כאן
        .line 1
        move-object/from16 v1, p0
    

    בשני המתודות שנקראות loadUrl
    להוסיף 5 רגיסטרים
    וג"כ באותו אופן להדביק את הקוד הבא אחרי השורה של הREGISTERS:

    # --- מנגנון חסימה חכם ---
        invoke-static {p1}, Lcom/android/webview/chromium/UrlFetcher;->isAllowed(Ljava/lang/String;)Z
        move-result v0
        
        # התיקון: אם הפונקציה החזירה אמת (1 - מורשה), קפוץ לאישור!
        if-nez v0, :allow_url_load
        
        # חסימה אלגנטית
        iget-object v0, p0, Lcom/android/webview/chromium/WebViewChromium;->a:Landroid/webkit/WebView;
        const-string v1, "http://blocked.local"
        const-string v2, "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><body dir=\"rtl\" style=\"display:flex;justify-content:center;align-items:center;height:100vh;background-color:rgb(248,215,218);color:rgb(114,28,36);font-family:sans-serif;margin:0;\"><div style=\"text-align:center;padding:20px;border:1px solid rgb(245,198,203);border-radius:10px;background-color:rgb(248,215,218);\"><h2>\u05e9\u05d2\u05d9\u05d0\u05ea \u05d2\u05d9\u05e9\u05d4</h2><p>\u05d0\u05ea\u05e8 \u05d6\u05d4 \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e8\u05e9\u05d4</p></div></body>"
        const-string v3, "text/html"
        const-string v4, "utf-8"
        const/4 v5, 0x0
        invoke-virtual/range {v0 .. v5}, Landroid/webkit/WebView;->loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
        return-void
    
        :allow_url_load
    

    .method public loadUrl(Ljava/lang/String;)V
        .registers 10 # כאן הוספנו 5
    # --- מנגנון חסימה חכם ---
        invoke-static {p1}, Lcom/android/webview/chromium/UrlFetcher;->isAllowed(Ljava/lang/String;)Z
        move-result v0
        
        # התיקון: אם הפונקציה החזירה אמת (1 - מורשה), קפוץ לאישור!
        if-nez v0, :allow_url_load
        
        # חסימה אלגנטית
        iget-object v0, p0, Lcom/android/webview/chromium/WebViewChromium;->a:Landroid/webkit/WebView;
        const-string v1, "http://blocked.local"
        const-string v2, "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><body dir=\"rtl\" style=\"display:flex;justify-content:center;align-items:center;height:100vh;background-color:rgb(248,215,218);color:rgb(114,28,36);font-family:sans-serif;margin:0;\"><div style=\"text-align:center;padding:20px;border:1px solid rgb(245,198,203);border-radius:10px;background-color:rgb(248,215,218);\"><h2>\u05e9\u05d2\u05d9\u05d0\u05ea \u05d2\u05d9\u05e9\u05d4</h2><p>\u05d0\u05ea\u05e8 \u05d6\u05d4 \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e8\u05e9\u05d4</p></div></body>"
        const-string v3, "text/html"
        const-string v4, "utf-8"
        const/4 v5, 0x0
        invoke-virtual/range {v0 .. v5}, Landroid/webkit/WebView;->loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
        return-void
        :allow_url_load
    
    .method public loadUrl(Ljava/lang/String;Ljava/util/Map;)V
        .registers 11 # גם כאן הוספנו 5
    # --- מנגנון חסימה חכם ---
        invoke-static {p1}, Lcom/android/webview/chromium/UrlFetcher;->isAllowed(Ljava/lang/String;)Z
        move-result v0
        
        # התיקון: אם הפונקציה החזירה אמת (1 - מורשה), קפוץ לאישור!
        if-nez v0, :allow_url_load
        
        # חסימה אלגנטית
        iget-object v0, p0, Lcom/android/webview/chromium/WebViewChromium;->a:Landroid/webkit/WebView;
        const-string v1, "http://blocked.local"
        const-string v2, "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><body dir=\"rtl\" style=\"display:flex;justify-content:center;align-items:center;height:100vh;background-color:rgb(248,215,218);color:rgb(114,28,36);font-family:sans-serif;margin:0;\"><div style=\"text-align:center;padding:20px;border:1px solid rgb(245,198,203);border-radius:10px;background-color:rgb(248,215,218);\"><h2>\u05e9\u05d2\u05d9\u05d0\u05ea \u05d2\u05d9\u05e9\u05d4</h2><p>\u05d0\u05ea\u05e8 \u05d6\u05d4 \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e8\u05e9\u05d4</p></div></body>"
        const-string v3, "text/html"
        const-string v4, "utf-8"
        const/4 v5, 0x0
        invoke-virtual/range {v0 .. v5}, Landroid/webkit/WebView;->loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
        return-void
        :allow_url_load
    

    בנתיב org/chromium/android_webview
    בקלאס AwContentsClientBridge
    במתודה shouldOverrideUrlLoading
    אחרי השורה של הREGISTERS להוסיף את הקוד הבא:

    .method public final shouldOverrideUrlLoading(Ljava/lang/String;ZZ[Ljava/lang/String;[Ljava/lang/String;Z)Z
        .registers 16
    #להוסיף מכאן
    # יירוט ניווט פנימי
        invoke-static {p1}, Lcom/android/webview/chromium/UrlFetcher;->isAllowed(Ljava/lang/String;)Z
        move-result v0
        
        # התיקון: אם הפונקציה החזירה אמת (1 - מורשה), קפוץ לאישור!
        if-nez v0, :allow_url
    
        # חסימה אלגנטית: טעינת HTML תוך זיוף כתובת
        iget-object v0, p0, Lorg/chromium/android_webview/AwContentsClientBridge;->a:LWV/N5;
        check-cast v0, LWV/vD;
        iget-object v0, v0, LWV/vD;->e:Landroid/webkit/WebView;
        const-string v1, "http://blocked.local"
        const-string v2, "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><body dir=\"rtl\" style=\"display:flex;justify-content:center;align-items:center;height:100vh;background-color:rgb(248,215,218);color:rgb(114,28,36);font-family:sans-serif;margin:0;\"><div style=\"text-align:center;padding:20px;border:1px solid rgb(245,198,203);border-radius:10px;background-color:rgb(248,215,218);\"><h2>\u05e9\u05d2\u05d9\u05d0\u05ea \u05d2\u05d9\u05e9\u05d4</h2><p>\u05d0\u05ea\u05e8 \u05d6\u05d4 \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e8\u05e9\u05d4</p></div></body>"
        const-string v3, "text/html"
        const-string v4, "utf-8"
        const/4 v5, 0x0
        invoke-virtual/range {v0 .. v5}, Landroid/webkit/WebView;->loadDataWithBaseURL(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
        const/4 v0, 0x1
        return v0
    
        :allow_url
    #עד כאן
    

    שימו לב לשורות 12-14 שזה תלוי בגרסה שיש לכם, אז תוודאו את שורה 12, ע"י שתסתכלו בקוד של גרסתכם, מיד אחרי .line 29
    אמורה להיות שורה כזאת:

    iget-object v1, p0, Lorg/chromium/android_webview/AwContentsClientBridge;->a:LWV/N5;
    

    הסוף של השורה (a:LWV/N5) זה מה שאמור להיות בסוף שורה 12
    ואת שורה 13-14 תוודאו ע"י שתסתכלו על השורה שאחרי .line 91

    .line 91
        iget-object v4, v8, LWV/vD;->e:Landroid/webkit/WebView;
    

    מה שבערך באמצע השורה ( LWV/vD;) זה מה שצריך להיות בסוף של שורה 13
    ובשורה 14 גם מה שאחרי החץ (LWV/vD;->e).
    או יותר פשוט, תשאלו את הAI הקרוב לביתכם איך להתאים בדיוק את הקוד, ותשמשו במייצא השרשורים של @ nh.local, זה אחלה דבר!

    בהצלחה!

    תגובה 1 תגובה אחרונה
    10
    • L מנותק
      L מנותק
      lilo159
      כתב נערך לאחרונה על ידי lilo159
      #2

      אם זה מעניין מישהו, יצרתי (AI) ממשק בVERCEL, לשליטה על הקובץ בצורה נוחה, כולל חיפוש אפליקציות בגוגל פליי, לא השקעתי יותר מידי, זה פשוט שימושי. אז אם מישהו מעוניין בקוד הפרוייקט שיעדכן.

      24c53a6d-f394-446e-96a0-a4976e21acf2-image.png

      דרך אגב, אני עכשיו קולט שהסינון הזה מגשים את המטרה של הWEBVIEW באפליקציות. אני מניח שהמפתחים באמת לא מחפשים פרצות לדפדפן, אלא להגיש תמיכה, וכעת זה אפשרי למקד את הWEBVIEW לקישורים מותרים, בלי לגלוש בטעות ליוטיוב ושאר ירקות...

      נוחעם FMנ תגובה 1 תגובה אחרונה
      1
      • L lilo159

        אם זה מעניין מישהו, יצרתי (AI) ממשק בVERCEL, לשליטה על הקובץ בצורה נוחה, כולל חיפוש אפליקציות בגוגל פליי, לא השקעתי יותר מידי, זה פשוט שימושי. אז אם מישהו מעוניין בקוד הפרוייקט שיעדכן.

        24c53a6d-f394-446e-96a0-a4976e21acf2-image.png

        דרך אגב, אני עכשיו קולט שהסינון הזה מגשים את המטרה של הWEBVIEW באפליקציות. אני מניח שהמפתחים באמת לא מחפשים פרצות לדפדפן, אלא להגיש תמיכה, וכעת זה אפשרי למקד את הWEBVIEW לקישורים מותרים, בלי לגלוש בטעות ליוטיוב ושאר ירקות...

        נוחעם FMנ מחובר
        נוחעם FMנ מחובר
        נוחעם FM
        מדריכים
        כתב נערך לאחרונה על ידי
        #3

        @lilo159 נראה ממש טוב.
        נשמח אם יהיה אפשר לערוך בזה את הAPK עצמו
        שפשוט יהיה אפשר לבחור מה כן ייפתח ולקבל אותו מקומפל וללא צורך בעריכה ידנית...

        הפעלת שלוחות בVoLTE

        L תגובה 1 תגובה אחרונה
        0
        • נוחעם FMנ נוחעם FM

          @lilo159 נראה ממש טוב.
          נשמח אם יהיה אפשר לערוך בזה את הAPK עצמו
          שפשוט יהיה אפשר לבחור מה כן ייפתח ולקבל אותו מקומפל וללא צורך בעריכה ידנית...

          L מנותק
          L מנותק
          lilo159
          כתב נערך לאחרונה על ידי lilo159
          #4

          @נוחעם-FM כוונתך לקובץ חיצוני (נגיד בassets), שפשוט יהיה שם בלי צורך בקובץ באינטרנט?
          עריכה: עכשיו ראיתי למה הגבת.
          אמור להיות אפשרי.

          תגובה 1 תגובה אחרונה
          1

          • התחברות

          • אין לך חשבון עדיין? הרשמה

          • התחברו או הירשמו כדי לחפש.
          • פוסט ראשון
            פוסט אחרון
          0
          • חוקי הפורום
          • פופולרי
          • לא נפתר
          • משתמשים
          • חיפוש גוגל בפורום
          • צור קשר