mirror of
https://github.com/Dingo-Shenanigans/ReSkate.git
synced 2026-10-18 06:05:15 +02:00
Skate.exe contacts EA on every launch, offline mode included: error and session reports (collector.errors.ea.com), SDK telemetry (freeform-river.data.ea.com) and remote configuration (gcs.ea.com). - Block the game's lookups of ea.com and tnt-ea.com names inside the process (getaddrinfo and the other Winsock resolvers). Installed at bootstrap, and fails closed like the EA app launch block - Turn EA's error reporting (EadpErrorsData) off in game, next to the existing DingoTelemetry settings; the game ignores them on its command line - Leave EA's image CDN (dingo-dev-assets.akamaized.net) reachable for the fast-travel artwork, which only downloads images - Add a hostname test, contrib/ea-watch.ps1 to check the traffic, and a short note in the README's privacy section Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
45 lines
2.0 KiB
C++
45 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include <array>
|
|
#include <cstddef>
|
|
#include <string>
|
|
#include <string_view>
|
|
#include <type_traits>
|
|
|
|
namespace dingosdk {
|
|
|
|
// EA's online services, as Skate.exe names them. ea.com holds the Blaze redirectors, accounts and
|
|
// gateway, telemetry (pin-*, freeform-river), error reports (collector.errors), remote
|
|
// configuration (gcs), experimentation, leaderboards, social and ad tech; tnt-ea.com holds push
|
|
// notifications and real-time messaging. Not listed on purpose: dingo-dev-assets.akamaized.net,
|
|
// the CDN the fast-travel artwork comes from (Engine/Game/World/location_travel.h). It only serves
|
|
// images, and the travel menu would lose its icons without it.
|
|
inline constexpr std::array<std::string_view, 2> ea_service_domains{"ea.com", "tnt-ea.com"};
|
|
|
|
// Whether a host name is one of ea_service_domains or a name under one, ignoring ASCII case and a
|
|
// trailing root dot. Address literals never match: Skate.exe reaches EA by name only.
|
|
template<class Char>
|
|
constexpr bool ea_service_host(std::basic_string_view<Char> host) noexcept {
|
|
using Unit = std::make_unsigned_t<Char>;
|
|
if (!host.empty() && host.back() == Char('.')) host.remove_suffix(1);
|
|
for (const auto domain : ea_service_domains) {
|
|
if (host.size() < domain.size()) continue;
|
|
const auto start = host.size() - domain.size();
|
|
if (start != 0 && host[start - 1] != Char('.')) continue;
|
|
bool same = true;
|
|
for (std::size_t i = 0; same && i < domain.size(); ++i) {
|
|
auto unit = static_cast<Unit>(host[start + i]);
|
|
if (unit >= Unit('A') && unit <= Unit('Z')) unit = static_cast<Unit>(unit + Unit('a' - 'A'));
|
|
same = unit == static_cast<Unit>(domain[i]);
|
|
}
|
|
if (same) return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// Makes every name lookup inside Skate.exe for an EA service fail as if the name did not exist, so
|
|
// the game cannot reach EA's servers: no error reports, telemetry or remote configuration. Always on.
|
|
bool start_ea_service_block(std::string& error) noexcept;
|
|
|
|
} // namespace dingosdk
|