fix x86 build (sort of) and move translations to Github Wiki

This commit is contained in:
zeffy
2017-10-04 01:32:26 -07:00
parent 2950c14694
commit 61d79048fb
18 changed files with 96 additions and 473 deletions

View File

@@ -1,6 +1,6 @@
# wufuc [![](https://ci.appveyor.com/api/projects/status/0s2unkpokttyslf0?svg=true)](https://ci.appveyor.com/project/zeffy/wufuc) [![](https://isitmaintained.com/badge/resolution/zeffy/wufuc.svg)](https://isitmaintained.com/project/zeffy/wufuc)
**English** | [русский](translations/README.ru-RU.md) | [Français](translations/README.fr-FR.md) | [Deutsch](translations/README.de-DE.md) | [Magyar](translations/README.hu-HU.md) | [Portuguese (Brazil)](translations/README.pt-BR.md)
**English** | [русский](../../wiki/README-(русский)) | [Français](../../wiki/README-(Français)) | [Deutsch](../../wiki/CONTRIBUTING-(Deutsch)) | [Magyar](../../wiki/README-(Magyar)) | [Portuguese (Brazil)](../../wiki/README-(Português-Brasileiro))
Disables the "Unsupported Hardware" message in Windows Update, and allows you to continue installing updates on Windows 7 and 8.1 systems with Intel Kaby Lake, AMD Ryzen, or other unsupported processors.

View File

@@ -1,22 +0,0 @@
# Richtlinien für die Fehlermeldung
[English](../CONTRIBUTING.md) | [русский](CONTRIBUTING.ru-RU.md) | [Français](CONTRIBUTING.fr-FR.md) | **Deutsch** | [Magyar](CONTRIBUTING.hu-HU.md) | [Portuguese (Brazil)](CONTRIBUTING.pt-BR.md)
## Fehler melden [![](https://isitmaintained.com/badge/resolution/zeffy/wufuc.svg)](https://isitmaintained.com/project/zeffy/wufuc)
#### Bevor du eine Fehlermeldung meldest, bitte beachte die folgenden Punkte:
- Benutzt du gerade die [neuste stabile Version](../../../releases/latest)?
- Hast du versucht den Rechner neu zu starten?
#### Nachdem du alles überprüft hast, erstelle ein Fehlerbericht mit folgenden Informationen:
- Navigiere zum Ordner wo du wufuc installiert hast, und hänge der Fehlermeldung alle `*.log` Dateien an.
- Welche Version benutzt du? Eine stabile Release Version oder ein instabiler AppVeyor Build?
- Wie ist die Datei Version und/oder der SHA-1 Hash von der `C:\Windows\System32\wuaueng.dll` Bibliothek?
- Alles was du noch zusätzlich als Relevant betrachtest.
## Richtlinie bei der Schließung der Fehlermeldungen
- Fehlermeldungen die nicht ausreichende Informationen haben (falls zutreffend) werden sofort geschlossen und der Ersteller wird auf diese Richtlinie verwiesen.
- Fehlermeldungen nach einer Woche ohne Reaktion vom Ersteller werden nach meinen Ermessen geschlossen.

View File

@@ -1,22 +0,0 @@
# Directives de contribution
[English](../CONTRIBUTING.md) | [русский](CONTRIBUTING.ru-RU.md) | **Français** | [Deutsch](CONTRIBUTING.de-DE.md) | [Magyar](CONTRIBUTING.hu-HU.md) | [Portuguese (Brazil)](CONTRIBUTING.pt-BR.md)
## Reporter un problème [![](https://isitmaintained.com/badge/resolution/zeffy/wufuc.svg)](https://isitmaintained.com/project/zeffy/wufuc)
#### Avant de créer un ticket d'issue, veuillez vous assurer d'avoir vérifié les points suivants :
- Utilisez-vous bien la [dernière version stable](../../../releases/latest)?
- Avez-vous essayé de redémarrer l'ordinateur ?
#### Après avoir confirmé ces éléments, veuillez créer un ticket en incluant les informations suivantes :
- Ouvrez le naviguateur Windows dans le dossier où est installé wufuc, et joignez tous les fichiers `*.log` au ticket.
- Quelle version utilisez-vous ? Une livraison stable ou un build AppVeyor instable ?
- Quelle est la version et/ou le checksum SHA-1 du fichier `C:\Windows\System32\wuaueng.dll` ?
- Toute autre information qui vous semble appropriée au ticket.
## Politique de fermeture
- Les tickets qui n'ont pas les informations demandées ci-dessus (quand cela s'y prête) seront fermés immédiatement et le demandeur sera redirigé vers les directives de contribution.
- Les tickets qui resteront une semaine sans réponse du demandeur originel sont sujets à fermeture à ma discrétion.

View File

@@ -1,23 +0,0 @@
# Hozzájárulási irányelvek
[English](../CONTRIBUTING.md) | [русский](CONTRIBUTING.ru-RU.md) | [Français](CONTRIBUTING.fr-FR.md) | [Deutsch](CONTRIBUTING.de-DE.md) | **Magyar** | [Portuguese (Brazil)](CONTRIBUTING.pt-BR.md)
## Hiba jelentése [![](https://isitmaintained.com/badge/resolution/zeffy/wufuc.svg)](https://isitmaintained.com/project/zeffy/wufuc)
#### Mielőtt jeleznél egy hibát, kérem ellenőrizd hogy:
- A [legújabb stabil verzió](../../../releases/latest)t használod?
- Megpróbáltad újraindítani a számítógépet?
#### Miután ezeket ellenőrizted, hozz létre egy hibajelentést ezekkel az információkkal:
- Csatold a `*.log` fájlokat a könyvtárból, ahova a wufuc-ot telepítetted.
- Melyik build-et használtad? Stabil release vagy instabil AppVeyor build?
- Mi a `C:\Windows\System32\wuaueng.dll` fájl verziója és/vagy SHA-1 hash kódja?
- Bármi más információ amit hasznosnak látsz a hiba elhárításához
- Kérlek angolul jelentsed be a hibát.
## Hibazárási eljárás
- A hibajelentések amik nem tartalmazzák a fent kért adatokat be lesznek zárva és a hibajelentő figyelmét felhívjuk erre a dokumentumra.
- A hibajelentések amikben egy hét után nem reagál a hibajelentő, be lesznek zárva ha ezt így látom megfelelőnek.

View File

@@ -1,22 +0,0 @@
# Contributing guidelines
[English](../CONTRIBUTING.md) | [русский](CONTRIBUTING.ru-RU.md) | [Français](CONTRIBUTING.fr-FR.md) | [Deutsch](CONTRIBUTING.de-DE.md) | [Magyar](CONTRIBUTING.hu-HU.md) | **Portuguese (Brazil)**
## Reportando problemas [![](https://isitmaintained.com/badge/resolution/zeffy/wufuc.svg)](https://isitmaintained.com/project/zeffy/wufuc)
#### Antes de criar um tópico de dúvidas, por favor verifique se:
- você está utilizando a última versão [latest stable version](../../../releases/latest)?
- você já tentou reiniciar o seu PC?
#### Depois de confirmar os dois passos acima, por favor crie um tópico de dúvidas incluindo as seguintes informações:
- Acesse a pasta onde você instalou o wufuc, e anexe todos os arquivos `*.log` no seu tópico.
- Que versão você está utilizando? A versão estável ou instável?
- Qual a versão do arquivo e/ou SHA-1 hash do `C:\Windows\System32\wuaueng.dll`?
- Qualquer outra informação relevante que você acha que deve incluir.
## Política de encerramento
- Os tópicos de dúvidas que não tem as informações requisitadas acima (quando aplicável) será fechado imediatamente e o autor será direcionado para as normas de contribuição.
- Os tópicos que ficarem 1 semana sem responsta do autor original, será fechado a meu critério.

View File

@@ -1,22 +0,0 @@
# Инструкция для тех, кто желает помочь, внести вклад
[English](../CONTRIBUTING.md) | **русский** | [Français](CONTRIBUTING.fr-FR.md) | [Deutsch](CONTRIBUTING.de-DE.md) | [Magyar](CONTRIBUTING.hu-HU.md) | [Portuguese (Brazil)](CONTRIBUTING.pt-BR.md)
## Сообщайте об ошибках [![](https://isitmaintained.com/badge/resolution/zeffy/wufuc.svg)](https://isitmaintained.com/project/zeffy/wufuc)
#### Перед созданием баг-репорта убедитесь, что:
- Вы используете [последнюю стабильную версию](../../../releases/latest);
- Вы пытались перезагружать компьютер.
#### После проверки и подтверждения вышеизложенных пунктов, создавайте баг-репорт и включите в него следующую информацию:
- Зайдите в папку установки wufuc, и прикрепите все `*.log`-файлы к репорту.
- Какой билд вы используете? Стабильный релиз или нестабильный билд с AppVeyor?
- Какая версия и/или SHA-1 хеш-сумма файла `C:\Windows\System32\wuaueng.dll`?
- Любую другую информацию, которая может относиться к вопросу.
## Политика закрытия репортов
- Сообщения без запрошенной информации (см. выше) будут закрыты немедленно и докладчик будет направлен сюда, читать эту инструкцию.
- Сообщения, висящие без ответа от оригинального докладчика более недели подлежат закрытию на моё усмотрение.

View File

@@ -1,56 +0,0 @@
# wufuc [![](https://ci.appveyor.com/api/projects/status/0s2unkpokttyslf0?svg=true)](https://ci.appveyor.com/project/zeffy/wufuc)
[English](../README.md) | [русский](README.ru-RU.md) | [Français](README.fr-FR.md) | **Deutsch** | [Magyar](README.hu-HU.md) | [Portuguese (Brazil)](README.pt-BR.md)
[![Klicke hier um wufuc zu unterstützen und um eine Spende zu tätigen - auf pledgie.com !](https://pledgie.com/campaigns/34055.png)](https://pledgie.com/campaigns/34055) <a href='https://gratipay.com/wufuc/'><img height=37 alt='Click here to tip wufuc on Gratipay!' src='https://cdn.rawgit.com/zeffy/gratipay-badge/master/dist/gratipay.svg' /></a>
Das Tool schaltet die "Unsupported Hardware" Nachricht in Windows Update ab und erlaubt dir auf Windows 7 und 8.1 Systemen mit Intel Kaby Lake, AMD Ryzen oder anderen nicht unterstützten Prozessoren weiterhin Updates zu installieren.
## Downloads [![](https://img.shields.io/github/downloads/zeffy/wufuc/total.svg)](../../../releases)
### Die neuste stabile Version kannst du [hier](../../../releases/latest) herunterladen!
Wenn du dich traust, kannst du von [hier](https://ci.appveyor.com/project/zeffy/wufuc) die letzten instabilen Builds herunterladen. **Auf eigene Verantwortung!**
## Sponsoren
### [Advanced Installer](http://www.advancedinstaller.com/)
Die Installer-Pakete wurden mit Advanced Installer unter einer Open Source Lizenz erstellt. Die Intuitive und Freundliche Benutzeroberfläche von Advanced Installer hat es mir erlaubt einen vollwertigen Installer mit minimalem Aufwand zu erstellen. [Schaue es dir an!](http://www.advancedinstaller.com/)
## Fehler melden [![](https://isitmaintained.com/badge/resolution/zeffy/wufuc.svg)](https://isitmaintained.com/project/zeffy/wufuc)
Siehe [CONTRIBUTING.de-DE.md](CONTRIBUTING.de-DE.md).
## Vorwort
Der Changelog für die Windows Updates KB4012218 und KB4012219 enthielt folgendes:
> Enabled detection of processor generation and hardware support when PC tries to scan or download updates through Windows Update.
Damit wurde ein [Verfahrenswechel](https://blogs.windows.com/windowsexperience/2016/01/15/windows-10-embracing-silicon-innovation/) eingeleitet, den sie vor einiger Zeit verkündet hatten. Microsoft hatte verkündet, dass sie Windows 7 oder 8.1 auf Nächste Generation Intel, AMD und Qualcomm Prozessoren nicht mehr unterstützen werden.
Wer also nicht auf Windows 10 "upgraded" ist gea*****, obwohl der Erweiterte Support für Windows 7 und 8.1 bis zum 4. Januar 2020, respektiv zum 10. Januar 2023 läuft.
Das betrifft sogar Leute mit älteren Intel und AMD Prozessoren!
## Böses Microsoft!
Wenn du interessiert bist, kannst du meinen Artikel lesen wie ich den CPU Check herausgefunden habe -> [hier klicken](../../../tree/old-kb4012218-19).
## Wie funktioniert es?
In der Bibliothekdatei `wuaueng.dll` gibt es zwei Funktionen: [`IsDeviceServiceable(void)`](https://gist.github.com/zeffy/e5ec266952932bc905eb0cbc6ed72185) und [`IsCPUSupported(void)`](https://gist.github.com/zeffy/1a8f8984d2bec97ae24af63a76278694). `IsDeviceServiceable(void)` ist ein Wrapper um `IsCPUSupported(void)` welche die Empfangenen Ergebnisse zwischenspeichert und bei neuen Aufrufen wiederverwendet.
Mein Patch nutzt dieses Verhalten aus und setzt die "Erstausführung" Variable auf `FALSCH` und den gecachten Ergebnis auf `WAHR`.
- Beim Booten wird vom `NT AUTHORITY\SYSTEM` Benutzer ein wufuc geplanter Task gestartet.
- `wufuc` erkundet im welchen Service Prozesshostgruppe der Windows Update Service läuft (typischerweise `netsvcs`) und injiziert sich in dem Prozess.
- Jetzt wird eine Hook in `LoadLibraryEx` gesetzt, welche `wuaueng.dll` automatisch patcht wenn es geladen wird.
- Vorher geladene `wuaueng.dll` Instanzen werden auch gepatcht.
### Diverse Verbesserungen seit meiner Batchfile Methode:
- **Es werden keine Systemdateien mehr verändert!**
- Heuristisches patchen, wodurch der Patch auch nach updates funktionieren sollte.
- Es wird C benutzt!
- Keine externen Abhängigkeiten.

View File

@@ -1,57 +0,0 @@
# wufuc [![](https://ci.appveyor.com/api/projects/status/0s2unkpokttyslf0?svg=true)](https://ci.appveyor.com/project/zeffy/wufuc)
[English](../README.md) | [русский](README.ru-RU.md) | **Français** | [Deutsch](README.de-DE.md) | [Magyar](README.hu-HU.md) | [Portuguese (Brazil)](README.pt-BR.md)
[![Cliquez ici pour témoigner votre support à wufuc et faire une donation sur pledgie.com !](https://pledgie.com/campaigns/34055.png)](https://pledgie.com/campaigns/34055) <a href='https://gratipay.com/wufuc/'><img height=37 alt='Cliquez pour laisser un pourboire à wufuc sur Gratipay!' src='https://cdn.rawgit.com/zeffy/gratipay-badge/master/dist/gratipay.svg' /></a>
Ce projet désactive le message de popup "Unsupported Hardware" pendant les mises à jour Windows, et permet de continuer à installer des updates sur les systèmes Windows 7 et 8.1, équipés de processeurs Intel Kaby Lake, AMD Ryzen, ou tout autre processor non supporté.
## Téléchargements [![](https://img.shields.io/github/downloads/zeffy/wufuc/total.svg)](../../../releases)
### Vous pouvez obtenir la dernière version stable [ici](../../../releases/latest) !
Si vous vous sentez courageux, vous pouvez essayer le dernier build instable [ici](https://ci.appveyor.com/project/zeffy/wufuc). **À utiliser à vos propres risques !**
## Sponsors
### [Advanced Installer](http://www.advancedinstaller.com/)
Les packages d'installation ont été créés avec Advanced Installer avec une license open source. L'interface utilisateur intuitive d'Advanced Installer m'a permis de créer un installeur complet avec un minimum d'effort. [Plus de détails ici !](http://www.advancedinstaller.com/)
## Reporter un problème [![](https://isitmaintained.com/badge/resolution/zeffy/wufuc.svg)](https://isitmaintained.com/project/zeffy/wufuc)
Voir [CONTRIBUTING.fr-FR.md](CONTRIBUTING.fr-FR.md).
## Préface
Le changelog des mises à jour Windows KB4012218 and KB4012219 incluait le message suivant:
> Activation de la détection de la génération de processeur et du support matériel quand le PC essaie de scanner ou télécharger grâce à Windows Update.
Ces updates ont marqué l'implémentation d'un [changement de politique](https://blogs.windows.com/windowsexperience/2016/01/15/windows-10-embracing-silicon-innovation/) qu'ils avaient annoncé quelques temps auparavant, et dans lequel Microsoft énonçait qu'ils ne supporteraient plus Windows 7 et 8.1 pour les nouvelles générations de processeurs Intel, AMD et Qualcomm.
C'est un majestueux doigt d'honneur à tous ceux qui ont décidé de ne pas "upgrader" vers la bouse connue sous le nom de Windows 10, en particulier en considérant que le support étendu de Windows 7 et Windows 8.1 ne se terminera pas avant le 4 janvier 2020 et 10 janvier 2023 respectivement.
Cela affecte également des gens avec des processeurs Intel et AMD plus vieux ! J'ai reçu des rapports d'utilisateurs pour [Intel Atom Z530](../../../issues/7), [Intel Core i5-M 560](../../../issues/23), [Intel Core i5-4300M](../../../issues/24), [Intel Atom D525](../../../issues/34), [Intel Pentium B940](../../../issues/63), [AMD FX-8350](../../../issues/32), et [AMD Turion 64 Mobile Technology ML-34](../../../issues/80), tous empêchés de recevoir des updates.
## Méchant Microsoft !
Si vous êtes intéressés, vous pouvez lire mon écrit originel sur la découverte du check de CPU [ici (en anglais)](../../../tree/old-kb4012218-19).
## Comment ça marche
De manière basique, dans le fichier `wuaueng.dll` il y a deux fonctions [`IsDeviceServiceable(void)`](https://gist.github.com/zeffy/e5ec266952932bc905eb0cbc6ed72185) et [`IsCPUSupported(void)`](https://gist.github.com/zeffy/1a8f8984d2bec97ae24af63a76278694). `IsDeviceServiceable(void)` est un wrapper au dessus de `IsCPUSupported(void)` qui met en cache le résultat qu'il reçoit et le réutilise pour les appels suivants.
Mon patch tire avantage de comportement à mettre en cache le résultat en assignant la valeur de la "première exécution" à `FALSE` et le résultat en cache à `TRUE`.
- Au boot du système, la tâche planifiée wufuc s'exécute en tant qu'utilsateur `NT AUTHORITY\SYSTEM`
- `wufuc` détermine dans quel groupe de processus hôte le service Windows Update est exécuté (typiquement `netsvcs`), et s'injecte lui-même à l'intérieur.
- Une fois injecté, il applique un hook à `LoadLibraryEx` qui patche `wuaueng.dll` automatiquement à la volée quand il est chargé.
- Toute librairie `wuaueng.dll` précédemment chargée est aussi patchée.
### Plusieurs améliorations de mes méthodes par script batch :
- **Aucun fichier système n'est modifié !**
- Patch avec une base heuristique, ce qui signifie que cela devrait continuer de fonctionner même si d'autres updates sortent.
- Le langage C était le plus adapté.
- Pas de dépendances externes.

View File

@@ -1,54 +0,0 @@
# wufuc [![](https://ci.appveyor.com/api/projects/status/0s2unkpokttyslf0?svg=true)](https://ci.appveyor.com/project/zeffy/wufuc)
[English](../README.md) | [русский](README.ru-RU.md) | [Français](README.fr-FR.md) | [Deutsch](README.de-DE.md) | **Magyar** | [Portuguese (Brazil)](README.pt-BR.md)
[![Kattints ide hogy támogassad a wufuc-ot a pledgie.com-on !](https://pledgie.com/campaigns/34055.png)](https://pledgie.com/campaigns/34055) <a href='https://gratipay.com/wufuc/'><img height=37 alt='Click here to tip wufuc on Gratipay!' src='https://cdn.rawgit.com/zeffy/gratipay-badge/master/dist/gratipay.svg' /></a>
Kikapcsolja az "Windows Update Unsupported Hardware/Nem támogatott hardver" jelentését, és lehetővé teszi a frissítések telepítését Intel Kaby Lake, AMD Ryzen, vagy más nem támogatott processzoros Windows 7 és 8.1 rendszereken.
## Letöltések [![](https://img.shields.io/github/downloads/zeffy/wufuc/total.svg)](../../../releases)
### A legfrissebb stabil verziót [itt](../../../releases/latest) találod!
Ha bátornak érzed magad, itt próbálhatod ki a legfrissebb build-eket [here](https://ci.appveyor.com/project/zeffy/wufuc). **Saját felelősségre!**
## Szponzorok
### [Advanced Installer](http://www.advancedinstaller.com/)
A telepítő csomagok Advanced Installerel lettek elkészítve, open source licenc alatt. Az Advanced Installer program intuitív és barátságos UI-jával gyorsan és kényelmesen el tudtam készíteni a telepítőt. [Nézd meg!](http://www.advancedinstaller.com/)
## Hibajelentés [![](https://isitmaintained.com/badge/resolution/zeffy/wufuc.svg)](https://isitmaintained.com/project/zeffy/wufuc)
Lásd [CONTRIBUTING.hu-HU.md](CONTRIBUTING.hu-HU.md).
## Előszó
Az KB4012218 és KB4012219 kódszámú Windows frissítések leírása ezeket az információkat tartalmazta:
> Enabled detection of processor generation and hardware support when PC tries to scan or download updates through Windows Update.
Ez a frissítés lényegében egy [filozófiavĺtást](https://blogs.windows.com/windowsexperience/2016/01/15/windows-10-embracing-silicon-innovation/) jelentett, hogy a Microsoft nem fogja támogatni a Windows 7 vagy 8.1 következő generációs Intel, AMD és Qualcomm processzoron.
A szerző véleményéről evvel kapcsolatban legjobban az angol verzióból informálódhattok.
## Rossz Microsoft!
Ha érdekelnek a részletek, [itt](../../../tree/old-kb4012218-19) olvashatsz tovább.
## Hogy működik?
A `wuaueng.dll` fájl két függvényt tartalmaz: [`IsDeviceServiceable(void)`](https://gist.github.com/zeffy/e5ec266952932bc905eb0cbc6ed72185) és [`IsCPUSupported(void)`](https://gist.github.com/zeffy/1a8f8984d2bec97ae24af63a76278694). `IsDeviceServiceable(void)` egy egyszerű wrapper a `IsCPUSupported(void)` függvény körül, ami eltárolja amit olvas és új felhíváskor újra felhasználja ezeket.
A patch ezt a tárolást használja ki, és átállítja a "first run" értéket `FALSE`-ra és a cached result-t `TRUE`-ra.
- A rendszer bootolásakor a wufuc munkacsomag elindul az `NT AUTHORITY\SYSTEM` felhasználó alatt.
- `wufuc` megkeresi melyik service process-ben fut a Windows Update service (tipikusan `netsvcs`), és belekapcsolódik.
- Miután ez megtörtént, a `LoadLibraryEx` segítségével automatikusan módosítja a `wuaueng.dll`-t ha az be lesz töltve.
- Egy előzőlegesen betöltött `wuaueng.dll` is meg lesz patchelve.
### Fejlesztések a régi batchfájl módszerhez képest:
- **Rendszerfájlok nem lesznek módosítva**
- Heurisztikusan dolgozó patchelés, ami segítségével a program frissítések után is működik.
- C nyelv használata skriptelés helyett!
- Nincs külső függőség.

View File

@@ -1,56 +0,0 @@
# wufuc [![](https://ci.appveyor.com/api/projects/status/0s2unkpokttyslf0?svg=true)](https://ci.appveyor.com/project/zeffy/wufuc)
[English](../README.md) | [русский](README.ru-RU.md) | [Français](README.fr-FR.md) | [Deutsch](README.de-DE.md) | [Magyar](README.hu-HU.md) | **Portuguese (Brazil)**
[![Click here to lend your support to wufuc and make a donation at pledgie.com !](https://pledgie.com/campaigns/34055.png)](https://pledgie.com/campaigns/34055) <a href='https://gratipay.com/wufuc/'><img height=37 alt='Click here to tip wufuc on Gratipay!' src='https://cdn.rawgit.com/zeffy/gratipay-badge/master/dist/gratipay.svg' /></a>
Desabilita a mensagem “Seu PC utiliza um processador que não é suportado por esta versão do Windows e você não receberá atualizações” do Windows Update, e permite que você continue instalando atualizações nos sistemas Windows 7 and 8.1 com os novos processadores Intel Kaby Lake, AMD Ryzen, ou outros processadores.
## Downloads [![](https://img.shields.io/github/downloads/zeffy/wufuc/total.svg)](../../../releases)
### Você pode baixar a última versão estável [aqui](../../../releases/latest)!
Se você é corajoso, você pode testar a último versão instável [aqui](https://ci.appveyor.com/project/zeffy/wufuc). **Utilize-o por risco próprio**
## Patrocinadores
### [Advanced Installer](http://www.advancedinstaller.com/)
O instalador dos pacotes foram criados com Advanced Installer com a licença de cógido aberto. O Advanced Installer tem uma interface intuitiva e amigável que me permitiu a criar rapidamente um instalador completo com facilidade. [Dê uma olhada nisso](http://www.advancedinstaller.com/)
## Reportando problemas [![](https://isitmaintained.com/badge/resolution/zeffy/wufuc.svg)](https://isitmaintained.com/project/zeffy/wufuc)
Leia [CONTRIBUTING.pt-BR.md](CONTRIBUTING.pt-BR.md).
## Prefácio
O changelog para atualizações do Windows KB4012218 e KB4012219 incluindo o:
> Habilita detecção de geração de processador e suporte de hardware quando PC procura ou baixa atualizações pelo Windows Update.
Essas atualizações marcaram a implementação da [policy change](https://blogs.windows.com/windowsexperience/2016/01/15/windows-10-embracing-silicon-innovation/) que foi anunciado há um tempo atrás, onde a Microsoft declara que não irá fornecer suporte do Windows 7 ou 8.1 on na próxima geração de processadores Intel, AMD and Qualcomm.
Esse anúncio foi basicamente um foda-se para aqueles que decidiram não fazer upgrade para a grande "merda" conhecida por windows 10, especialmente considerando que o período de suporte para o Windows 7 e 8.1 só irá terminar em 4 de Janeiro de 2020 e 10 de Janeiro de 2023, respectivamente.
Essa atualização afetou até as pessoas que possuem processadores antigos da Intel e AMD! Alguns usuários já me relataram que tiveram o mesmo problema [Intel Atom Z530](../../../issues/7), [Intel Core i5-M 560](../../../issues/23), [Intel Core i5-4300M](../../../issues/24), [Intel Atom D525](../../../issues/34), [Intel Pentium B940](../../../issues/63), [AMD FX-8350](../../../issues/32), and [AMD Turion 64 Mobile Technology ML-34](../../../issues/80) sendo todos bloqueados no Windows Update.
## Microsoft sacana!
Se você estiver interessado, você pode ler você pode ler as minhas primeiras anotações de como descrobri o CPU check [aqui](../../../tree/old-kb4012218-19).
## Como funciona
Basicamente, dentro do arquivo chamado `wuaueng.dll` existem 2 funções: [`IsDeviceServiceable(void)`](https://gist.github.com/zeffy/e5ec266952932bc905eb0cbc6ed72185) and [`IsCPUSupported(void)`](https://gist.github.com/zeffy/1a8f8984d2bec97ae24af63a76278694). `IsDeviceServiceable(void)` é basicamente um desvio `IsCPUSupported(void)` que captura o resultado que ele recebe e a recicla nas próximas chamadas.
Meu patch altera o resultado do valor da "first run" de `FALSE` e transforma o resultado em `TRUE`.
- No boot do sistema a tarefa agendada do wufuc roda como usuário `NT AUTHORITY\SYSTEM`.
- `wufuc` determina que serviço host group processa o Windows Update roda (normalmente `netsvcs`), e se introduz nele.
- Uma vez introduzido, ele aplica o hook para `LoadLibraryEx` que automaticamente roda `wuaueng.dll` quando está carregado.
- Qualquer carregamento prévio do `wuaueng.dll` também é rodado.
### Muitas melhorias no meu método batchfile:
- **Nenhum arquivo do sistema é alterado!**
- Heuristic-based patching, isso significa que ele funcionará mesmo com novas atualizações do Windows.
- C é a melhor linguagem!
- Não depende de nada externo.

View File

@@ -1,57 +0,0 @@
# wufuc [![](https://ci.appveyor.com/api/projects/status/0s2unkpokttyslf0?svg=true)](https://ci.appveyor.com/project/zeffy/wufuc)
[English](../README.md) | **русский** | [Français](README.fr-FR.md) | [Deutsch](README.de-DE.md) | [Magyar](README.hu-HU.md) | [Portuguese (Brazil)](README.pt-BR.md)
[![Нажмите сюда, чтоюы поддержать wufuc пожертвованием на pledgie.com !](https://pledgie.com/campaigns/34055.png)](https://pledgie.com/campaigns/34055) <a href='https://gratipay.com/wufuc/'><img height=37 alt='Click here to tip wufuc on Gratipay!' src='https://cdn.rawgit.com/zeffy/gratipay-badge/master/dist/gratipay.svg' /></a>
Отключает сообщение "Оборудование не поддерживается" в Windows Update, и позволяет продолжать устанавливать обновления на системах Windows 7 и 8.1 с процессорами Intel Kaby Lake, AMD Ryzen, и другими не поддерживаемыми.
## Загрузки [![](https://img.shields.io/github/downloads/zeffy/wufuc/total.svg)](../../../releases)
### Последний стабильный релиз можно скачать [здесь](../../../releases/latest)!
Храбрецы могут попробовать последний нестабильный билд [отсюда](https://ci.appveyor.com/project/zeffy/wufuc). **Использовать на свой собственный страх и риск!**
## Спонсоры
### [Advanced Installer](http://www.advancedinstaller.com/)
Для создания установщиков используется Advanced Installer по лицензии с открытым исходным кодом. Интуитивно понятный и удобный пользовательский интерфейс Advanced Installer'a позволяет быстро создать полнофункциональный инсталлятор с минимальными усилиями. [Проверьте сами!](http://www.advancedinstaller.com/)
## Как сообщить об ошибке [![](https://isitmaintained.com/badge/resolution/zeffy/wufuc.svg)](https://isitmaintained.com/project/zeffy/wufuc)
Смотри в [CONTRIBUTING.ru-RU.md](CONTRIBUTING.ru-RU.md).
## Предисловие
Список изменений для обновлений Windows KB4012218 и KB4012219 включает следующее:
> Включено распознавание поддержки поколения процессоров и оборудования когда ПК пытается скачать обновления через Windows Update.
Эти обновления знаменуют [смену политики](https://blogs.windows.com/windowsexperience/2016/01/15/windows-10-embracing-silicon-innovation/), анонсированную некоторое время назад, где Microsoft объявила, что больше не будет поддерживать Windows 7 или 8.1 для следующих поколений процессоров Intel, AMD и Qualcomm.
По существу, это то же, что показать средний палец всем, кто решит не "обновляться" до вонючей кучи :shit: , известной как Windows 10, особенно учитывая то, что расширенный период поддержки для Windows 7 не закончится до 4 января 2020 и для Windows 8.1 - до 10 января 2023.
Это затронуло даже людей с более старыми процессорами Intel и AMD! Я видел сообщения от пользователей [Intel Atom Z530](../../../issues/7), [Intel Core i5-M 560](../../../issues/23), [Intel Core i5-4300M](../../../issues/24), [Intel Atom D525](../../../issues/34), [Intel Pentium B940](../../../issues/63), [AMD FX-8350](../../../issues/32), и [AMD Turion 64 Mobile Technology ML-34](../../../issues/80) - на всех них было заблокировано получение обновлений.
## Плохая Microsoft!
Если вам интересно, можете прочитать мою оригинальную записку об обнаружении проверки на тип процессора [тут](../../../tree/old-kb4012218-19).
## Как работает этот патчер
Вкратце, в файле под названием `wuaueng.dll` есть 2 функции: [`IsDeviceServiceable(void)`](https://gist.github.com/zeffy/e5ec266952932bc905eb0cbc6ed72185) и [`IsCPUSupported(void)`](https://gist.github.com/zeffy/1a8f8984d2bec97ae24af63a76278694). `IsDeviceServiceable(void)` по сути просто обертка над `IsCPUSupported(void)`, которая кэширует полученный результат и переиспользует его при последующих вызовах.
Мой патчер пользуется этим, устанавливая флаг "первый запуск" в `FALSE` и кэшированный результат в `TRUE`.
- При старте системы назначенное задание wufuc запускается от имени пользователя `NT AUTHORITY\SYSTEM`.
- `wufuc` определяет группу служб, под которой выполняется процесс Windows Update (обычно `netsvcs`), и внедряется в неё.
- После внедрения применяется перехват `LoadLibraryEx`, который автоматчиески патчит `wuaueng.dll` при загрузке.
- Любая загруженная до этого `wuaueng.dll` тоже патчится.
### Несколько преимуществ перед методом batch-файла:
- **Нет модификаций в системных файлах!**
- Эвристический патчер - продолжит работать (я надеюсь) даже после выхода новых обновлений.
- C - лучший язык!
- Нет внешних зависимостей.

View File

@@ -35,23 +35,22 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserv
if ( verify_winver(6, 1, 0, 0, 0, VER_EQUAL, VER_EQUAL, 0, 0, 0)
|| verify_winver(6, 3, 0, 0, 0, VER_EQUAL, VER_EQUAL, 0, 0, 0) ) {
RTL_QUERY_REGISTRY_TABLE QueryTable[1];
RTL_QUERY_REGISTRY_TABLE QueryTable;
RtlSecureZeroMemory(&QueryTable, sizeof(QueryTable));
QueryTable[0].Name = L"ImagePath";
QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_REQUIRED;
QueryTable.Name = L"ImagePath";
QueryTable.Flags = RTL_QUERY_REGISTRY_DIRECT;
UNICODE_STRING ImagePath;
RtlInitUnicodeString(&ImagePath, NULL);
QueryTable[0].EntryContext = &ImagePath;
QueryTable.EntryContext = &ImagePath;
NTSTATUS Status = RtlQueryRegistryValues(RTL_REGISTRY_SERVICES,
L"wuauserv",
QueryTable,
&QueryTable,
NULL,
NULL);
// TODO: check status and maybe fix implementation? idk...
if ( !RtlCompareUnicodeString(&NtCurrentPeb()->ProcessParameters->CommandLine, &ImagePath, TRUE) ) {
if ( !RtlCompareUnicodeString(&NtCurrentPeb()->ProcessParameters->CommandLine, &ImagePath, TRUE) )
g_vfProviderDescriptor.ProviderDlls = g_vfDllDescriptors;
}
}
*(PRTL_VERIFIER_PROVIDER_DESCRIPTOR *)lpReserved = &g_vfProviderDescriptor;
break;

View File

@@ -126,7 +126,7 @@ HMODULE WINAPI LoadLibraryExW_Hook(LPCWSTR lpFileName, HANDLE hFile, DWORD dwFla
trace(L"%ls version: %d.%d.%d.%d", fname, wMajor, wMinor, wBuild, wRevision);
MODULEINFO modinfo;
if ( GetModuleInformation(GetCurrentProcess(), result, &modinfo, sizeof(MODULEINFO)) ) {
if ( !patch_wua(modinfo.lpBaseOfDll, modinfo.SizeOfImage) )
if ( !patch_wua(modinfo.lpBaseOfDll, modinfo.SizeOfImage, fname) )
trace(L"Failed to patch %ls!", fname);
} else trace(L"Failed to get module information for %ls (%p) (couldn't patch)", fname, result);
} else trace(L"Unsupported version of %ls: %d.%d.%d.%d (patching skipped)", fname, wMajor, wMinor, wBuild, wRevision);

View File

@@ -11,63 +11,67 @@
#include <phnt_windows.h>
#include <phnt.h>
bool patch_wua(void *lpBaseOfDll, size_t SizeOfImage)
static const PatchSet X64PatchSet = { "FFF3 4883EC?? 33DB 391D???????? 7508 8B05????????", 0xA, 0x12 };
static const PatchSet Win7X86PatchSet = { "833D????????00 743E E8???????? A3????????", 0x2, 0xF };
static const PatchSet Win81X86PatchSet = { "8BFF 51 833D????????00 7507 A1????????", 0x5, 0xD };
bool calculate_pointers(uintptr_t lpfn, const PatchSet *ps, LPBOOL *ppba, LPBOOL *ppbb)
{
char *pattern;
size_t offset1, offset2;
#ifdef _M_AMD64
pattern = "FFF3 4883EC?? 33DB 391D???????? 7508 8B05????????";
offset1 = 10;
offset2 = 18;
#elif defined(_M_IX86)
if ( IsWindows7() ) {
pattern = "833D????????00 743E E8???????? A3????????";
offset1 = 2;
offset2 = 15;
} else if ( IsWindows8Point1() ) {
pattern = "8BFF 51 833D????????00 7507 A1????????";
offset1 = 5;
offset2 = 13;
size_t bits = sizeof(uintptr_t) * 8;
if ( bits == 64 ) {
*ppba = (LPBOOL)(lpfn + ps->Offset1 + sizeof(uint32_t) + *(uint32_t *)(lpfn + ps->Offset1));
*ppbb = (LPBOOL)(lpfn + ps->Offset2 + sizeof(uint32_t) + *(uint32_t *)(lpfn + ps->Offset2));
return true;
} else if ( bits == 32 ) {
*ppba = (LPBOOL)(*(uintptr_t *)(lpfn + ps->Offset1));
*ppbb = (LPBOOL)(*(uintptr_t *)(lpfn + ps->Offset2));
return true;
}
#endif
unsigned char *ptr = patternfind(lpBaseOfDll, SizeOfImage, pattern);
if ( !ptr ) {
trace(L"No pattern match! (couldn't patch)");
return FALSE;
}
wchar_t path[MAX_PATH];
GetModuleFileName((HMODULE)lpBaseOfDll, path, _countof(path));
wchar_t *fname = find_fname(path);
trace(L"Matched pattern at %ls!%p",
fname,
ptr);
LPBOOL lpb1, lpb2;
#ifdef _M_AMD64
lpb1 = (LPBOOL)(ptr + offset1 + sizeof(uint32_t) + *(uint32_t *)(ptr + offset1));
lpb2 = (LPBOOL)(ptr + offset2 + sizeof(uint32_t) + *(uint32_t *)(ptr + offset2));
#elif defined(_M_IX86)
lpb1 = (LPBOOL)(*(uintptr_t *)(ptr + offset1));
lpb2 = (LPBOOL)(*(uintptr_t *)(ptr + offset2));
#endif
DWORD flOldProtect;
if ( *lpb1 == TRUE ) {
if ( VirtualProtect(lpb1, sizeof(BOOL), PAGE_READWRITE, &flOldProtect) ) {
*lpb1 = FALSE;
trace(L"Patched value #1 at %ls!%p: %08X", fname, lpb1, *lpb1);
if ( !VirtualProtect(lpb1, sizeof(BOOL), flOldProtect, &flOldProtect) )
trace(L"Failed to restore memory region permissions at %ls!%p (error code=%08X)", fname, lpb1, GetLastError());
} else trace(L"Failed to change memory region permissions at %ls!%p (error code=%08X)", fname, lpb1, GetLastError());
}
if ( *lpb2 == FALSE ) {
if ( VirtualProtect(lpb2, sizeof(BOOL), PAGE_READWRITE, &flOldProtect) ) {
*lpb2 = TRUE;
trace(L"Patched value #2 at %ls!%p: %08X", fname, lpb2, *lpb2);
if ( !VirtualProtect(lpb2, sizeof(BOOL), flOldProtect, &flOldProtect) )
trace(L"Failed to restore memory region permissions at %ls!%p: (error code=%08X)", fname, lpb2, GetLastError());
} else trace(L"Failed to change memory region permissions at %ls!%p (error code=%08X)", fname, lpb2, GetLastError());
}
return !*lpb1 && *lpb2;
return false;
}
bool patch_wua(void *lpBaseOfDll, size_t SizeOfImage, wchar_t *fname)
{
bool result = false;
const PatchSet *pps;
size_t bits = sizeof(uintptr_t) * 8;
if ( bits == 64 )
pps = &X64PatchSet;
else if ( bits == 32 && verify_winver(6, 1, 0, 0, 0, VER_EQUAL, VER_EQUAL, 0, 0, 0) )
pps = &Win7X86PatchSet;
else if ( bits == 32 && verify_winver(6, 3, 0, 0, 0, VER_EQUAL, VER_EQUAL, 0, 0, 0) )
pps = &Win81X86PatchSet;
else
goto L_ret;
unsigned char *ptr = patternfind(lpBaseOfDll, SizeOfImage, pps->Pattern);
if ( !ptr ) {
trace(L"No pattern match! (couldn't patch)");
goto L_ret;
}
LPBOOL pba, pbb;
if ( calculate_pointers((uintptr_t)ptr, pps, &pba, &pbb) ) {
DWORD flOldProtect;
if ( *pba == TRUE ) {
if ( VirtualProtect(pba, sizeof(BOOL), PAGE_READWRITE, &flOldProtect) ) {
*pba = FALSE;
trace(L"Patched boolean A at %ls!%p: %08X", fname, pba, *pba);
if ( !VirtualProtect(pba, sizeof(BOOL), flOldProtect, &flOldProtect) )
trace(L"Failed to restore memory region permissions at %ls!%p (error code=%08X)", fname, pba, GetLastError());
} else trace(L"Failed to change memory region permissions at %ls!%p (error code=%08X)", fname, pba, GetLastError());
}
if ( *pbb == FALSE ) {
if ( VirtualProtect(pbb, sizeof(BOOL), PAGE_READWRITE, &flOldProtect) ) {
*pbb = TRUE;
trace(L"Patched boolean B at %ls!%p: %08X", fname, pbb, *pbb);
if ( !VirtualProtect(pbb, sizeof(BOOL), flOldProtect, &flOldProtect) )
trace(L"Failed to restore memory region permissions at %ls!%p: (error code=%08X)", fname, pbb, GetLastError());
} else trace(L"Failed to change memory region permissions at %ls!%p (error code=%08X)", fname, pbb, GetLastError());
}
result = !*pba && *pbb;
}
L_ret:
return result;
}

View File

@@ -4,4 +4,12 @@
#include <phnt_windows.h>
bool patch_wua(void *lpBaseOfDll, size_t SizeOfImage);
typedef struct tagPatchSet
{
const char *Pattern;
const size_t Offset1;
const size_t Offset2;
} PatchSet;
bool calculate_pointers(uintptr_t lpfn, const PatchSet *ps, LPBOOL *ppba, LPBOOL *ppbb);
bool patch_wua(void *lpBaseOfDll, size_t SizeOfImage, wchar_t *fname);

View File

@@ -62,7 +62,7 @@ bool patterntransform(const char *patterntext, PatternByte *pattern, size_t patt
formathexpattern(patterntext, formattext, size);
PatternByte newByte;
for ( int i = 0, j = 0, k = 0; i < len && k <= patternsize; i++ ) {
for ( size_t i = 0, j = 0, k = 0; i < len && k <= patternsize; i++ ) {
if ( formattext[i] == '?' ) { //wildcard
newByte.nibble[j].wildcard = true; //match anything
} else { //hex
@@ -98,6 +98,21 @@ static inline bool patternmatchbyte(unsigned char byte, const PatternByte pbyte)
return (matched == 2);
}
unsigned char *patternfind3(unsigned char *data, size_t datasize, const PatternByte *pattern, size_t searchpatternsize)
{
for ( size_t i = 0, pos = 0; i < datasize; i++ ) { //search for the pattern
if ( patternmatchbyte(data[i], pattern[pos]) ) { //check if our pattern matches the current byte
pos++;
if ( pos == searchpatternsize ) //everything matched
return &data[i - searchpatternsize + 1];
} else if ( pos > 0 ) { //fix by Computer_Angel
i -= pos;
pos = 0; //reset current pattern position
}
}
return NULL;
}
unsigned char *patternfind(unsigned char *data, size_t datasize, const char *pattern)
{
size_t searchpatternsize = formathexpattern(pattern, NULL, 0) / 2;
@@ -162,18 +177,3 @@ bool patternsnr(unsigned char *data, size_t datasize, const char *searchpattern,
patternwrite(found, datasize - (found - data), replacepattern);
return true;
}
unsigned char *patternfind3(unsigned char *data, size_t datasize, const PatternByte *pattern, size_t searchpatternsize)
{
for ( size_t i = 0, pos = 0; i < datasize; i++ ) { //search for the pattern
if ( patternmatchbyte(data[i], pattern[pos]) ) { //check if our pattern matches the current byte
pos++;
if ( pos == searchpatternsize ) //everything matched
return &data[i - searchpatternsize + 1];
} else if ( pos > 0 ) { //fix by Computer_Angel
i -= pos;
pos = 0; //reset current pattern position
}
}
return NULL;
}

View File

@@ -1,5 +1,6 @@
#pragma once
#include <stddef.h>
#include <stdbool.h>
typedef struct tagPatternByte

View File

@@ -1,5 +1,7 @@
#pragma once
#include <stddef.h>
void *rtl_malloc(size_t size);
void rtl_free(void *memblock);