Chrome瀏覽器代碼修改代理和user-agent記錄

0x1、概述

對於Chrome的編譯工作,大家可以參考上一篇《編譯基於Chrome代碼修改的Brave瀏覽器》,這裏就不再重複了,這一篇主要是通過代碼如何去修改User-Agent、代理、開啓隱私模式等配置。在嘗試修改前,自己也通過搜索引擎去搜索,但也沒有發現可以直接使用的方式,以下加入功能的地方不一定是最好的,但至少可以實現功能,如果有更好的實現方式,歡迎大家指正。

 

0x2、修改功能

a、第一次啓動跳過接受協議界面

在org.chromium.chrome.browser.firstrun.FirstRunActivity類中,
onNativeDependenciesFullyInitialized方法中添加acceptTermsOfService(false);

 

b、默認開啓設置指紋保護功能

在org.chromium.chrome.browser.firstrun.FirstRunActivity類中,加引用

import org.chromium.chrome.browser.ChromeApplication;
import org.chromium.base.ContextUtils;

//在onNativeDependenciesFullyInitialized方法中添加
    ChromeApplication app = (ChromeApplication)ContextUtils.getApplicationContext();
    if (null != app) {
        app.initShieldsConfig();
        app.getShieldsConfig().setBlockFingerprints();
    }

c、修改user-agent

在browser-android-tabs-master\net\base\network_delegate.cc中
    extern std::string g_custom_ua;
並在NotifyBeforeSendHeaders方法中加入以下代碼替換ua
 headers->SetHeader("User-Agent", g_custom_ua);

其中g_custom_ua是一個全局變量,定義的地方可以在你喜歡的位置中定義,並實現jni設置代理的方法,在java層調用,以下是一種方式,在browser-android-tabs-master\chrome\browser\offline_pages\android\offline_page_bridge.cc中加入

#include <string>
std::string g_custom_ua;

static jboolean JNI_OfflinePageBridge_SetUserAgent(JNIEnv* env,
    const JavaParamRef<jclass>& clazz,const JavaParamRef<jstring>& j_ua){
        
    g_custom_ua = ConvertJavaStringToUTF8(env, j_ua);
    return true;
}

並在org.chromium.chrome.browser.offlinepages.OfflinePageBridge.java中加入該方法,以供需要修改的地方調用

public static native boolean nativeSetUserAgent(String ua);

d、修改代理

在browser-android-tabs-master\net\socket\client_socket_pool_manager.h

聲明新的函數

ProxyInfo GetProxyInfo(const ProxyInfo& proxy_info1);

在browser-android-tabs-master\net\socket\client_socket_pool_manager.cc

引用全局變量
extern std::string g_custom_host;
extern int g_custom_port;

並實現函數
 

ProxyInfo GetProxyInfo(const ProxyInfo& proxy_info1) {
    ProxyInfo proxy_info;
                  
        const net::HostPortPair proxy_host(g_custom_host, g_custom_port);
       //注意,這裏需要代理的方式修改成你想支持的方式,也可以作爲參數傳進來,代理的類型請參考ProxyServer
        const net::ProxyServer proxy_server(net::ProxyServer::SCHEME_SOCKS5,proxy_host);
    
    proxy_info.UseProxyServer(proxy_server);
    proxy_info.set_traffic_annotation(proxy_info1.traffic_annotation());
     return proxy_info;
}

最後在InitSocketPoolHelper函數中調用,記得把函數中的原來proxy_info形式參數改爲proxy_info1
  net::ProxyInfo proxy_info = GetProxyInfo(proxy_info1);

最後在你自己喜歡的地方加上jni方法,給java層調用,我臨時加在browser-android-tabs-master\chrome\browser\offline_pages\android\offline_page_bridge.cc中

先定義全局變量
std::string g_custom_host;
int g_custom_port;

再添加給java層調用的靜態jni函數

 static jboolean JNI_OfflinePageBridge_SetProxy(JNIEnv* env,
    const JavaParamRef<jclass>& clazz,const JavaParamRef<jstring>& j_host,const jint j_port){
    g_custom_host = ConvertJavaStringToUTF8(env, j_host);
    g_custom_port = j_port;
                       
    return true;
}

最後在org.chromium.chrome.browser.offlinepages.OfflinePageBridge.java的加入以下方法

public static native boolean nativeSetProxy(String host,int port);

e、開啓隱私模式

如果想在啓動時自動進入隱私模式,可以加在org.chromium.chrome.browser.ChromeActivity.java中的initializeCompositorContent方法最後面,以下是加入的代碼

 ContextUtils.getAppSharedPreferences().edit().putBoolean(TemplateUrlService.PREF_DDG_OFFER_SHOWN, true).apply();
TemplateUrlService.getInstance().setSearchEngine(TemplateUrlService.DDG_SE_NAME, TemplateUrlService.DDG_SE_KEYWORD, true);

getTabModelSelector().getModel(false).commitAllTabClosures();
// This action must be recorded before opening the incognito tab since UMA actions
// are dropped when an incognito tab is open.
RecordUserAction.record("MobileMenuNewIncognitoTab");
RecordUserAction.record("MobileNewTabOpened");
//reportNewTabShortcutUsed(true);
getTabCreator(true).launchNTP();

f、自動打開網站

可以在ChromeTabbedActivity.java或者ChromeActivity.java合適的地方加入以下代碼就可以了

getActivityTab().loadUrl(new LoadUrlParams(GOOGLE_URL, PageTransition.LINK));

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章