Jump to content
ludufre

[GUIA] Correção de assinatura BIOS Insyde H2O

1 post in this topic

Recommended Posts

[GUIA] Correção de assinatura BIOS Insyde H2O

 

Recentemente comprei um notebook Lenovo L440 pra instalar o macOS Mojave e fui substituir a placa wireless pela DW1560 porque a atual não é compatível. Descobri que existia uma whitelist de placas permitidas que as fabricantes estão adotando recentemente (no meu caso utiliza uma bios Phoenix Insyde BIOS H2O).

 

Procurei em fórums de BIOS MODDING e encontrei pessoas que fizeram o patch pra mim. Só que após substituir a BIOS notei que o computador ficava apitando 5 vezes todas vez que ligava e fui me aprofundar no caso. E foi aí que descobri como resolver isso e por isso criei esse guia baseado nas informações que achei em alguns fóruns russos.

 

 

Prefácio

 

Quando a BIOS falha no teste te integridade, algumas funcionalidades Intel AMT param de funcionar e é emitido uma sequência de 5 apitos duas vezes no boot.

Após modificar para remover whitelist (habilitar placas WI-FI não autorizadas), destravar MSR 0xe2 (hackintosh), habilitar menu avançado, etc. a BIOS não vai passar no teste de integridade causando esse problema.

Essa verificação de integridade é feita através da assinatura RSA do bloco da BIOS chamado TCPABIOS (mais informações abaixo) com a chave pública no formato modulus 3 também armazenada na BIOS.

Esse bloco TCPABIOS armazena os checksums de cada volume da BIOS.

 

O que faremos é gerar novos checkums para esses volumes que foram modificados, gerar um para de chaves RSA (privada e pública), assinar esse bloco com a chave privada e substituir a chave pública.

 

 

Ferramentas necessárias

 

- EFITool NE alpha 54: https://github.com/LongSoft/UEFITool/releases

- HxD 2.1.0: https://mh-nexus.de/en/hxd/

- OpenSSL: http://gnuwin32.sourceforge.net/packages/openssl.htm (Download -> Binaries)

- Microsoft File Checksum Integrity Verifier (FCIV.exe): https://www.microsoft.com/en-us/download/details.aspx?id=11533

 

Passo a passo

 

Vamos abrir a BIOS modificada, localizar o bloco TCPABIOS e entender sua anatomia.

 

1. Abra a BIOS no HxD

 

image.png.9bd20639628631149f820fde57e42233.png

(Vamos utilizar nesse guia a BIOS modificada no fórum MyDigitalLife.com pelo usuário Serg008 para o notebook Lenovo B590)

 

2. Busque a palavra TCPABIOS:

 

image.png.931aa98e383f2b3b9273b3956d6a0236.png

image.png.8cef4f91211ce1eafafcb7af51297583.png

 

3. O bloco começa com TCPABIOS e termina com antes de TCPACPUH

 

image.png.51262f4653917f3ed1ab1ee74d45006e.png

 

4. Anatomia:

 

54 43 50 41 42 49 4F 53 48 31 38 34 61 31 31 2F

32 36 2F 31 33 49 42 4D 53 45 43 55 52 00 FD 27

34 2A 35 AB 41 26 39 E3 32 E5 B6 8A D6 49 5B 0B

77 F9 82 58 48 00 00 00 CE 18 1F 00 00 00 03 00

00 00 00 00 00 00 27 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00 00 FF FF 83 04 D4

52 52 95 C5 D7 21 55 78 0E 5C AD 47 EE C4 3D 1D

C1 EC 69 03 2B 51 A5 42 61 96 22 F9 7B 88 57 B7

A8 9D D0 20 DB 5B 11 10 55 07 84 6C 62 DF FA 2F

6A A8 43 0C 8A 40 AF 79 0D 31 DB 5A 5D C8 2F EB

F8 7C 87 B0 A6 3D 2A 88 AE 91 9D 88 E3 AA 85 E3

5A B3 91 7F 28 68 1F BA 92 C4 7E 10 F5 1A 7E 75

A9 6F CE C0 4F BA FA 79 A5 98 2B 50 60 BA 09 73

7B 03 D1 0C 3E A2 9C 44 DF E9 F2 92 34 7B

 

Cinza: Nome e informações do bloco

Vermelho: Informações dos volumes (Checksum e Cabeçalho)

Azul: Separação da lista de volumes para a assinatura do bloco

Verde: Assinatura do bloco TCPABIOS são os últimos 128 bytes

 

Lista de Volumes:

 

Cada volume tem o formato: 00 FD 27 34 2A 35 AB 41 26 39 E3 32 E5 B6 8A D6 49 5B 0B 77 F9 82 58 48 00 00 00 CE 18 1F 00 00 00 03 00 00 00 00 00

                                                (prefixo 3 bytes + checksum 20 bytes + offset 4 bytes + tamanho do volume 6 bytes + separador do fim 6 bytes)

 

Os volumes são enumerados e utilizam o primeiro byte no prefixo para isso (00 FD 27), começando do 0.

A BIOS utilizada nesse exemplo possui somente um volume, mas no caso de mais de um volume, seria: 00 FD 27 .., 01 FD 27 ..., 02 FD 27 ...

- Checksum é o cálculo SHA1 do volume.

- Offset é a posição do volume dentro da BIOS. Os bytes ficam invertidos, nesse caso seria 00 00 00 48 ou seja: 48h

- Tamanho do volume também está com os bytes invertidos, então: 1F18CEh

 

Então é isso. Precisamos corrigir essas informações (checksum, offset e tamanho)

 

5. Para extrair os volumes abra a BIOS com o UEFITool e veja como identificar os volumes (nosso exemplo há somente um volume, se houvessem outros estariam também dentro de EfiFirmwareFileSystemGuid):

 

image.thumb.png.ccbcc129e633036cbcbcec60deae5771.png

 

Na BIOS original, circulado em vermelho podemos ver o nosso volume.

Observe que em azul temos Offset e verde o tamanho. Exatamente como verificamos acima no HxD. Já na BIOS modificada vemos que está diferente o tamanho:

Oridinal: 1F18CEh

Modificada: 1F12D5h (vamos precisar disso mais tarde)

 

6. Vamos extrair esse volume escolhendo a opção “Extract as is...”

 

image.png.4f6c6b44f33f610326329f01a22db1a8.pngimage.png.69537d20c3a7e5adc3194e404d65ce3c.png 

 

7. Utilize esse comando para obter o checkum desse volume: fciv.exe -sha1 File_Volume_image_FvMainCompact.ffs

 

image.png.cbc530b6859dad3b6b46d1bfbbc9e6d8.png

 

Agora temos o checksum que é 396e0dc987219b4369b1b9e010166302ce635202

 

8. Substitua as informações no bloco TCPABIOS:

 

image.png.fce7e2fe4f5b9861cfcfe8b0aece8459.png

 

Observe que o tamanho do volume precisa ter os bytes invertidos, então se o total são 6 bytes e é 1F12D5h, fica D5 12 1F 00 00 00 no lugar de CE 18 1F 00 00 00.

Se o offset for diferente, também realizar o mesmo procedimento invertendo os bytes.

Checksum alterar de 34 2A 35 AB 41 26 39 E3 32 E5 B6 8A D6 49 5B 0B 77 F9 82 58 para 39 6E 0D C9 87 21 9B 43 69 B1 B9 E0 10 16 63 02 CE 63 52 02

 

Faça esse procedimento para cada volume na BIOS.

 

9. Agora precisamos gerar o checksum de todo o bloco TCPABIOS mas sem considerar os últimos 131 bytes, ou seja desconsiderar de FF FF 83 + 80 bytes da assinatura anterior.

 

Copie para um novo arquivo no HxD e salve como tcpabios

 

image.png.fe2cb4ed07464785c8469c30b32541bf.png

 

Utilize o comando para gerar o checksum desse bloco: fciv.exe -sha1 tcpabios

 

image.png.5325dcc1c6b630c0ff1423adc4c723d4.png

 

Checksum do bloco TCPABIOS: 0da6715509839a376b0a52e81fdf9683a8e70e52

 

Crie um novo arquivo no HxD e adicione 108 bytes com 00 e cole o checksum no final e salve como tcpabios_sha, ficando assim:

 

image.png.3abfadf19cea0a41a461661fa7cb3fc7.png

 

10. Agora vamos gerar a chave privada RSA com modulus 3: openssl genrsa -3 -out my_key.pem 1024

 

image.png.1aa571bb1c48113d1630cfb1e676bbe5.png

 

Assinar o arquivo tcpabios_sha: openssl rsautl -inkey my_key.pem -sign -in tcpabios_hash -raw > tcpabios_sign

 

image.png.f6aa958f87b2a012aaa679c32cc44c12.png

 

Agora aproveite para gerar a chave publica: openssl rsa -in my_key.pem -outform der -pubout -out my_key_pub.der

 

image.png.0b46c643e8aa32dc899f20e080c7b982.png

 

E gerar modulus 3 da chave pública: openssl rsa -pubin -inform der -in my_key_pub.der -text -noout

 

image.png.de85889394db5266570e9f4e84420dc8.png

 

Copie e cole a chave em um arquivo de texto para utilizar daqui a pouco. Remova todos os “:” e coloque tudo em uma única linha, ficando assim:

 

image.png.e319dc1c7338214857a669eb52f44036.png

 

11.   Abra o arquivo tcpabios_sign no HxD, copie o conteúdo e substitua a assinatura no final do bloco TCPABIOS:

 

 image.png.b4d270f8674000ee94ea2d538f0d8ac0.pngimage.png.3e3bf21863474216a6464d9918f86013.png

 

12. Agora vamos localizar na BIOS o local da chave pública e substituir. Essa chave começa com 12 04 e termina com 01 03 FF e fica após o bloco TCPABBLK.

 

A chave fica assim: 12 04 + 81 bytes + 01 03 FF. Faça uma busca por 01 03 FF para localizar mais facilmente. Verifique se antes dos 81 bytes tem os bytes 12 04 para ter certeza que achou.

 

image.png.7c068048eb8c61f246a1a4a6ab5249a3.png

 

image.png.f5e676b7c1ddf88d85cd3f3428f3e60a.png

 

Agora substitua pela chave pública que ficou anotado no arquivo de texto anteriormente, ficando assim:

 

image.png.0c27ad6e4301b03208ca8cd57f77e44b.png

 

 

Salve e está pronto. Sua BIOS está assinada e pronta.

 

Edited by ludufre

Share this post


Link to post
Share on other sites
Advertisement

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

Announcements

  • Similar Content

    • By tluck
      Lenovo T460 macOS with Clover Guide
      Latest Release on GitHub (July 2020) Updated to Clover r5120 Updated Lilu based kexts - Lilu, ALC, WEG Added AirportBrcmFixup.kext
        Various Tweaks over Last months The main branch in my github repo is a complete Clover ESP (/EFI) bundle and kext pack for the Lenovo T460. The current file bundle seems to work on Sierra, HighSierra, Mojave and Catalina. There is an OpenCore branch in the repo as an alternative to Clover. This guide was developed for a Clover implementation. But the thread has evolved to include discussion of both Clover and Opencore for these systems: T460 and T470 family of ThinkPads.
       
      Full Clover file set - config.plist etc. Includes all custom kexts Includes custom DSDT/SSDT scripts and patches Utility scripts The zip bundles are posted to GitHub: https://github.com/tluck/Lenovo-T460-Clover/releases
      Caveat: The T460 systems used here was configured with: i5-6300U, Intel HD Graphics 520, 1920x1080 touch screen. If you have a different system model, then extract the ACPI files and use the included scripts to create a set of files consistent with your system type and BIOS version. See below for details.
      Credits: RehabMan, Shmilee, vusun123, TimeWalker, Mieze from which, much of their work and help is/was was used to get the T460 to this point.
      Devices and aspects working:
      Ethernet -  Intel I219LM is enabled via IntelMausiEthernext.kext WiFi/BT - substitute the Intel WiFi/BT with a compatible Broadcom or Atheros chip Audio - ALC293 codec implemented via AppleALC.kext (the old AppleHDA_ALC293 and CodecCommander kexts are not needed) PS2 - ClickPad + TrackPoint + all 3 buttons - using a modified VoodooPS2Controller to support new layouts - and added some custom Fn key maps based on 440/450 dsdt USB - implemented via custom SSDT + USBInjectAll kext. All USB3/USB2 ports are intel-based and work -  3 external USB and internal Camera, BT, etc  Sleep/Wake - the sleepwatcher package and custom sleep/wake scripts are used to help with sleep/wake for BT and PS2 devices. Note: have not tried to implement the SD card reader - no driver found.
      ACPI Files
      New Installation - Steps and Details
      Part 1 - OS Installation
      Part 2- Post OS Installation and Setup
      Notes on Custom Kexts
       
    • By pink101
      Hello everyone, i just want to ask something. why is it that my radeon hd 7770 graphic card was detected as "Latte" gpu instead of verde when using radeon_bios_decode? is the card actually a Latte graphic card but someone flashed it so they can sold to me as radeon hd 7770? or is it actually a real radeon hd 7770 but the tool falsely detected it as latte cpu?

    • By ltooz_audis
      This is the way I patched my DSDT and SSDTs to get perfect sleep/wake and USB ports on my Skylark i7-6600u HD520 HP EliteBook 820 G3.
       
       
      Cheers,
      Louis
    • By dzontra
      Hi guys,
       
      I'm having a  problem with BIOS. I hope someone can help me to fix it.
      I was able to boot to Wins or Catalina with no issues with OC. When I tried to go to BIOS i got a black screen with white cursor, nothing else (you can see it on the video). I can move cursor until i click right/left button, it freeze.
      After reboot i would boot to Wins/Catalina, no issue. My first guess was to reset CMOS by removing a battery. So i did it. And that was bad idea. After that i wasn't able to boot to any OS. I get that black screen because CMOS got reset. Probably there should be a screen with option to set time, date, etc, before you boot to OS. But, I dont see it. I tried to reset CMOS several times, removing the battery ot using a jumper. Nothing helped. I get the same result. I've noticed that resolution is much lower on my 27" screen (2K). Cursor can move to half of the screen, horizontally and vertically. So I started troubleshoot with other components.
      1. I tried every RAM stick on each slot, same result. RAM works on another PC.
      2. I tried to remove GPU and use iGPU (HDMI and DVI), same result.
      3. I tried DP, HDMI, VGA  with GPU, same result. (GPU works fine on another PC)
      4. I tried to unplug everything, USB 2, USB 3, SSD's, same result. 
       
      The only thing i haven't tried yet is another power supply, just because i dont have one to test it.
      Not sure what was the trigger because so far i was able to get to BIOS with no issue. The only thing that it comes to my mind is that a week ago I came across a software, Gigabyte EasyTune and I played with it. Ususallu, if I want to OC my CPU I do it from BIOS, never used any software. EasyTune did work and OC'ed my CPU and i rebooted my PC many times since then but i never tried to access BIOS until yesterday.
       
      I hope you someone can give some tips of how to fix it. Not sure if BIOS got corrupted because of the software or not.
       
      Tnx
      Video.mov
    • By JijiTheFox
      Hi All,
       
      I'm trying to install Catalina via Clover, however, it hangs on ACPI errors. I've managed to reduce this from 6 to 4, but there's still some outstanding. 
       
      I'm thinking this may require DSDT patching to get by, but on the below information, how to do I gauge what I need to locate, and change values to?

      I've been lucky with past machines, rarely required a DSDT edit. The EC patch for Catalina has been applied.

      Model - Lenovo A540
      CPU - Intel® Core® i5-4258U (2.9 GHz)
      Chipset - Haswell
      Boot - UEFI Clover
      GPU - Intel Iris / HD Graphics 5100
      Resolution - 1920 x 1080
      Storage -  1TB hard drive
      RAM - 8GB

×