Advertisement
vanhoivo

Untitled

Aug 14th, 2015
367
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.47 KB | None | 0 0
  1. $priPath = "$env:windir\SystemResources\Windows.UI.Logon\Windows.UI.Logon.pri"
  2. $outputPath = ".\Windows.UI.Logon_new.pri"
  3. $replacementPath = ".\IMGP0001.JPG"
  4.  
  5. $inputStream = [System.IO.File]::OpenRead($priPath)
  6. $outputStream = [System.IO.File]::Create($outputPath)
  7. $replacementStream = [System.IO.File]::OpenRead($replacementPath)
  8.  
  9. $inputReader = New-Object System.IO.BinaryReader -ArgumentList $inputStream
  10. $outputWriter = New-Object System.IO.BinaryWriter -ArgumentList $outputStream
  11.  
  12. $inputStream.CopyTo($outputStream)
  13.  
  14. $replacementLengthAligned = ([Math]::Ceiling($replacementStream.Length / 8) * 8)
  15.  
  16. # header
  17. $inputStream.Seek(0x14, "Begin") | Out-Null
  18. $headerLength = $inputReader.ReadUInt32()
  19. $inputStream.Seek(0xB8, "Begin") | Out-Null
  20. $dataitemOffset = $inputReader.ReadUInt32()
  21. $origDataitemLength = $inputReader.ReadUInt32()
  22. $dataitemLength = $origDataitemLength + $replacementLengthAligned
  23. $outputStream.Seek(0xBC, "Begin") | Out-Null
  24. $outputWriter.Write([int]$dataitemLength)
  25.  
  26. # dataitem
  27. $outputStream.Seek($headerLength + $dataitemOffset + 0x18, "Begin") | Out-Null
  28. $outputWriter.Write([int]$dataitemLength)
  29. $inputStream.Seek($headerLength + $dataitemOffset + 0x24, "Begin") | Out-Null
  30. $stringCount = $inputReader.ReadUInt16()
  31. $blobCount = $inputReader.ReadUInt16()
  32. $origDataLength = $inputReader.ReadUInt32()
  33. $outputStream.Seek(0xC, "Current") | Out-Null
  34. $outputWriter.Write([int]($origDataLength + $replacementLengthAligned))
  35. $outputStream.Seek($stringCount * 4, "Current") | Out-Null
  36. for ($i = 0; $i -lt 10; $i++)
  37. {
  38.     $outputWriter.Write($origDataLength)
  39.     $outputWriter.Write([int]$replacementStream.Length)
  40. }
  41. $outputStream.Seek(($blobCount - 10) * 8, "Current") | Out-Null
  42.  
  43. # data
  44. $outputStream.Seek($origDataLength, "Current") | Out-Null
  45. if ($outputStream.Length - $outputStream.Position -ne 0x18)
  46. {
  47.     Write-Error "Not compatible with this PRI file."
  48. }
  49. $replacementStream.CopyTo($outputStream)
  50.  
  51. # footer
  52. $outputStream.Seek($replacementLengthAligned - $replacementStream.Length, "Current") | Out-Null
  53. $outputWriter.Write(0xDEF5FADE)
  54. $outputWriter.Write([int]$dataitemLength)
  55. $outputWriter.Write(0xDEFFFADE)
  56. $outputWriter.Write(0x00000000)
  57. $outputWriter.Write([char[]]"mrm_pri2")
  58.  
  59. $outputStream.Seek(0xC, "Begin") | Out-Null
  60. $outputWriter.Write([int]$outputStream.Length)
  61. $outputStream.Seek(-0xC, "End") | Out-Null
  62. $outputWriter.Write([int]$outputStream.Length)
  63.  
  64. $inputReader.Close()
  65. $outputWriter.Close()
  66. $replacementStream.Close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement