ãã§ããã¯ã¹ã®éçºè ãVSSã眮ãæããããã«äœãæãã€ãããã«èå³ããããªããã«ãããžãããããç§ã¯ããªãã«ããã«èŠåããŸããèšäºã¯éåžžã«é·ãããšãå€æããŸããã
å 責äºé 3
æåã®2ã€ã®ã倱æãã®åŸãããã«äœãæžãã¹ãããããããããŸããããã ããäœè ã¯ãNVRAMããã¡ãŒã ãŠã§ã¢ãã·ã¹ãã ããã®ä»ãã¹ãŠã®æ©èœã®æ倱ã«å¯Ÿããäžåã®è²¬ä»»ããåã³è§£æŸãããŸãã èªåã®è²¬ä»»ã§æ å ±ã䜿çšããèªåã§è¡åãããã¹ãŠãããŸãããã§ãããã
å¶ç¶ãã®èšäºãå¶ç¶èŠã€ããŠãããã§äœãèµ·ãã£ãŠããã®ããæ確ã§ãªãå Žåãèè ãäœã説æããã«é ã§ããã€ãã®åœ¢åŒã«é£ã³èŸŒãçç±ãšã圌ãã©ã®ããã«åæ°ãæã£ãŠããã®ã- æåãš2çªç®ã®éšåãããªããåŸ ã£ãŠããŸãã æ®ãã¯ç§ã®ãã®ã§ãïŒ
ãã§ããã¯ã¹ãã©ãã·ã¥ããã
Ivy Bridgeäžã®å€ãDell Vostro 3360ã®ãã¡ãŒã ãŠã§ã¢ããã¡ã€ã³NVRAMããªã¥ãŒã ã®å 容ãæåã«éãããšããç§ã¯éåžžã«é©ããŸããã ããã«èŠã€ãããªããã®-æåã«ãIntelãã€ã¯ãã³ãŒãã®ã»ããå šäœãæååãå«ããããã¯ããã®ååã¯NoLongerUsedæååã®ã³ããŒãRSA眲åãå«ãæŒ ç¶ãšéŠŽæã¿ã®ãããããã¯ãçŽ5ã€ã®EVSAã¹ãã¬ãŒãžãã«ãŒãã³ã®äžçœ²å_FLASH_MAPã èŠããã«ãPhoenixã®ã¡ã³ããŒã¯ãNVRAMã«éåžžã«å€ãã®ãã®ããã³ãããããšãã§ãããããã«ãŒããªãã§ã¯ç解ã§ããŸããã§ããã 圌女ããå§ããŸãããã
ã«ãŒãã®ããããŒã¯16ãã€ãã§ã次ã®ããã«ãªããŸãã
struct PHOENIX_FLASH_MAP_HEADER { UINT8 Signature[10]; // _FLASH_MAP UINT16 NumEntries; // UINT32 : 32; // };
èŠåºãã®çŽåŸã«ãè¿œå ã®ã¢ã©ã€ã¡ã³ããªãã§ã次ã®ãããªã¬ã³ãŒããé£ãåã£ãŠããŸãã
struct PHOENIX_FLASH_MAP_ENTRY { EFI_GUID Guid; // GUID , , UINT16 DataType; // , - (0) (1) UINT16 EntryType; // , , UINT64 PhysicalAddress; // , UINT32 Size; // , UINT32 Offset; // , , , };
ã«ãŒãã®æ倧ãµã€ãºã¯ããã®äœçœ®ã«ãã£ãŠæ±ºãŸããŸãã ã¡ã€ã³NVRAMããªã¥ãŒã ã®æåŸãã0x1000ãã€ãã«é 眮ãããŠããŸããæ倧ã§ã¡ããã©113ãšã³ããªã§ãããååãªäœè£ããããŸãã
ã¹ã¯ãªãŒã³ã·ã§ããã§ã¯ããããã¯æ¬¡ã®ããã«ãªããŸãã
眲åãšã¬ã³ãŒãæ°ãå«ãããããŒãããã«è¡šç€ºãããçŽåŸã«GUIDããŒãã ããŒã¿ã¿ã€ã 0ïŒã€ãŸãããªã¥ãŒã ïŒã ã¬ã³ãŒãã¿ã€ã 6ã ç©çã¢ãã¬ã¹ 0xFF980000ã ããŒã¿ãµã€ãº 0x20000ã ãªãã»ãã 0ã®ã¬ã³ãŒããç¶ããŸãïŒãŸã ãªãã»ããããããŸãïŒ ãããèªäœã«é¢ããŠãæåã®ããªã¥ãŒã ã¯ã©ãã«ãã·ãããããŸãããããã§ãªãå Žåããã¡ã€ã«ãŸãã¯ã¹ããŒã¹ã¡ããªãã¯ã®ããããã§äœããéåžžã«ééã£ãŠããŸãã
ããŸããŸãªç»åã§èŠã€ããããšãã§ãããã¹ãŠã®GUIDå€ãåŒçšããŠããŒã¿åãšé¢é£ä»ããããšãã§ããŸããããããã¯UEFITool NEã® 1ã€ã®ã¹ã¯ãªãŒã³ã·ã§ããã§å®è¡ã§ããŸãã
GUIDã«å ããŠãããã€ãã®ãã¿ãã¬ã衚瀺ãããŸããRSAã®æŒ ç¶ãšéŠŽæã¿ã®ãããããã¯ã¯ã SLICããŒãã«ã®å ¬éããŒããã³ããŒã«ãŒã§ããããšãå€æããäœããã®çç±ã§è¡ã®ãããããã¯ã¯CMDBãšåŒã°ããŸããã ããããã¹ãŠã«æ»ããŸãããã«ãŒãã«ã€ããŠã¯ãã¹ãŠæ確ã§ãããªã¹ããããããããã¹ãŠã®ãããã¯ã®ãã©ãŒãããã解æããæ¹æ³ãåŠã¶ããšã¯æ®ã£ãŠãããPhoenix SCTã«åºã¥ãããã¡ãŒã ãŠã§ã¢ã®NVRAMæ§é ãå€å°ç解ããŠãããšä»®å®ã§ããŸãã è¡ããïŒ
Intelãã€ã¯ãã³ãŒã
ãªã¹ãã®æåã¯ããã€ã¯ãã³ãŒãä»ãã®ãããã¯ã§ãã æ®å¿µãªãããNVRAMã«AMDãã€ã¯ãã³ãŒããå«ãã€ã¡ãŒãžããªããããIntelã®ã¿ãæ€èšããŸãã ãã€ã¯ãã³ãŒãããããŒã«ã¯æ倧12ãã€ãã®ç©ºããã€ããå«ãŸããŠãããšããäºå®ã«ãé¢ããããæªãããªçœ²åãããããŸããããã®ãããNVRAMããªã¥ãŒã ã®ã³ã³ãã³ããããã®ãããªããŒã¿ãããã¯ãèŠã€ããããšã¯äŸç¶ãšããŠèª²é¡ã§ãã ããã»ããµãéçºããŸã-ãã€ã¯ãã³ãŒãã®çœ²åã«ã€ããŠèããŠãã ããïŒ ãããã«ãããIntelãã€ã¯ãã³ãŒãã®äž»èŠãªèŠåºãã¯ææžåãããŠãããç§ã®èšæ¶ã§ã¯ããŸã£ããå€ãã£ãŠããŸããã ããã«ãããŸãïŒ
struct INTEL_MICROCODE_HEADER { UINT32 Version; // (1) UINT32 Revision; // UINT32 Date; // UINT32 CpuSignature; // UINT32 Checksum; // , 0 UINT32 LoaderRevision; // , UINT32 CpuFlags; // UINT32 DataSize; // UINT32 TotalSize; // UINT8 Reserved[12]; // };
çè«çã«ã¯ããŸã æ¡åŒµããããŒããããŸãããããã«åæããããã®æãéèŠãªããšã¯ããã§ã«åãåã£ãåèšãµã€ãºã§ãã ããªã¥ãŒã ã®æåã®ãã€ã¯ãã³ãŒãã®ããããŒãèŠãŠã¿ãŸãããã
ããŒãžã§ã³ 1ã¯æå¹ã ãªããžã§ã³ã¯0x28ã ãªãªãŒã¹æ¥ã¯04.24.2012ã ããã»ããµãŒã¿ã€ãã¯0x206A7ã ãã§ãã¯ãµã ã¯0xF3E9935Dã ããŒããŒãªããžã§ã³ã¯1ã ããã»ããµãŒãã©ã°ã¯0x12ã ããŒã¿ãµã€ãºã¯0x23D0ã åèšãµã€ãºã¯0x2400ã§ãã
UEFITool NEã®åããã€ã¯ãã³ãŒãã§ã¯ããã€ã¯ãã³ãŒããæã€ãããã¯ã5ã€ãã£ãããšãããããŸãã
CMDB
ããããåç §ãã次ã®ãããã¯ã¯CMDBã§ãã ãã®ç®çã¯ç§ã«ã¯ããŸãæ確ã§ã¯ãªããããããè€æ°ã®ããŒãã«é©ãããã¡ãŒã ãŠã§ã¢ã®é©åãªæ§æãäžåºŠã«éžæããããSMBIOSããŒãã«ãäœæãããããããã«äœ¿çšãããŸããããçŸåšã¯äœ¿çšãããŠããŸããã ãã®ãããã¯ã«ã¯ããã®éçºè ãèããã麻è¬äžæ¯è ããšããåŒã¹ãªã圢åŒããããŸã-ããã¯å€§ããªè¬ã§ãã èªåã§èŠãŠãã ããïŒ
struct PHOENIX_CMDB_HEADER { UINT32 Signature; // CMDB UINT32 HeaderSize; // UINT32 TotalSize; // };
ã¿ã€ãã«ã¯ãŸã£ããå¥åŠã«èŠããŸããããå šäœã®ãµã€ãºã¯ãããŸããããŸãã解æäžã«ãããã¯ã®çµãããèŠã€ããããšãã§ããŸãã楜ãã¿ã¯ãããã«ã¹ã¯ãªãŒã³ã·ã§ããã«è¡šç€ºãããããã£ã³ã¯ã§å§ãŸããŸãã
CMDB 眲å ã ãµã€ãº 0x0Cã åèšãµã€ãº 0x23ã®ããããŒã®åŸã«ã3ãã€ãã®ãŒããã£ã³ã¯ããããŸãïŒ éå§ãã€ã 0x42ïŒãããTheAnswerãšåŒã³ãããšããèŠåŽã«ãŸã èŠããã§ããŸã ïŒãããããŒã®åŸã®æåã®è¡ã®ãªãã»ãã ïŒåžžã«0ã§ãïŒããã³è¡ã®ãããã¯ã®éå§ã®ãªãã»ãã ïŒããã¯åžžã«TotalSize-HeaderSizeã§ãïŒã åèš-3ã€ã®ãã£ãŒã«ãã®ãã¡3ã€ã¯ãŸã£ãã䜿çšãããŠããŸããããã®ãã£ã³ã¯ãå¿ èŠãªçç±ã¯æããã«ç解ã§ããŸããã ãã®ä»ã¯ãŒããã£ã³ã¯ã«åŸããŸãããããã¯ãã§ã«5ãã€ãã§æ§æãããŠããŸãã䜿ãæ £ããéå§ 0x42ã ããŒæååãªãã»ãã ãç解ã§ããªã2ãã€ããã£ãŒã«ã ãåžžã«0x205ããã³å€æååãªãã»ããã§ãã äž¡æ¹ã®è¡ã®é·ãã¯ã©ãã«ãä¿åãããŠããããæããã«èšç®ãããŠããŸããã è¡ã®ãããããã¯ã§ã¯ã BiosInfo ããããŒè¡ãåå¥ã«æ ŒçŽããããŒããã£ã³ã¯ãåç §ããä»ã®ãã£ã³ã¯ãåç §ããæ®ãã®ãã¹ãŠã®è¡ãåç §ããŸãã åèšãããã¯ãµã€ãºã¯åžžã«0x100ã§ãããããã©ãã«ãä¿åãããŸããã ç§ã¯ãããçºæãã人ãå«ç ãããã®ãå°ãããã§ããïŒ
ãªããªã ãã®æ§é ã¯é·ãé䜿çšãããŠããããåæã«ç®ã§ããã«å解ããããããUEFITool NEã§ã®åæã®ãµããŒããè¿œå ãå§ããŸããã§ããã æ¥ã«å¿ èŠã«ãªã£ãå Žåã¯ãã³ã¡ã³ãæ¬ãŸãã¯ããã«æžããŠãã ããã
SLICããããŒãšããŒã«ãŒ
CMDBã®çŽåŸã«ãWindows Vista / 7/2008ã®OEMã¢ã¯ãã£ããŒã·ã§ã³ã«å¿ èŠãªPubkeyããã³Markerãããã¯ãç¶ãããããã¯ç¹å¥ãªãã©ã€ããŒã«ãã£ãŠSLIC ACPIããŒãã«ã«è»¢éãããŸãã ãã®èšäºã®DMCAãã€ã¯ããŠã³ãé²ãããã«ãããã®ãããã¯ã®åœ¢åŒã«ã€ããŠã¯èª¬æããŸããããé·ãééã¢ã»ã³ãã«ãããŠããããã¹ãŠã®ãã£ãŒã«ãã®èª¬æã¯RW EverythingãŠãŒãã£ãªãã£ã«ãã£ãŠè¡šç€ºãããUEFITool NEã¯ãããããµããŒãããŠããŸãã®ã§ããããã®ãããã¯ã®åœ¢åŒãå¿ èŠãªå Žåã¯ãèŠãŠãã ããnvram.h㧠ã
EVSA
ãããã®æåŸã®ãã©ãŒãããã ïŒ æåŸã«ïŒ ïŒNVRAMå€æ°ãä¿åããããã«äœ¿çšãããŸãã VSSãšæ¯èŒããŠããã®åœ¢åŒã¯å€æ°åãšãã®GUIDã®éè€æé€ã«ããNVRAMã®ã¹ããŒã¹ãããå°ãå¹ççã«äœ¿çšããŸãããEVSAã¹ãã¬ãŒãžãå°ç¡ãã«ããæ¹ãã¯ããã«ç°¡åã§ãããNVRAMããããŒã¿ãå埩ããç§ã®ã±ãŒã¹ã®ã»ãšãã©ã¯ã倧èŠæš¡ãªäœ¿çšã«ãããããããã®ãã§ãã¯ãµã 圢åŒã ããŒã¿ïŒãªããžããªèªäœã®ããããŒãå«ãïŒã¯ã次ã®ããã«å ±éããããŒãšç°ãªãè¿œå ãã£ãŒã«ããæã€ã¬ã³ãŒãã®åœ¢åŒã§ä¿åãããŸãã
struct EVSA_ENTRY_HEADER { UINT8 Type; // UINT8 Checksum; // UINT16 Size; // , }; struct EVSA_STORE_ENTRY { EVSA_ENTRY_HEADER Header; // UINT32 Signature; // EVSA UINT32 Attributes; // UINT32 StoreSize; // UINT32 : 32; // }; struct EVSA_GUID_ENTRY { EVSA_ENTRY_HEADER Header; // UINT16 GuidId; // GUID // EFI_GUID Guid // GUID , };
ã¹ã¯ãªãŒã³ã·ã§ããïŒ
ããã«ã¯ã ã¿ã€ã 0xECïŒãã¹ãã¬ãŒãžããããŒãïŒã®ã¹ãã¬ãŒãžããããŒãã·ã³ã°ã«ãã€ããã§ãã¯ãµã 0x2Cãæ£ããEVSA 眲åä»ãã®ãµã€ãº 0x14ã å±æ§ 0x01ïŒãããã©ã«ãå€ã¯ããã«ãããŸããïŒããã³ã¹ãã¬ãŒãžãµã€ãº 0x2B65ããããŸãã ããããŒã®çŽåŸã«ãäœçœ®åãããªãã§ã ãµã€ãº 0x16ã èå¥å 0ããã³1ã GUID 4FEE3D67-18F4-4217-BA7B-BC538148382Aããã³1E1F1797-2CCEã®ãã§ãã¯ãµã ããããã0x35ããã³0xB3ã®ã¿ã€ã 0xEDïŒãGUIDãïŒã®2ã€ã®ãšã³ããªããããŸãã -49D6-A6CE-4012F338A76E
UEFITool NEã§ã¯ãåããªããžããªã¯æ¬¡ã®ããã«ãªããŸãã
äžèšã®ã¿ã€ã0xECïŒãã¹ãã¬ãŒãžãïŒããã³0xECïŒ0xE1ããGUIDãïŒã«å ããŠãããã«3ã€ãããŸã-0xEEïŒ0xE2ããå€æ°åãïŒã0xEFïŒ0xE3ããããŒã¿ãïŒãããã³0x83 ïŒãåé€ãããããŒã¿ãïŒã ç§ãç解ããŠããããã«ããGUIDãããå€æ°åããªã©ã®ãšã³ããªãåé€ã§ããã®ã¯ããã©ã€ããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãå®è¡ããŠãªããžããªãå®å šã«åæ§ç¯ããå Žåã®ã¿ã§ãã
ã¿ã€ãããå€æ°åãã®ãšã³ããªã¯æ¬¡ã®ããã«ãªããŸãã
struct EVSA_NAME_ENTRY { EVSA_ENTRY_HEADER Header; // UINT16 VarId; // //CHAR16 Name[]; // UCS2 };
åçïŒ
ãã§ãã¯ãµã ã 0x39ã é·ãã 0x20ã èå¥åã 0ã®ã¿ã€ã 0xEEã®ã¬ã³ãŒããUCS2ã®DellVariable æååãå«ãŸããŸãã UEFITool NEã«è¡šç€ºããæå³ã¯ãããŸããããã®ããããã¹ãŠãæ確ã§ãã
ã¬ã³ãŒãã®æåŸã®ã¿ã€ãã§ããããŒã¿ãèæ ®ããå¿ èŠããããŸãã å®éã次ã®ãããª2ã€ã®åœ¢åŒããããŸãã
struct EVSA_DATA_ENTRY { EVSA_ENTRY_HEADER Header; // UINT16 GuidId; // GUID UINT16 VarId; // UINT32 Attributes; // // UINT8 Data[]; // } EVSA_DATA_ENTRY; struct EVSA_DATA_ENTRY_EXTENDED { EVSA_ENTRY_HEADER Header; // UINT16 GuidId; // GUID UINT16 VarId; // UINT32 Attributes; // , 0x10000000 UINT32 DataSize; // , , // UINT8 Data[]; // };
ã¹ã¯ãªãŒã³ã·ã§ããã§ã¯æåã®ãã®ã®ã¿ã衚瀺ããŸãã2çªç®ã®ãã®ã¯éåžžã«ãŸãã§ãããè¿œå ã®ãã£ãŒã«ãã1ã€ã ãããããã§ãã
ããã«ã¯ã ã¿ã€ã 0xEFã®2ã€ã®ã¬ã³ãŒãããããæåã®ã¬ã³ãŒãã«ã¯ 0x84ã ãµã€ãº 0x5Fã GUID 0ã ååèå¥å 0ããã³å±æ§ 0x03ïŒ NV + BS ïŒã®ãã§ãã¯ãµã ãããã2çªç®ã«ã¯ãããã0xEAã0x11ã1ã1ãããã³0x03ããããŸãã æåã®äŸã§ã¯ãGUID 4FEE3D67-18F4-4217-BA7B-BC538148382Aã®äžèšã®DellVariableå€æ°ã®ããŒã¿ãæ£ç¢ºã«ä¿åãããŠããããšãããããŸããã
UEFITool NEã®å ŽåïŒ
ãããã«
ããŠãPhoenix SCTã³ãŒãããŒã¹ãã¡ãŒã ãŠã§ã¢ãNVRAMããªã¥ãŒã ã«ä¿åã§ããããŒã¿åœ¢åŒãå°ãæ確ã«ãªããŸããã AMI Aptioã§äœ¿çšãããŠããNVAR圢åŒã«ã€ããŠã¯ããã®èšäºã®æ¬¡ã®æåŸã®éšåã§èª¬æããŸãã
ãæž èŽããããšãããããŸãããéç¥ãããäŒç¥šãL / Cã«éä¿¡ããå°ãªããšãäœããã®åœ¢ã§æåã§NVRAMã埩å ããªãããã«ã©ã³ãã ã«ä¿åããŠãã ããã