【问题标题】:How to collect the contents of a browser's address bar in C / C++?如何在 C/C++ 中收集浏览器地址栏的内容?
【发布时间】:2020-07-09 20:58:21
【问题描述】:

概述

我希望收集由 C/C++ 程序中的函数打开的浏览器地址栏的内容。这里有几个线程讨论这个问题。但是,似乎没有一个对我有帮助。

我的环境

操作系统:Windows 7、Windows 10。
开发语言:C/C++

我的项目

我正在编写一个需要从服务器收集数据的应用程序。服务器要求客户端对其自身进行身份验证,并为此使用两步 OAuth 2.0 协议。我需要使用第三方开发的 Web API。

以下页面描述了整个过程。

https://apidocs.getresponse.com/v3/case-study/oauth2-authorization-code

但是,我只有第一步的问题:从服务器获取授权码。

此页面的一个亮点解释了第一步的过程,这里唯一重要的是:

想亲眼看看?试试这个。

我已经创建了一个帐户并在 getresponse.com 上注册了一个伪造的应用程序用于测试目的。

重定向到 example.com 站点后,下一个屏幕在地址栏中显示以下内容:

http://example.com/receiver?code=<code>&state=xyz

地址栏中的这段代码正是我在浏览器中显示此页面时继续第二步认证所需要的。 因此有必要收集地址栏中包含的数据。

  • 您可以重复该操作并再次导航到相同的 URL:您无需再次登录,您将获得另一个授权码。

(注:为了在getresponse.com上测试Oauth 2.0协议,我在2020年7月9日创建了一个应用,这个账号的有效期为30天。因此,上面提到的登录凭证很可能在一个月后过期。创建日期。)

到目前为止我已经尝试过什么

我不会详细介绍,否则这篇文章可能会太长。但我确实尝试了许多带有各种参数的“curl GET”请求。不走运:我从来没有得到带有代码的浏览器地址栏数据作为回报。

有人可以帮忙吗?

【问题讨论】:

  • “我希望收集浏览器地址栏的内容”——这很重要。铬合金? IE浏览器?歌剧?我自己编写的自定义网络浏览器?
  • 这是一个 X/Y 问题 - 您说您需要使用 OAuth2(或 OIDC,我假设)进行身份验证。 您无需劫持用户的网络浏览器即可做到这一点。有专门的 OAuth2 客户端库提供模拟网络浏览器,以解决 OAuth2/OIDC 以浏览器为中心的特性。
  • 但是对于您的应用程序,您应该使用 OAuth2 deviceclient-credentials 身份验证模式,而不是面向人的 code(身份验证代码)、hybridimplicit OAuth 流程。
  • 哪个浏览器?许多浏览器不喜欢其他程序侵入他们的空间。
  • @Dai 我是 OAuth2 的新手,我不知道客户端库可用。你为我指明了正确的方向。我检查并发现了几个用于 C / C++ 的 OAuth2 库。您能否推荐一款已被证明功能强大且高效的产品?

标签: c++ c browser collect


【解决方案1】:

以下是您可以用来完成任务的方法列表:

  • Hook 一个改变浏览器地址栏文本的函数。这可以使用远程 dll/代码注入来实现,并让注入的代码使用共享内存或other 进程间通信方法将结果发送回您的主进程

  • 获取保存地址栏文本的缓冲区的内存地址(内存扫描器,例如CE),然后主动扫描该地址中的更改以查找所需文本,在本例中为code=

  • 创建一个浏览器扩展,监听选项卡中的 url 更改事件,并让它最好使用套接字将结果发送回您的进程

【讨论】:

    猜你喜欢
    • 2012-01-22
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多