加载中…
个人资料
zzz3265
zzz3265
  • 博客等级:
  • 博客积分:0
  • 博客访问:14,878
  • 关注人气:0
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

Chrome修改1-添加对指定URL数据替换功能

(2020-08-30 16:36:16)
Chrome开源, 内部逻辑可以参考源码
Chrome版本 70.0.3538.110(正式版本) (32 位)
可以开启内部页面查看过程, chrome://net-internals/#events 
http数据获取使用 URLRequest, 可以看到 URL_REQUEST_START_JOB
从这个开始跟踪
1. Chrome.dll 重定位到20000000
2. 在 227D6BB0 可以发现 URL_REQUEST_START_JOB 字符串, 由此可以计算URL_REQUEST_START_JOB 为97
3. 根据源码可以找到 CPSocketWin__DoConnect[203D5F8E], 内部 NetLog__BeginEvent(TCP_CONNECT_ATTEMPT)
4. 由此得到 NetLog__BeginEvent[200B1814]
5. NetLog__BeginEvent查找引用, 找到 URL_REQUEST_START_JOB, URLRequest__StartJob[203294A4]
6. 从上跟踪找到 URLRequest__URLRequest[2031F7A0]
7. 修改第一个参数, 直接改url 发现有其他数据, 如host 等数据是不对的, 导致问题
8. 查找GURL相关的内部函数
9. 跟踪过程DoCanonicalize-url__Canonicalize-GURL__InitCanonical-GURL__GURL_pstr
10. 最终找到GURL__GURL_pstr[20066FB8], 这个函数用来设置GURL数据
   (实际网络api使用在 chrome\trunk\src\net\socket  - tcp_socket_win)


跟踪完成, 实现替换功能就Hook上面的URLRequest__URLRequest[2031F7A0], 修改数据使用GURL__GURL_pstr[20066FB8]
逻辑参考
void * Hook_UrlReq(void *purl, int priority, FARPROC fnDelCall, void *context, void *cookie_store, FARPROC network_delegate)
{
CHAR szOrg[2048], szNew[2048];
void *pResult;
CHAR *pReqUrl;
BOOL bRedir, bRetVal;
GURL *pGurl;

if(purl == NULL)
goto Hook_UrlReq_End;
pReqUrl = *(CHAR**)purl;
if(pReqUrl == NULL)
goto Hook_UrlReq_End;

bRetVal = g_pSafeHook->OnUrlRequest(pReqUrl, szNew, bRedir);
if(bRedir == FALSE || bRedir == FALSE)
goto Hook_UrlReq_End;

pGurl = (GURL*)(purl);

NStr::StrCopy(szOrg, pReqUrl, sizeof(szOrg));
(pGurl->*Real_GURL_SetUrl)(szNew, strlen(szNew));

pResult = (this->*Real_URLRequest)(purl, priority, fnDelCall, context, cookie_store, network_delegate);

(pGurl->*Real_GURL_SetUrl)(szOrg, strlen(szOrg));
return pResult;

Hook_UrlReq_End:
pResult = (this->*Real_URLRequest)(purl, priority, fnDelCall, context, cookie_store, network_delegate);
return pResult;
}

针对需要的url替换成自己的url, 也可以是本地文件地址

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有