Thứ Ba, 28 tháng 6, 2016

How to change boot animation in Windows 7 part 1


joakim

What I describe here is how to manually change the boot animation, the four lighting balls that turn into the Windows flag. I will also explain in detail how to modify nearly everything until after animation is finished playing.

Before we start I can say that it is also possible to switch to a static boot image by patching the kernel. Just do the same thing you did on nt 5.x. Replace the first bitmap in the kernels resources.

To change the animation there are several things to remember. Unless you want to patch bootmgr and winload.exe, you must configure TESTSIGNING on in the BCD. It is possible to do this without TESTSIGNING, but we will get to the details later on. And the hacks work equally fine on x86 as on x64!

Unless you want to read about the details, you can go straight to user thaimins's (Jeff) excellent application that will do it all for you and supporting both 32 and 64-bit; http://www.coderforlife.com/projects/win7boot/ and here's also a link to a good collection of animations on a german forum; http://www.deskmodder.de/phpBB3/view...?f=220&t=13363

1. Now the animated bitmap, activity.bmp, is loacted inside a wim in bootres.dll. We will first need to extract the wim, so we open the dll in resource hacker and export the resource named RCData. The wim can then be mounted with lots of tools, like 7zip and gimagex. Inside there is activity.bmp found. I will not make this a tutorial about animation, so for the sake easyness we just open the file in paint.exe and see that there are a numerous bmp's stacked over each other;

I know nothing about animations so I just modify the bitmaps like a retard would do.

2. When the animation work is done, we must pack the bmp into a wim again. Preferrably use gimagex and fill out information anf boxes like in this image;

Notice the name, the compression (max) and the boot flag. You better create a new wim instead of reusing the old one. That way the size is much smaller.

3. Now we must replace the resource named RCData inside bootres.dll with the wim we just created. Use resource hacker like this;

4. Now we need to clean the pe header for the (old) pointer to the previous Certificate Table that we now have removed/invalidated. Fire up bootres.dll in a hex editor and fill 8 bytes of 00's at offset 0x150 (representing the offset and size respectively for the Certificate Table. Actually this can vary so better check 0x3c for the location PE header and then move another 0x98 from the PE header location, and you will land on the right place. Like this;

Or you may grab a PE-editor to do the work for you.

5. Update the checksum of bootres.dll as found in the PE header. (I have made a custom one myself but cannot find it..). Therefore use the PE-editor or any similar tool to correct the checksum.

6. Now we can sign the file with a test certificate. It is important to erase any previous pointers to the table, as descibed in point 4, otherwise you likely will not be able to sign the file.

After successful signing, the properties will hopefully look like this;

Do not bother with the timestamping. It will not make any difference really.

7. This step is only necessary if you are going the testsigning route. Add it with a command like this (adjust the path and guid);

Code:
bcdedit /store v:\boot\bcd /set GUID testsigning on
8. Works on both 32-bit and 64-bit! Good luck.

This is how one of my tests went;


And for historical purposes I will keep as evidence my first (and by far the lamest ever) modded animation;


Some more technical details:

Removing watermark when TESTSIGNING is configured.
Regarding the "Test Mode" watermark in lower right corner, it can be removed by zero out string id no 738 in user32.dll.mui, update checksum, and rebuild mui cache.
http://deepxw.blogspot.com/2008/12/r...-20081210.html

BOOTMGR
Is composed of a 16-bit stub and a 32-bit executable (bootmgr.exe). Inside the 32-bit executable the ere is an xsl resource with lots of stuff that can be tweaked. After Vista the 32-bit part was compressed, which means you must decompress it before you can analyze the pe file. This way more code can fit into 512 Kb. Thaimin made this great tool, bmzip that will compress/recompress bootmgr; http://www.coderforlife.com/projects.../extras/#bmzip. It is also possible to boot with uncompressed bootmgr.exe (pre Vista). For that to happen you must grab bootmgr.exe and delete some of the unneeded stuff in the xsl resource (like network/multicast and certain error messages), as well as the embedded digital certificate. Then attach the 16-bit stub from Vista SP0 that could handle uncompressed bootmgr.exe.


Without TESTSIGNING
This is divided in 2 parts. There are many ways to achieve this, but I mention only what is strictly necessary.

The first is about bootmgr only. At VA 421EC5 change 7416 to 9090. That will deactivate the signature validation inside bootmgr. If you don't do this then you must set TESTSIGNING on for {bootmgr}. Optionally you can deactivate the checksum as well. If so then change EB08 to 7403 at 0x105E in the stub. If not then NOINTEGRITYCHECKS must set on for {bootmgr}. But if checksum is corrcted in bootmgr.exe after modification then this last step is not required.

The second is about winload.exe and handles all other files after bootmgr during the boot. It is basically the same hack as for bootmgr. At VA 429612 change 7416 to 9090. Now winload.exe and all files loaded later, doesn't have to be signed by a test certificate. Just make sure you just have some dummy values for the Certificate Table in the Data Directories.

If you want to completely deactivate all checksums, so that you can boot with bad checksum in all files after bootmgr, we must patch winload.exe in 3 places;

Code:
at VA 428DC5 change 7418 to EB18 at VA 428DE3 change 0F8400010000 to 909090909090 at VA 428DF6 change 0F871CFDFFFF to 909090909090
Translate from va to raw offset;
Code:
va 429612 = raw offset 28a12 va 428dc5 = raw offset 281c5 va 428de3 = raw offset 281e3 va 428df6 = raw offset 281f6
Alternative TESTSIGNING method
Yet another way to solve the TESTSIGNING issue. We boot by configuring TESTSIGNING on in bcd. Now the intersting part is that we can patch the kernel so that when code integrity (ci.dll) is initialized, it will continue booting like as if TESTSIGNING was not set in the bcd. I've verified this because the watermark was not put on the desktop, at the same time as TESTSIGNING was shown in the registry under the key SystemStartOptions. I really don't recommend messing with the kernel, so you might want to stick with the other working solutions already posted. For those that like testing this, here is the patch located in the function SepInitializeCodeIntegrity. Change both conditional jumps to a jump short instruction (jmps);
Code:
PAGE:00572D42                 call    _SepIsOptionPresent@8 ; SepIsOptionPresent(x,x) PAGE:00572D47                 test    eax, eax PAGE:00572D49                 jz      short loc_572D4D Change 7402 -> eb02.
Code:
PAGE:00572D5A                 call    _SepIsOptionPresent@8 ; SepIsOptionPresent(x,x) PAGE:00572D5F                 test    eax, eax PAGE:00572D61                 mov     eax, ds:_KeLoaderBlock PAGE:00572D66                 jz      short loc_572D6B Change 7403 -> eb03.
This way the kernel will always continue booting the system without testsigning, regardless of what you put in the bcd. The nice thing is you can have testsigning for the first part of the boot process, and choose to finalize the booting without testsigning. When testing kernels it could be a good thing to specify your custom kernel in the bcd with the kernel parameter (like "KERNEL mykernel.exe").
Now TESTSIGNING gets deactivated after the animation is played.

Modifying the text shown when animation is played can be done by hacking winload.exe:
1. To change the text "Starting Windows" you can open a resource editor and edit the "Message Table". Go for the last string.
2. To change the text "� Microsoft Corporation" at the bottom, you can search and replace the hex signature;
0000000000A90020004D006900630072006F0073006F0066007400200043006F00720070006F0072006100740069006F006E 000000

I found that the easiest way to remove both the copyright message and startup text is to set font size to 0. Replace the "B" with "0", and you will only have the animation present in the centre of the screen;

Code:
00443852  C745E40B000000   mov    dword ptr [ebp-1Ch],0000000Bh
Placing the startup text at the very top of page can be done by replacing 20B with 000;

Code:
004437FE  C745F40B020000   mov    dword ptr [ebp-0Ch],0000020Bh
Changing the font size of the startup text is done here;

Code:
004439A6  C7432412000000   mov    dword ptr [ebx+24h],00000012h
Changing "12" with "86" will create a huge text that will cover over the copyright message like this;


To change colour for copyright text look here;
Code:
0044384B  C745DC7F7F7FFF   mov    dword ptr [ebp-24h],FF7F7F7Fh
and replace 7F7F7FFF with FF00FF00 to get purple coloured text.

And to change the startup text colour we must inject some of our own code. This is what I did to create light green coloured startup text:

old code
Code:
offset          machine code    assembler .text:0044399C  832100          and     dword ptr [ecx], 0 .text:0044399F  834B1CFF        or      dword ptr [ebx+1Ch], 0FFFFFFFFh
new code
Code:
offset          machine code    assembler .text:0044399C  E85F380200      call    sub_467200 .text:004439A1  90              nop .text:004439A2  90              nop
old code
Code:
offset           machine code     assembler .rdata:00467200  00               db    0 .rdata:00467201  00               db    0 .rdata:00467202  00               db    0 .rdata:00467203  00               db    0 .rdata:00467204  00               db    0 .rdata:00467205  00               db    0 .rdata:00467206  00               db    0 .rdata:00467207  00               db    0 .rdata:00467208  00               db    0 .rdata:00467209  00               db    0 .rdata:0046720A  00               db    0 .rdata:0046720B  00               db    0 .rdata:0046720C  00               db    0
new code
Code:
offset           machine code         assembler .rdata:00467200  832100               and     dword ptr [ecx], 0 .rdata:00467203  C7431C00FF00FF       mov     dword ptr [ebx+1Ch], 0FF00FF00h .rdata:0046720A  C20400               retn    4
So the actual color code are stored at va 00467206 or raw offset 0x64A06.

Animation parameters:
Some animation parameters can also be tweaked (thanks to AlexYM). As the actual animation is played by the kernel we must patch it to modify these values.
The relevant function is ResFwpGetProgressIndicatorAnimation and this how it looks like in IDA for ntkrnlpa.exe;
Code:
PAGEBGFX:00748C97                 mov     eax, 0C8h PAGEBGFX:00748C9C                 lea     edi, [esi+0Ch] PAGEBGFX:00748C9F                 mov     dword ptr [esi], 1 PAGEBGFX:00748CA5                 mov     dword ptr [esi+4], 19Ch PAGEBGFX:00748CAC                 mov     dword ptr [esi+8], 11Ch PAGEBGFX:00748CB3                 mov     [esi+10h], eax PAGEBGFX:00748CB6                 mov     [edi], eax PAGEBGFX:00748CB8                 mov     dword ptr [esi+18h], 0Fh PAGEBGFX:00748CBF                 mov     dword ptr [esi+1Ch], 69h PAGEBGFX:00748CC6                 mov     dword ptr [esi+24h], 3Ch
Explanation after converting from hex to decimal:
Code:
At 00748C97 we find the frame's width and height as C8 = 200. At 00748CA5 we find the x position of the frame as 19C = 412. At 00748CAC we find the y position of the frame as 11C = 284. At 00748CB8 we find the framerate (per sec) as 0F = 15. At 00748CBF we find the total number of frames as 69 = 105. At 00748CC6 we find the number of first unlooping frames as 3C = 60
So I made another stupid animation hack that is more annoying than elegant. Setting framerate to 78 (4e) and the number of first looping frames to 57 (39) will let you see the crystal balls start flying and when they are done (before they melt together) it will start over again. Really annoying to look at, especially when this repeates itself 19 times!

Modifying the coordinates of the animation can be testing while debugging in windbg with this script;
Code:
$$ $$ ================================================================== $$ Script to move animation to different coordinates $$ Made for version 6.1.7600.16385 $$ Will also work for SP1 when symbols are available. $$ $$ usage from within a running debug session; $$><kernel.txt $$ usage from commandline when launching windbg; -c "$$><kernel.txt" $$ $$ by Joakim $$ $$ ================================================================== $$ bp nt!ResFwpGetProgressIndicatorAnimation+0x2D g $$ Original machinecode c746049c010000 $$ 9c01 is little endian of 19ch which in decimal is 412 and  $$ specifies the x position (from left) eb eip c7 46 04 50 00 00 00 p $$ Original machinecode c746081c010000 $$ 1c01 is little endian of 11ch which in decimal is 284 and  $$ specifies the y position (from top) eb eip c7 46 08 50 00 00 00 g $$ ================================================================== $$ Animation now played in the upper left of your screen. $$ ==================================================================
More kernel stuff: Distorted resoltion hack
I have done some tests and believe it is impossible to set screen resolution correctly to 800x600 and get animation at the same time. However I noticed it is possible to boot with 1024x768 and then force the kernel into believing the resolution is something different (must be smaller though, else it will crash) right before it will play the animation. With forced 800x600 it will look like flimmering stretched over the screen like this;


With 768x512 it looks like this;



To test this in windbg you can issue this command;
Code:
bp nt!BgpGetResolution "eb nt!BgInternal+0x8 00 03 00 00 00 02 00 00 00 03 00 00"
That is for 768x512 since 300h in decimal = 768 and 200h in decimal = 512. So the animation is played, but with a very distorted look. And sure funny for testing in virtual machines.
Patching the kernel (ntoskrnl.exe) on disk in a similar way translates into;
Code:
0073D61E  00030000                        dd 00000300h 0073D622  90                              nop 90h 0073D623  8B0D1ED67300                    mov ecx,[L0073D61E] 0073D629  8908                            mov [eax],ecx 0073D62B  8B0D3ED67300                    mov ecx,[L0073D63E] 0073D631  894804                          mov [eax+04h],ecx 0073D634  8B0D1ED67300                    mov ecx,[L0073D61E] 0073D63A  894808                          mov [eax+08h],ecx 0073D63D  C3                              retn 0073D63E  00020000                        dd 00000200h
About BOOTMGR.XSL/OSLOADER.XSL
These are found inside bootmgr and winload.exe, and will influence on how things are displayed on screen when booting with different setups. It is basically a bunch of different frames, like for instance the menu presented when the BCD content is displayed. Thaimin explained the colour codes quite well;
Code:
RGBI 15 White RGXI 14 Yellow RXBI 13 Magenta RXXI 12 Red XGBI 11 Cyan XGXI 10 Green XXBI 9 Blue XXXI 8 Dark Grey RGBX 7 Light Grey RGXX 6 Brown RXBX 5 Dark Magenta RXXX 4 Dark Red XGBX 3 Dark Cyan XGXX 2 Dark Green XXBX 1 Dark Blue XXXX 0 Black
This is the last page shown by bootmgr (after the boot menu), right before winload.exe takes over;
Code:
<xsl:template match="bootmgr-end-menu"> <osxml:text-mode-ui>   <body background-color="RGBX" foreground-color="XXXX">   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <p pad-left="25">FYI This is next page after boot menu (bootmgr)</p>   <br/>   <br/>   <p pad-left="22">You can put some text here if you want..</p>   </body> </osxml:text-mode-ui>
The first page shown by winload.exe is;
Code:
<xsl:template match="osload-main"> <osxml:text-mode-ui> </osxml:text-mode-ui> </xsl:template>
You can tweak background and text like this (just another lame example);
Code:
<xsl:template match="osload-main"> <osxml:text-mode-ui>   <body background-color="RGBI" foreground-color="XXXX">   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <p pad-left="25">FYI This is the first page by winload.exe</p>   <br/>   <br/>   <p pad-left="22">You can put some text here if you want..</p>   </body> </osxml:text-mode-ui> </xsl:template>
The actual page shown when the animation is played is this;
Code:
<xsl:template match="osload-graphics"> <osxml:text-mode-ui>   <body foreground-color="XXXX" background-color="RGBX">   <br/>   <p pad-left="25">This is the animation page</p>   <textarea width="29" height="24"/><textarea name="status"/>   </body> </osxml:text-mode-ui> </xsl:template>
You can thus modify nearly everything in these frames.

Lately full image background has been solved (by thaimin) in winload.exe. A bitmap is added as rcdata 1 resource, and a new function was written to handle it. Proof;



Link to the documentation created by thaimin; http://www.coderforlife.com/projects...mage-notes.zip

Adding driver printing on top of bitmap
This last hack is currently not implemented in thaimins app. By following the next instructions you should be able to achieve something like this;

What we do is modify winload.exe's handling of the SOS switch. We can modify the code slightly inside OslDisplayInitialize (this is necessary), by changing this
Code:
.text:004061A6                 push    26000091h (68 91 00 00 26)
to something invalid like
Code:
.text:004061A6                 push    99999999h (68 99 99 99 99)
and basically deactivate the standard graphics handling if SOS switch is on. Specifically, it is the loaderblock passed on to the kernel that informs the kernel that SOS is not on, and thus allows for the animation to be played.
We need to make a jump to some custom code at 4014e0. This is inside OslpMain and necessary for the bitmap to replace the background xsl template. Original code;
Code:
.text:004014E0                 lea     eax, [ebp+arg_0]  (8D 45 08) .text:004014E3                 push    eax               (50) .text:004014E4                 push    ebx               (53)
changed to;
Code:
.text:004014E0                 jmp     loc_4573B7 (E9 D2 5E 05 00)
and the custom code was placed right behind thaimins bitmapdrawing function;
Code:
.text:004573B7                 call    sub_457370   (new bitmap function) .text:004573BC                 call    sub_443823   (copyright) .text:004573C1                 lea     eax, [ebp+arg_0] .text:004573C4                 push    eax .text:004573C5                 push    ebx .text:004573C6                 jmp     loc_4014E5  (back to OslpMain to load SYSTEM hive)
Now and instead of having the whole screen covered with driver printings, we must reduce the size of the template that is displayed too. Here's my minimal "osload-sos" template;
Code:
<xsl:template match="osload-sos"> <osxml:text-mode-ui> <body background-color="RXBI" foreground-color="XXXX"> <p pad-left="8" pad-right="8"> <textarea name="file-info" scroll="true" width="68" height="1"/> </p> </body> </osxml:text-mode-ui> </xsl:template>
As you may see, it's the height that will specify the number of lines displayed of driver printing.


Joakim Schicht

Note:
All disassemblies are based on x86 version 6.1.7600.16385. There's almost no difference in 32-bit vs 64-bit binaries. Some parts may change in future versions, but should not be too hard to figure out.

Link to thaimin's excellent tool that will do it all for you; http://www.coderforlife.com/projects/win7boot/ And supporting both x86/x64 architectures! Some bugs are currently in the tool but I believe he will create a major update, hopefully in December.



thaimin

AWESOME! Thanks so much. I am glad that this has been figured out and that any assistance I provided may have helped. The trick with cleaning up the old table is nice! I was just signing over it (it allowed me, but stuff still wasn't working).

Thanks!

Oh, and also a PE Checksum updater is available from: Coder for Life - Projects - Win 7 Customizer Tools

Source code available.

joakim

Quote�� Quote: Originally Posted by thaimin View Post
AWESOME! Thanks so much. I am glad that this has been figured out and that any assistance I provided may have helped. The trick with cleaning up the old table is nice! I was just signing over it (it allowed me, but stuff still wasn't working).
I had a hard time myself trying to re-sign the file, until I figured out the small trick. And I was about starting to bang my head against the wall in frustration..

Joakim

marcusj0015

i wonder if i actually helped?

i hope so

will they fix this by SP1?

T_T

marcusj0015

all of this hex editor stuff is really confusing about jumping to certain offsets

ive used hex editors before and i know my way around

i olny added 2 bytes to the original activity.bmp

do you know a good X64 pe editor to automatically do all this?


OFF TOPIC

mods, you should STICKY this!

WaxyChicken

So if you had some animators then you could release some
alternative bootres.dll's?

i got stuck on the signing when i was trying my hand at
cracking the Bootres and had to rein-install my Win7 -
but animation i can do!!

Also - do you need to BCD if you have a 32 bit win7?

joakim

@taimin
It would still be nice if you wanted to publish the tool you talked about earler on, the automatic signer.

@marcusj0015
The way I described is the hard way, the way you must do if you do not have a great pe-editor. If you have for example PE Explorer, which is one of the best, you will definetely have the features included, and there is no need to use a hex editor. I have never used a x64 based pe editor, so I don't know.

@WaxyChicken
I will not distribute a ready made bootres.dll. Re-installing sounds a little bit overkill.. Try it out in virtual machine first - always! The bcd store must also be adjusted on x86 architecture, otherwise a major security bug is present.

@all
Adding an animation to bootres.dll will likely slow down the boot process, so I would actually advise against it. The stupid animation in the first post must not be implemented on any machine that a person who is sensitive to epileptic seizures are operating..

Joakim

marcusj0015

LOL Jaokim

will suffer epelicyec siezures

LMAO

marcusj0015

ok this is annoying me you didnt start the project all you did was talk alot in the other thread and you come over here and act like you were the person that figured all of this shit out.then you shit on all the people that had hope for this to be even partitally understandable theres not even x64 support! how about we all just pull this thread until we have a program that can actually handle all of thisfrom one program WITH AN INTERFACE!!!!!seriously this isnt even half baked and your releasing iti say we pull it and write a program to handle all of the aspects of bootres modding

Dalek

i removed start up video,cuz it makes boot up slower...

joakim

I am sorry if I mislead any of you in believing this is a really easy mod. It is not! At least if you don't have a good basic knowledge of pe structure, commandline programs and booting in general. It is clearly stated in the first post what architecture it has been verified on. And in the seventh post I also advise against it, because it just adds to the boot time.

If you want to wait for someone to code a program that does it all in one for, I seriously think you will have to wait for some time. It is not be that hard to code a gui that depends on other programs to do the partial real work, but an AIO - no.

As always, with what I do, consider it as researching notes, and nothing more. Unless you believe it and are ready for experimental mode..

Joakim



joakim

More info for those that have not already given up;

To change the text below the animation like "Starting Windows" and "� Microsoft Corporation", we must modify winload.exe. It does not have a certificate so only remember to update its checksum when finished.

1. To change the text "Starting Windows" you can open a resource editor and edit the "Message Table". Go for the last string;



2. To change the text "� Microsoft Corporation" at the bottom, you can search and replace the hex signature;
Code:
0000000000A90020004D006900630072006F0073006F0066007400200043006F00720070006F0072006100740069006F006E000000
In my english winload.exe version 6.1.7600.16385 it was located at offset 0x6e0e8;



3. If successful it may look like this;



Joakim

thaimin

A few things. In 64-bit Windows winload.exe is digitally signed so you can't do the above text mod without lots of trouble that hasn't been exactly solved yet.

Also, changing the animation should not add to the boot time at all since an animation would already be playing!

The only thing I can think of that is making it slower is that the original WIM used a special compression method that doesn't seem to be available with wimgapi.dll or any other WIM editor. You could switch to XPRESS (fast) compression instead of LZW (maximum). This means that decompression may be a bit faster with a trade off of needing to read more bytes from the hard drive...

Anyways, I am working on an all-in-one program. So far it covers your steps 1-5 (with one exception...). Next is getting security working!

joakim

Are you suggesting "testsigning on" does not solve that on x64? I have no x64 machine at hand so I cannot verify..

Joakim

thaimin

I am simply stating that it has a certificate which must either be removed or replaced.

joakim

You actually don't have to remove the old certificate. Just remove the pointer to it in the certificate table.

Could you run a quick x64 test to see if winload.exe will load fine with a bogus certificate and "testsigning on"? If that's not working, then there is no easy way for x64 (ref patchguard).

Joakim

marcusj0015

i am sorry about my outburst yesterday

i didnt feel it was ready for release because it is still a big mess

its aawesome we got more info

thanks for that

i will attempt it again

vlex26

An easy way to make a animation bmp:

1. Download Infanview
2. Install it obviously :P
3. Open it
4. Go to image menu and click on 'Create Panorama Image'
5. Click the radio button 'verticle'
6. Select images, press 'create image'
7. go image menu again and go to 'resize/resample'
8. change resolution in pixels to 200x21000
9. save image as bmp with name activity

Hope that helps.

joakim

That is a great tip vlex26. I am now able to create my own animation with the use of Animation Shop and IrfanView. Started out with a few 200x200 bmp's. It looks great, at least compared to the crap I posted earlier. He he.

Joakim

joakim

Some more info;

It appears that more than 105 frames also works. It does not mean I recommend that, I just say it is possible. First I tried 110 and then 181. Both tests ok.

But I trust MS when they say they really put an effort into optimizing this part..

Joakim

joakim

I also tried with 300x300 in size and it worked. Well by worked I mean did not crash. The animation got kind of screwed by it.. For either size, having less than 105 frames will crash the system.

Btw, I there is interest I can also give some details on how to change background and text colour for different stages as served by both bootmgr and winload.exe, plus some other tweaks for bootmenu and text stuff in very early boot phaze (before kernel takes over).

Joakim



thaimin

From the MSDN (http://msdn.microsoft.com/en-us/libr...S.85%29.aspx):
Quote:
When the BCDEdit option for test-signing is enabled, Windows does the following:
  • Displays a watermark with the text "Test Mode" in all four corners of the desktop, to remind users the system has test-signing enabled.Note Starting with Windows 7, Windows displays this watermark only in the lower left-hand corner of the desktop.
  • The operating system loader and the kernel load drivers that are signed by any certificate. The certificate validation is not required to chain up to a trusted root certification authority. However, each driver image file must have a digital signature.
So testsigning should work with x64 as long as the files are actually signed, it just allows any certificate.

However, it is looking like I would rather not use test-signing due to the watermark. It sounds like that as long as the files are signed with a certificate in the trusted root certificate authority then it should be good. It is kinda easy to do that. However when I tried doing that, another Windows protection system was activated and it found a backup of the real winload.exe and bootres.dll and replaced the modified ones with the backups...

thaimin

Thanks for finding out everything with the frames. I will modify my program to support 105 or more frames.

thaimin

Quick question: when more than 105 frames are used, do the extra frames get displayed? Or are they just ignored?

If they are actually used, then how does it handle looping? The original animation is 7 seconds long (15 fps) and has the last 3 seconds loop. With more frames, do the first 4 seconds play normal and the last x seconds loop? Or is it that the first x seconds play steady and the last 3 loop?

thaimin

Okay, I have completed the first alpha of my program. It can be found at http://www.coderforlife.com/projects...ot-updater.zip It is 1.4 MB and includes a 'modified' version of activity.bmp and a folder filled with that file broken into 105 frames.

This version has a very simple GUI and completes steps 1-5 and 7 of your guide in the first post (so just not step 6: the signing step...). I have not tested the resulting bootres.dll but have examined it and it looks good.

Some additional features besides just going through those steps automatically:
  • It can take a folder containing either an activity.bmp OR a folder filled with >=105 frames as BMP, PNG, GIF, or TIFF (they all must be the same format).
  • It automatically backs up bootres.dll
  • No need for imagex, gimagex, or any other WIM program
  • Checks files to make sure that there are enough frames and that you are editing and actual bootres.dll
  • Updates timestamps on activity.bmp, within the WIM itself, and bootres.dll to match the expected values
  • Makes some minor adjustments to activity.bmp so that it is consistent with the original (the original BMP is not exactly the same as a BMP that comes out of MS Paint or other programs)
  • Certificate table pointing clearing is done properly for either x86 or x86_64 files.
  • Fully supports x86 or x86_64 versions and auto-detects how to handle the file
Features to add:
  • Add in signing
  • Make it so timestamps are not predefined but are grabbed from the actual files (currently only bootres.dll is done properly, activity.bmp and WIM timestamps are hard-coded)
  • Add in winload.exe text modifications
  • Add command-line support
  • Check if >105 frames should be allowed
  • Remove testsigning stuff if a different way is found

joakim

I can give you exact answer later on in regards to +105 frames.

About the watermark:
Maybe we can also patch the dll with it inside?

Apart from that I think we are stuck in two different worlds, x86 vs x64. I cannot even open the archive on my x86 platform, as it appears with an unknown format..

Joakim

thaimin

I used a special compression method on the ZIP file to reduce its size (using 7zip). I guess Windows 7 doesn't support LZMA ZIP files (it opened fine on Windows Vista...). I have re-compressed it with the standard ZIP format. So please re-download and try it. The file is now 1.9MB.

joakim

It seems like the 106th frame and onwards are ignored, so no need to add a movie..

Regarding the "Test Mode" watermark in lower right corner, it can be removed by zero out string id no 738 in user32.dll.mui, update checksum, and rebuild mui cache.

For a complete guide and working utility to automate the whole process, look here;
TCP-Z, Best TCP/IP Patch: Remove Watermark, V0.8, Build 20090509

Then no traces are left of "Test Mode" and we can add our custom animation within the 200x200x105 limitation..

Joakim

marcusj0015

Thaimin you program dosent work


each time i launch it it stops working and checks for a solution

i have the Windows 7 OPK installed

maybe thats the problem

running Windows 7 Ultimate RTM x86

thaimin

So, my 'development' computer is running Windows Vista and it works fine there. I just sent it over to a Win 7 machine and it does crash right away. That is very odd. I will have to look into it.

On the plus side, once I get it running on Windows 7, it now supports editing the text in winload.exe and signing! A bunch of other improvements as well, but it doesn't mean much if it won't run on Win 7...

marcusj0015

Thaimin,

do you have a new build of your tool?

cuzz you just said you got it running?



thaimin

Okay, I have now fixed my program to work with Windows 7. The problem was BCDEdit changed part of its output format...

I have also now compiled versions for 32 and 64 bit machines.

I have started a page for the project at Coder for Life - Projects - Win 7 Boot Updater

Everything can be downloaded there.

Please test and tell me any more problems and bugs you find.

The new features in this version (alpha 2) are winload.exe text modifications and digital signing.

joakim

Wow is all that stuff yours? Impressive!! I need to check out your site.

Joakim

thaimin

Yes, it's all mine. My coolest project isn't even up there because I am never completely satisfied with it and am constantly working on it. In fact, all the utilities were written for that project, including wanting to change the boot animation.

I am building a DVR, but I am completely customizing it. I have even built my own case, made my own hardware, and more!

TobbenTM

thaimin, the program is not able to change anything on the boot animation on this machine, but does set the OS in to "Test Mode".
I get this results when running it:

Failed to update animation: Failed to save the updated bootres
Failed to update text: Failed to update the copyright text, this is likely due to noe being able to find the original '� Microsoft Corporation'

Running 64bit.

thaimin

Okay, I have found the problem. It is because of the TrustedInstaller ownership of winload.exe and bootres.dll that I forgot about. On my computer I didn't notice because I have been tinkering with those files so much I had made myself owner and given myself full privileges on those files.

I will make my program automatically fix the privileges.

Ascor

Sorry thaimin your Programm just stops working when i try to start it.
I open it and i get that Windows "The programm is stuck" screen.

So theres no way doing that with 64 bit?

thaimin

There was a slight issue with that, I have fixed it in my working copy. There is no problem with 64-bit, there is a problem with all Windows installations that have not been tweaked. I am currently working on solving that problem as well.

And no need to be sorry. Right now I know there are many of bugs with it. And I need people to test it and tell me these problems. Even if you did get the program to run successfully, I offer no guarantee that it will stick after you reboot. That's why I am calling it "alpha" (not even "beta").

Ascor

I definetly need to go sleep now.
1:19 here and i googled all night how to change the boot screen including many fails.

I hope you can keep me up to date.

marcusj0015

First, thanks Thaimin for all your help and all your app goodness

second i noticed on your site that you link to the Vista WAIK

i think you should remove that link because of Imagex being replaced by DISM in windows 7 i think it would only cause problems

i havent tested it but i think its best to just stick with Win 7 AIK

and considering the Vista WAIK is alot smaller, people will be inclined to download that one

so just to make sure people dont think you mislead them and to be sure everything works you should only link to the Win 7 AIK

just a suggestion

thaimin

I have actually already thought about this. I have updated the website on my local machine, and will commit once I fix this stupid security problem (getting very close).

I found out that Windows 7 comes with wimgapi.dll which is all that I need, so actually I completely removed that section (you will see in the updated version).



Ascor

Hope ya get it soon :P
Really waiting for it but since i can't work on the bootscreen now the Taskbar gets a new skin

marcusj0015

im wrapping up my theme its almost complete al im doing is editing the required files incluiding bootres.dll

so yeah

its called Cloud7 im BumbleBritches57 on DeviantArt

i hope to have it wrapped up in a couple days

marcusj0015

---------------------------
Windows 7 Boot Update Results
---------------------------
Failed to update animation: Failed to correct the header of activity.bmp
Failed to update text: Failed to update the copyright text, this is likely due to not being able to find the original '� Microsoft Corporation'
Successfully enabled test-signing!
---------------------------
OK
---------------------------


the last part is funny

"but testsigning worked!"

thats hilarious

oh and the select activity.bmp

would be better if it was the dialog box that can open files and not only folders

and the wording is a little long.

fritz

Here's my contribution. I get this error when the program gets finished. Running the 64bit version on Win7 Enterprise x64.

thaimin

Thank you all for your input!

I have released "Alpha 4". Here are some notes:

I have fixed the security / TrustedInstaller issue (so you don't manually have to take ownership of bootres.dll and winload.exe). This may fix the error "Failed to update the copyright text, this is likely due to not being able to find the original '� Microsoft Corporation'".

Ascor: I think I have fixed the 'stuck' issue (if it was the same one I had that would come and go if I restarted the computer, there was a bug in a Microsoft library that I had to work around).

marcusj0015: The "Failed to correct the header of activity.bmp" error is an odd one. I never expected to see it. I have added some additional error handling where it is produced so that you can tell me more information.

fritz: I am also getting the "The file was successfully updated, however it failed to be self-signed" error for bootres.dll but I used to not be. I am trying to fix this issue now.

Major note: (at least on x64) this is not working. As soon as I reboot, recovery mode is activated and winload.exe is replaced with the original. However, bootres.dll is sticking but since the new one is not signed it falls back on the Vista bootup. So I need to find the bootres.dll signing problem and how to update the system to think that the new winload.exe is the correct one (I think something with winsxs).


marcusj0015: Thanks for your input on the actual design of everything from the website to the program! About the animation selection dialog: all of these thoughts crossed my mind when I was designing it, however I went the way I did for a couple reasons, although I am not against switching:
  1. I figured most people would be using many individual frames and not one long already made activity.bmp, thus selecting a folder made sense
  2. Using a folder made sense from the program side because I pass that folder directly to my WIM system where it captures that folder directly (don't worry, it filters out everything that isn't activity.bmp).
  3. The wording is long because I wanted people to know the exact requirements for an acceptable folder (if you can think of a better way to word it I am all ears!).
I will try a file selection box and see how I like it.

vlex26

yeah im having the same issues as fritz. i revered engineered ur app and ttrying to figure out a fix.

vlex26

joking :P im not that talented. i wish tho but if u need help. jst PM me.

fritz

Quote�� Quote: Originally Posted by thaimin View Post
Major note: (at least on x64) this is not working. As soon as I reboot, recovery mode is activated and winload.exe is replaced with the original. However, bootres.dll is sticking but since the new one is not signed it falls back on the Vista bootup. So I need to find the bootres.dll signing problem and how to update the system to think that the new winload.exe is the correct one (I think something with winsxs).


This the exact same thing that happens to me after restarting.

Ascor

it still fails to start.

thaimin

Okay. Does anything happen at all? Or does no window or anything show up? Do you get any error messages? Can you go to a command window and try:

start /w "" Win7BootUpdater

You are running this on Win 7 Ultimate 64? Can you check the Event Log in Computer Management to see if there are any relevant messages?



marcusj0015

thaimin,

about your "MAJOR NOTE"

i agree that it is probably in the WinSxS folder

my suggestion

replace every instance of Bootres.dll and winload.exe on the entire harddrive

DO NOT MAKE IT HARD LINKS

to the direct folder

becaue if microsoft updates the bootres.dll and winload (which i think they WILL DO) then it wont work

i dont know any programming

all i know is system file HACKING AKA Restorator

but you need to somehow search the hdd for all copys of winload.exe and bootres.dll read the version information and select the latset version to edit then edit each different version the same way

so that the latest version is installed and hacked and that way if there is a bug or something windows will choose a second version of bootres to install and all wil be good


basically use the latest version and update each individual copy so that there is the most flexability in versioning

do you get what im saying? i feel like i worded it incorrectly

marcusj0015

sorry for the double post

heres my suggestion for the wording (can you make the folder select thing for the animation.bmp bigger that will help with the wording)


Select the folder that contains your animation it must be a full activity.bmp or 105 frames in PNG, BMP, GIF or TIF ((only 1 f becaue in photoshop anyway it saves it as .tif to reduce confusion)) (each 200x200px)




---------------------------
---------------------------
Error correcting anim header: System.UnauthorizedAccessException: Access to the path 'C:\Users\Family\Desktop\SystemFiles\Bootres\activity.bmp' is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at Win7BootUpdater.Animation.CorrectHeader(String path)
Access to the path 'C:\Users\Family\Desktop\SystemFiles\Bootres\activity.bmp' is denied.
mscorlib
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at Win7BootUpdater.Animation.CorrectHeader(String path)
---------------------------
OK
---------------------------




DIALOG BOX 2

---------------------------
Windows 7 Boot Update Results
---------------------------
Failed to update animation: Failed to correct the header of activity.bmp
Successfully updated text!
Successfully enabled test-signing!
---------------------------
OK
---------------------------

Ascor

In a command shell it works.
I'll try modify something.

I don't get the command shell.
Can you explain a bit more how to modify?

thaimin

marcusj0015 #1: Yeah, that does make sense. I have noticed some weird things with winsxs though. I think during my last examination winload.exe was actually a hard link into winsxs... I made a program for finding all the hard links to a file

marcusj0015 #2: I have updated the text in my local copy. I have also got a real Vista/7 style folder selection window (it was a bit of a bitch since my GUI is all .NET and .NET makes it difficult to let you make one, so I had to wrap the native version...)

marcusj0015 #3: That error is saying that the program doesn't have write access to activity.bmp. This made me realize that WIM files save the security of a file so I should probably change the security of activity.bmp to match so that no issues arise during boot up (I bet it's not expecting to not be able to use the file...). Does it make sense that the program cannot write to the file?

Ascor: Here is an example:

start /w "" Win7BootUpdater /Animation "c:\path\to\animation\folder" /Text "Windows 7 is Starting Up!" "Copyleft Microsoft" /TestSign

Also, its odd that the command line is working but the GUI isn't... everyone else seems to get the GUI just fine.

What do you get if you run the command "bcdedit /enum OSLOADER"?

Ascor

Couldn't find the command.
Argh screw that

misspelled


I hope ya can read it.

marcusj0015

yes it does make sense that it wouldnt be able to write to the file

i took ownership of the entire folder and i unchecked the read only attribute for the entire folder and it still dosent work

im making a win7 image and i would really like it if testsigning would be preset for what ever copy of win7 its copyed too so its portable

only copy the files and they work is what im talking about


YES you should change the security of the file so that it dosent mess up

thats a good idea

does anyone have any ideas of how to NOT need test signing?

that might fix the x64 problems too



~EDIT~
could you somehow modify the actual file that the bcd is stored in and just copy that to basically make it portable?

Greg S

Quote�� Quote: Originally Posted by marcusj0015 View Post
thaimin,

about your "MAJOR NOTE"

i agree that it is probably in the WinSxS folder

my suggestion

replace every instance of Bootres.dll and winload.exe on the entire harddrive

DO NOT MAKE IT HARD LINKS

to the direct folder

becaue if microsoft updates the bootres.dll and winload (which i think they WILL DO) then it wont work
You are correct. Not only that, anytime someone who has modded these files runs System File Checker, they wil be replaced by what's in the Win Side by Side folder. What's in that folder is irrelevant and more than likely can not be successfully altered within the running OS. But, their references in the registry can easily be removed. Once the registry entry is removed, SFC, WinUpdates etc.. can not replace your altered files. This has already been tested/proven in the WinMail Tutorial here at Seven Forums.

-untitled.jpg

marcusj0015

ok and everything works?

if they were to issue an update for winload.ee OR bootres.dll and these registry is setup like GREG S has said then would it be able to update or how would it work


GREG S,
does microsoft update Win Mail for win7?

i dont think so

i think it was removed but you prolly know more about that than i do

i have copyed out files from the WinSxS folder edited saved it to the DESKTOP and copyed it back so SFC dosent undo my mods i can confirm that it works

IT DOES REQUIRE ADMIN RIGHTS THOUGH

thaimin

I have updated to alpha 5. Mostly bug fixes. I have not addressed the bootres.dll signing issue or winload.exe replacement.

Ascor: I fixed the problem, which was due to your Windows being in a different language. I am now language-independent (I believe).

marcusj0015 #1: You are going to hate one thing about the new animation selection dialog, but I am working on that

marcusj0015 #2: I have added some security management code to working with activity.bmp, try it out!

marcusj0015 #3: You cannot edit the BCD pre-installation (since the installation creates it). But truthfully testsigning isn't doing anything for amd64 right now... So hopefully we won't need it at all. On the other hand you will need my CA certificate installed pre-installation. I made a tool for this, check out the webpage.

Greg S: I knew winsxs was managed in the registry! Thanks for pointing this out. I will be testing this shortly.

Greg S

Quote�� Quote: Originally Posted by marcusj0015 View Post
ok and everything works?

if they were to issue an update for winload.ee OR bootres.dll and these registry is setup like GREG S has said then would it be able to update or how would it work
One of the gotchas for WinUpdates would be MRT. If original reg entries are in tact, MRT will remove the modded files.
Quote�� Quote: Originally Posted by marcusj0015 View Post

GREG S,
does microsoft update Win Mail for win7?

i dont think so

i think it was removed but you prolly know more about that than i do
Vista. Those using Windows Mail in Win 7 are using Windows Mail from Windows Vista or at the very least, one file from Vista. Yes it was recently updated.
Quote�� Quote: Originally Posted by marcusj0015 View Post
i have copyed out files from the WinSxS folder edited saved it to the DESKTOP and copyed it back so SFC dosent undo my mods i can confirm that it works

IT DOES REQUIRE ADMIN RIGHTS THOUGH
I haven't found that to be the case for me, at least not in the Windows Mail from Vista experiment due to SFC, MRT or both. What you guys/gals or working on may work that way though due to the way ya'll are modding it. With WinMail, SFC checked either the version number or the hash and saw it as foreign and repaired it. WinUpdates with MRT did the same if I'm not mistaken. Can't remember for sure now, it's been some time back.



thaimin

I have uploaded alpha 6, it successfully signs bootres.dll (moral of the story: the built-in Windows resource updating functions SUCK, and I kinda knew this before but at least before when they didn't work they would generate an error...)



So I did some exploring and I found that winload.exe is heavily hard-linked, the following files are all actually just links to the same file:

Windows\System32\winload.exe
Windows\System32\boot\winload.exe
Windows\winsxs\...b..vironment-os-loader...\winload.exe
Windows\winsxs\...b..environment-windows...\winload.exe

So winsxs isn't a backup at all. It is the files themselves (at least for bootres and winload). On that note, I noticed that after doing some stuff with Windows\System32\winload.exe the winsxs version also became corrupted. Good thing that my program auto-creates backups and I could restore in Windows Recovery Environment (the auto-recovery was no longer able to restore the file).

Regardless, I have written code to search and delete for the appropriate entries in the SideBySide\Winner registry, so I will start testing that soon.

M46935

Hi,
i just got the following message: "... however it was not signed because the CA could not be installed.".
Maybe because i didn't install the certificate from your website? But its offline since the first time i tried to download it 3 hours ago.

Regards from germany, David

-- Thank you

Greg S

Quote�� Quote: Originally Posted by thaimin View Post

Regardless, I have written code to search and delete for the appropriate entries in the SideBySide\Winner registry, so I will start testing that soon.
I think you're on the right track with that. I've found that the reference in the registry was the key to non corruption. In the case of WinMail, I experimented, albeit very little, with the version numbers in the registry entries under Winner since the Windows Mail was from Vista with a different version number. In the case of this boot animation, editing version numbers in the registry wouldn't work since you are using a release version number which already exists.
Quote�� Quote: Originally Posted by thaimin View Post
So I did some exploring and I found that winload.exe is heavily hard-linked, the following files are all actually just links to the same file:

Windows\winsxs\...b..vironment-os-loader...\winload.exe
Windows\winsxs\...b..environment-windows...\winload.exe
Lol, that was kinda the point of my last reply. They're just links/placeholders for an original and replacing it from within the running OS or even booting into another OS and doing it from there is going to corrupt it. The registry is the key for a semi-permanent replacement.

thaimin

M46935: Oops! The certificate is uploaded, but you don't need it. I have fixed the install CA problem (I recently changed it and since I already had the certificate installed the error never came up).

Greg S: Great! I will get to this, but not right at this moment.

M46935

"The file was successfully updated, however it failed to be self-signed"
exited with error code 84

I already installed the certificate is this a problem?

Ascor

Same here
it says could not be self signed.
i installed the certificate (altough it failed without your programm [too many options]) and rebooted.
CRASH.
needed to fix it manually

marcusj0015

Taimin,

you have a tool for everything!

thats awesome

marcusj0015

greg s

what you do is goto the WinSxS folder and search for what ever file your working on and goto the folder that contains it (all folders if theres multiple there usually are)

copy it to the dekstop mod it and copy it back to the same folder your good

and repeat for a nessicary files

marcusj0015

Thaimin,

your app is reporting complete success ill test it in a sec

im gonna try again because i forgot to update the (copyright symbol) microsoft corp

to (copyright symbol) BumbleBritches57

Greg S

Quote�� Quote: Originally Posted by marcusj0015 View Post
greg s

what you do is goto the WinSxS folder and search for what ever file your working on and goto the folder that contains it (all folders if theres multiple there usually are)

copy it to the dekstop mod it and copy it back to the same folder your good

and repeat for a nessicary files
How can you do that when the pseudo files are not really there?
Quote:
In practice, nearly every file in the WinSxS directory is a �hard link� to the physical files elsewhere on the system�meaning that the files are not actually in this directory. For instance in the WinSxS there might be a file called advapi32.dll that takes up >700K however what�s being reported is a hard link to the actual file that lives in the Windows\System32, and it will be counted twice (or more) when simply looking at the individual directories from Windows Explorer.




joakim

Some more stuff for the curious..

The first page shown by winload.exe is;

Code:
<xsl:template match="osload-main"> <osxml:text-mode-ui> </osxml:text-mode-ui> </xsl:template>
You can tweak background and text like this;

Code:
<xsl:template match="osload-main"> <osxml:text-mode-ui>   <body background-color="RGBI" foreground-color="XXXX">   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <p pad-left="25">FYI This is the first page by winload.exe</p>   <br/>   <br/>   <p pad-left="22">You can put some text here if you want..</p>   </body> </osxml:text-mode-ui> </xsl:template>
The actual page with the animation on is this;

Code:
<xsl:template match="osload-graphics"> <osxml:text-mode-ui>   <body foreground-color="XXXX" background-color="RGBX">   <br/>   <p pad-left="25">This is the animation page</p>   <textarea width="29" height="24"/><textarea name="status"/>   </body> </osxml:text-mode-ui> </xsl:template>
As you can see when changing the background to grey, the individual elements of the page gets visible;


Explanation of the colours;
Code:
XXXX=black RGBI=white RGBX=grey RGBY=blue
For those wanting to look into tweaking earler in the boot process than winload.exe, look into bootmgr. There is also an xsl resource found thas well. The last page by bootmgr and right before winload.exe takes over;

Code:
<xsl:template match="bootmgr-end-menu"> <osxml:text-mode-ui>   <body background-color="RGBX" foreground-color="XXXX">   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <br/>   <p pad-left="25">FYI This is next page after boot menu (bootmgr)</p>   <br/>   <br/>   <p pad-left="22">You can put some text here if you want..</p>   </body> </osxml:text-mode-ui> </xsl:template>
This one is of course tweaked, but just search for the template name. Actually to achieve this on Windows 7 you must do a little bit of work. You must take the pxe version of bootmgr (bootmgr.exe) and attach the 16-bit stub found on the vista sp0 version of bootmgr. Then you must trim the size of the xsl resource (just delete some unneeded entries). Reason is the total size can not exceed 512 Kb. For earlier versions of bootmgr this is not necessary.

As you may have noticed by now (and especially after investigating the xsl resource) all the different stages in the early boot process have their own "page" which of course is tweakable. I have just mentioned the ones relevant for a normal flat boot. The other ones are easily identified by their template name.

@thaimin
I have added a link to your page in the first post.

Joakim

marcusj0015

Greg S

mostly beause im working with shell32 or imageres or something that gets updated often

i really dont know but i always have

just try it

idk how it works in theory but in practice it works great!

nothing has crashed on me everything works fine

maybe becasue i only work one 1 file at a time

and beaseu depending on version it isnt needed

they DO PUT OLD VERSIONS IN THE WinSxS FOLDER incase something happens

idk how it works but i always have

thaimin

So I haven't worked on the program today, but I will get to testing the registry stuff eventually (I did get a VM Windows 7 setup today so I can test).

Joakim:

Wow, I was hoping the boot would be modifiable like that but I didn't except it to be. That's amazing! The positioning and what not seems a bit weird, and I don't see the animation or copyright element. Also, are there any more colors (like RGBZ)? I really want to integrate an editor for that into a program, or at least allow an import or some basic settings. It is really nice that it is a resource (instead of like the copyright) because that makes it incredibly easier to edit and more reliable.

But that isn't going to come until x86_64 is working with the animation and text.

Thanks for adding the link. Quick question though, have you tested my program on Win 7 x86? Does it work as expected? It seems that everyone else here is using 64-bit and it isn't working (bootres.dll forces Vista-style boot up and winload.exe is replaced by the recovery environment).

If you could, please keep testing new a different cool things for when the 64-bit version is working. One idea is changing the font (it is located in the hex of winload.exe, search for "\fonts\" in UNICODE). They list four fonts: meiryo.ttc, malgun.ttf, msyh.ttf, and msjh.ttf

If you need a hex editor, my favorite is XVI32: Freeware Hex Editor XVI32 Make sure to go to Tools->Options->Shortcut Link and click Create.

Thanks!

thaimin

Sorry for another post, but I finally went back and read some of the other posts.

Greg / Marcus:

The whole idea of a hard link is really confusing. But let me try to clarify.

So EVERY 'file' is a hard link. At least every file on NTFS filesystems (and most *nix filesystems, just not FAT32...). When you make a "hard link" you are just making an additional hard link to the same file information. A hard link points to file information, and the file information DOES NOT INCLUDE a path. The hard link does that.

So winsxs is not filled with "psuedo" files. The files in winsxs are simply the same exact files that are in Windows\System32 or elsewhere. If you edit winload.exe in Windows\System32 or in winsxs both 'files' will become modified. It is impossible to tell if the 'file' in Windows\System32 or winsxs is the original hard link, and it doesn't matter.

Hope that helps. If not, I can try again.

joakim

Unfortunately I have not tested your tool yet. But I now have a test environment also in 64 bit, so I will soon. I will report back.

Joakim

thaimin

Well, we know it fails in x86_64, so the purpose of testing there would be finding a way to make it work. On the other hand I haven't heard any reports of it working or not working in x86, and I tried to make it do your exact set of instructions, although it does some other stuff as well.

thaimin

And another post because I finally got a page back:

Quote�� Quote: Originally Posted by marcusj0015 View Post
Taimin,
you have a tool for everything!
thats awesome
Thanks! I am a programmer. I see a need, and I come up with a solution. I made that program explicitly for this reason. I plan on using this in an installable WIM as well so I needed to find a solution.

ascor / M46935: Because it is working for others, and not you two, we just have to find out what you two have in common.

Are you both using German Windows 7? I know ascor is.
Are you both running Windows 7 'N' Edition?
I see you are both running Ultimate, but different architecture (x86 / x86_64)

I have made a slightly modified version that will report more detailed information, please test it out and tell me what errors you get.

Ascor

Text changed succesfully.
Failed to enable test-signing, failed to enable test-signing.


And i also have a weird
"Testmode
Windows 7
Build 7600"
in the lower right at my screen -.-

marcusj0015

Thaimin,

i AM in x86 right now

im making my image im testing the bootres and winload on another x86 partition and as soon as it works ill try to add it to the image WITHOUT TURNING ON TESTSIGNING and check if it works

that reminds me

can you include a reg hack or something that when test signing is activated it dosent look any different

AKA you wont see the test signing and the windows version on the bottom right of the screen

ok about the post where i said i would check it out and it looked like it worked

well

it failed

windows recovery AKA built in WinRE.wim

couldnt fix it

HAHAHA

so i had to manually replace the files to default

i think its beasue there were two backup files

i think the names were bootres backup.dll and bootres backup 2.dll same for winload.exe

(i restored the originals a couple hours ago)

so yeah i think the multiple backups was the problem

ill check

do you automatically install the certifiacte to the certifacte you were talking about a while ago thaimin?

or are we sapposed to right click and so forth to manually install it



BTW Thaimin,

if it is a language problem for the other guys

that reminds me of my theme i made a couple weeks ago

it just hated any language NOT en-US

marcusj0015

Ascor,

thats the way the program works it *Has* to do that right now

ask Thaimin for more info though



marcusj0015

Thaimin,

i was purusing around your site

andi seen you have an app for unblocking files

i seen something yesterday whilei was looking for something simualr for my windows 7 Image





go to group policy editor, User Config, Admin Templates, Win Componets, Atach Manager,

Do Not Perserve Zone Information, Set To Enabled



i used this same method and IT DOES WORK

you can use group policy to not block files at all

hope it helps

M46935

I'm using Windows 7 Ultimate x86 (Intel P4), in english, too.

Alpha 6b now says: Sucessfully updated animation and enabled test signing,
but its the same like before, W7 just loads vista boot screen instead.

I also tried this group policy setting bout it didnt help.

marcusj0015

does anyone know how to modify the installation ui?

not like the icoons but like the actual sliding bars and all of the awesome stuff thats not images?

how do i do that

i think i need to find a team!

dont worry i have been juggling about 6 or seven projects since i revived the last thread

fritz

I'm getting a little closer. It successfully signs everything changes text and animation and sets test signing but I still get sent to the recovery on restart.

M46935

2 things:
[just made changes on bootres.dll and testsign...]

One of the problems (on my pc) could have been that the certificate was in the wrong folder (i think), in my reg it was unter Third-party root..... instead of Trusted Root ....
So i moved it and tried once again with the original bootres.dll.
Since the cert is in this folder im always getting TIMESTAMP CREATION ERRORS (with the gui).

So i searched and found and tried sign_pe (signer.exe) and any PFX certificate (also installed in trusted root..):

# The following certificate was selected:
# Issued to: Joakim
# Issued by: Joakims Certificate Authority
# Expires: 01.01.2040 01:59:59
# SHA1 hash: 4DFBEB8EF11658CBF6CF7F98F08267DAF265A339
#
#Done Adding Additional Store#
#Attempting to sign: bootres.dll
#Successfully signed and timestamped: bootres.dll
#
#Number of files successfully Signed: 1


If i try to boot with this dll now, W7 LOADS the new screen, but in the last moment before the animation loads/begins it swiches back to the vista loading bar.

thaimin

Ascor: I found the reason it says test-signing failed even though it worked (it was another localization issue, but I fixed it, next time I update it shouldn't have the failure message). The "Testmode" message is because test-signing is enabled. It is supposed to help but doesn't seem to for x86_64...

marcusj0015 #1: Instead of using the hack that joakim found for removing the testsigning message I would prefer to find a method that doesn't use testsigning at all... esp since testsigning doesn't seem to help for x86_64...

marcusj0015 #2: I do automatically install the certificate. The backups are my creation. I make them every time you run the program (and if I detect an error I automatically restore it). WinRE knows nothing about the backups I make.

marcusj0015 #3: That utility was mainly because I found out about alternative streams in a single file and wanted to see if I could manipulate them, turns out I can! Thanks for the group policy tip, I am doing it right now.

Everyone: The unblocking / group policy thing has NOTHING to do with the boot animation, it was a side topic

M46935 #1: Did you install it manually? On my computers it always goes to the "Trusted Root Certificate Authority". Instead of moving it, trying deleting it and letting the program re-install it. Please tell me if it continues to go to the third-party root. And timestamp creation errors is odd (I noticed the other night that the timestamp service I am using went down for a couple hours (its hosted by verisign.com) so maybe it was just down, although joakim's script using the same service...).

M46935 #2: So it is not working in x86 either... joakim can you verify? And also, can you figure out why my program is different than your method (like look at the resulting files for differences)?




So, here are my ideas:
  1. For now let's focus on bootres / animation. It is not replaced by WinRE, we just need to figure out how to make it recognized by winload.exe
  2. Looking at the original bootres (and winload), their certificates have an additional "Enhanced Key Usage" that includes "Windows System Component Verification". It seems that could be a critical item.

marcusj0015

the Group Policy is for unblocking files taht you download

not for bootres

sorry

Thaimin,

that does sound critical.

how do you add that to the bootres and winload?

i will verify later im busy right now

joakim

Quote�� Quote: Originally Posted by thaimin View Post
And timestamp creation errors is odd (I noticed the other night that the timestamp service I am using went down for a couple hours (its hosted by verisign.com) so maybe it was just down, although joakim's script using the same service...).
I don't think timestamping is critical. It is still signed although not timestamped..

Quote�� Quote: Originally Posted by thaimin View Post
M46935 #2: So it is not working in x86 either... joakim can you verify? And also, can you figure out why my program is different than your method (like look at the resulting files for differences)?
When I get the time (hopefully tonight), I will look deeply into it.

Quote�� Quote: Originally Posted by thaimin View Post
  1. Looking at the original bootres (and winload), their certificates have an additional "Enhanced Key Usage" that includes "Windows System Component Verification". It seems that could be a critical item.
Good catch. I must have missed that one. Will check.

Joakim

thaimin

I have checked "Windows System Component Verification". I have made it so my program applies that attribute to the signed files (not uploaded yet, but soon). And it doesn't help...

thaimin

Okay, so version Alpha 7 is up:
  • Major changes to the Certificate Authority and Certificate, it uses a completely new CA and certificate, which it auto-installs (along with a CRL)
    • I was hopeful that this was going to help, but it doesn't. It is at least a more official looking certificate...
  • Fixed localization issue with enabling test-signing (as reported by Ascor)
  • Progress bar actually shows progress now (in GUI and Command Line)
Coder for Life - Projects - Windows 7 Boot Updater



thaimin

I have tested removing the winsxs registry keys for winload.exe and bootres.dll and neither has an effect (and allowing bootres.dll to show or prevent WinRE from activating and replacing winload.exe)

On another note, can someone send me the 32-bit winload.exe?

marcusj0015

the time stamping might be the issue

all Windows 7 RTM AKA not updated since RTM files are all from 7/13/09

and x64 is 7/14/09

maybe you should make it keep the original timestamping?


Thaimin,

do you also patch the Winload.exe and Bootres.dll in the WoW64 Folder?

that is an entire Windows 7 except its full of only the x86 versions

for x86 app compadibility

thaimin

You cannot change the timestamp of the signing, its a security feature built into timestamping.

However if Windows files are basing it off timestamping they would be screwed when they had to update..

(This is all digital signature timestamping, if you are talking about creation / modification / accessed times I do update those to the originals because I can).

marcusj0015

im packiging the bootres and winload files for you just one sec

BTW

Microsoft DID update winload.exe to 6.1.7600.16411 at least for x86

Bootres.dll is still the original RTM version

im also including the .Mui files just incase there needed and you can test them also

it was compressed with 7-Zip 9.15 Beta

heres the link

http://********************/?d=E88QR6F3

i was talking about the creation times


maybe the conflicting digital sign time and creation / modified time are messing it up

im taking blind shots in the dark when it comes to signing and creation times

thaimin

I did look at the times and they are being properly applied, except that they are NOT applied to the backup, so if you restore to the original the times will then be in the present again... I'll make a fix for this as well. The timestamp on the digital certificate should be completely independent of the creation/modification times.

Thanks for the files!

marcusj0015

did you figure out what was wrong with the WinRE thing?


for updateing the Text you need to edit the .MUI's aswell

there stored in Windows/System32/en-US For English USA

And Windows/System32/Boot/en-US For English USA

i just looked at Winload.exe.mui x86 in the message table it says Starting Windows

and WinResume needs to be updated for it to match the boot text

M46935

@thaimin: Dont know what put the cert in that folder, my fault i think.
yes thats what i did, deleted it and let the program install it new.

The Alpha 7 now works on my pc like signer.exe (as well),
only two things are now that Windows still denies to load the custom animation and switches back to old bs, and that the GUI (just always used it) isnt able to sign the bootres.dll in windows folder, i have to sign it somwhere else and then move it there.

Ascor

Text modification = Recovery Environment
Boot animation modification = Vista bootscreen

joakim

@thaimin
I just tested your tool (alpha 7) for the first time, and I must say you have done a good work!

The problem with your tool is that you forgot to set the boot flag to the wim. I tested this in x86. Everything else seems to work fine though.

As my x64 test environment is also up now, I could run some more tests. I successfully booted with my own animation (or actually your grey win 7 animation) by doing it "by hand", following the exact steps as outlined in the first post. It was also signed with the stuff posted in post 1.

Note that timestamping the certificate is not necessary, and neither is adding the certificate to the local store (no matter what architecture).

Testsigning is still necessary to set in bcd, however the ugly watermark can be removed by following the instructions as posted earler.

I therefore suggest that you remove or rephrase this error message;

Code:
Windows 7 Boot Update Results  Failed to update animation: The file was successfully updated however it failed to be self-signed
My tests only covered the animation and not the string replacement in winload.exe. That's for next time.

But all in all, amazingly nice tool.

Joakim

joakim

I was able string replace winload.exe in x64 as well, just like in x86. I have not tested your tool on winload.exe yet. But it should not be any difficult. Just modify winload.exe, update checksum and sign it with something. My test environment is Windows 7 (7600) x64 Ultimate, english. Running in vmware workstation.

Joakim



thaimin

@marcusj0015: I still have no idea what is triggering WinRE, but yes the test needs to be updated in the MUI as well. Maybe if it's only replaced in the MUI then it won't trigger WinRE and use the text? I will have find the current language (not hard) and update the MUI. This will not fix the copyright text from triggering WinRE though. Also, winresume will be after we get all this other stuff hashed out. And also, the winload.exe in boot and in System32 are simply hard links to the same file (check out FindLinks from my utilities).

@M46935: The signing problem is still odd. Can my program sign bootres.dll if it isn't in the System32 folder? I just tried a clean installation of Win 7 Pro x64 en-us and it signed fine.

@joakim #1: Thanks for finding this. It's so stupid, when I was first coding my WIM stuff I had it in there because you had it checked, and then I was like, I don't remember that being bootable, so I removed it... stupid 1 line of code!!!! WIMSetBootImage(hWim, 1)

@joakim #2: Yes, this error is a bit misleading, I will fix it in a future version.

@joakim #3: My program causes WinRE to replace winload.exe file on next boot. winload.exe is just modified, signed, and then testsigning is enabled... so something is up. Using Win 7 Pro x64 en-us.



@everyone: Alpha 8 is up. Using joakim's wonderful find of the missing boot flag, bootres.dll update now works with testsigning!

I still hope to find a non-testsigning method (although will give up eventually and just add the testsigning hack suggestion from joakim).

Also, winload.exe is not working still (gets replaced by WinRE).

thaimin

More on colors for OSLOADER.XSL:

The following chart is how colors in the RGBI form could be used:
RGBI 15 White
RGXI 14 Yellow
RXBI 13 Magenta
RXXI 12 Red
XGBI 11 Cyan
XGXI 10 Green
XXBI 9 Blue
XXXI 8 Dark Grey
RGBX 7 Light Grey
RGXX 6 Brown
RXBX 5 Dark Magenta
RXXX 4 Dark Red
XGBX 3 Dark Cyan
XGXX 2 Dark Green
XXBX 1 Dark Blue
XXXX 0 Black

I have no idea where the RGBY comes in as also blue... but since XXBX also works for blue, the pattern can be used.

The pattern is X for none of that color, or the letter R, G, or B for that color. I specifies intensity (having I makes it light, X is dark). See Color Graphics Adapter - Wikipedia, the free encyclopedia for more information (and the specific hex values of these colors).

Oh, and the reason the copyright segment doesn't have a block in the XML is because it is drawn manually onto the screen. It may be (eventually) possible to change it's position / colors.

marcusj0015

what do you mean it is drawn manually on the screen?

like its not text or even an image but its a bunch of code that is ran like a mini app?

thaimin

No, it is text, but everything else that is drawn is within the osloader.xsl thing the joakim was talking about. Copyright however is drawn always, at the same hard-coded location, in the same colors, regardless of whats in osloader.xsl.

joakim

Quote�� Quote: Originally Posted by thaimin View Post
@joakim #3: My program causes WinRE to replace winload.exe file on next boot. winload.exe is just modified, signed, and then testsigning is enabled... so something is up. Using Win 7 Pro x64 en-us.
Unless it makes a big difference to have Pro vs Ultimate, it must be something related to permissions.. How do you take ownership of the file, so that the tool can replace the original? On the few tests yesterday, I rebooted into winpe and replaced the files, before rebooting again with successfully hacked animation.

I will check out if the colour suggestions work in bootmgr and winload.exe.

Joakim

AlexYM

From what i've figured out (or at least how it works on my computer with Win7 Ultimate x86). testsigning regime is loaded through at least three stages. To let usage of modified and re-signed bootmgr.exe.mui and winload.exe (but not winload.exe.mui) - testsigning should be applied to boot manager's store, like this:
bcdedit.exe /set {bootmgr} testsigning on .
To let usage of modified winload.exe.mui, bootres.dll and other files, loaded directly by winload.exe, testsigning should be applied to osloader's store:
bcdedit.exe /set {current} testsigning on
or instead of {current} you may type {default} or just nothing if you're in this current os.
After this stage winload redirects testsigning parameter to kernel, which applies it to other system files and drivers and eventually puts watermark on desktop. To prevent testsigning from applying to kernel, you may slightly modify winload.exe (since you modify it for Copyright string anyway) - find inside this word: /TESTSIGNING, and replace it in hex editor with anything senseless like /BESTSIGNING or even /ABRAKADABRA. Hope this helps to solve watermark issue by alternative way.
Also you can still use even unsigned winload.exe, applying "bcdedit.exe /set nointegritychecks on". but this parameter doesn't help any other modded file, for them only testsigning will work.

joakim

@AlexYM
It is not so easy to remove testsigning. The paramter nointegritychecks only looks for the pe checksum.

@thaimin
Did you remember to rebuild the mui cache after your modifications? Btw, did you modify winload.exe.mui or winload.exe? I just modified winload.exe.

Joakim

joakim

@thaimin
The colour codes you posted works great!

Here is a rather colourful booting of Windows 7 (including modded animation of course);


Here's where I posted the rest of the details;
sanbarrow.com ~ View topic - Peering inside ntldr, setupldr & bootmgr: What can we do

What more can we do about this?

Joakim

thaimin

@AlexYM I will have to try bcdedit.exe /set {bootmgr} testsigning on

@joakim I didn't know the MUI cache needed rebuilding, however I don't modify winload.exe.mui (yet), just winload.exe

@joakim Awesome that the color works! It is so colorful! I renamed the colors in my previous post to be most suiting (the light colors looked normal and the dark colors definately look dark)

Wondering what else can be done? Well, my next post will have some insights into that.

thaimin

Some more information on OSLOADER.XSL.

Following entities are allowed: &amp; &apos; &quot; &gt; &lt;

Following tags are available for inside <osxml:text-mode-ui><body> (at least, maybe in other places as well).
This is simply a listing I acquired from mining winload.exe and I don't know the details about these. Also, I believe when the default for an int its -1, it ends up computing some value for it.
  • <p>
    • pad-left (int, default 0)
    • pad-right (int, default 0)
    • indent (int?, default 0, copies pad-right?)
  • <br>
  • <b> (equivalent: <bold>, <em>, <strong>)
  • <font>
    • foreground-color (color)
    • background-color (color)
  • <form>
    • name
    • [active special and can't be set in XSL]
  • <select> (internally called menu)
    • name
    • right-justify (boolean, default false)
    • noindent (boolean, default false)
    • minsize (int, default -1)
    • active-color (color)
    • normal-color (color)
    • tip-target (the text of the option that is selected)
    • <separator>
    • <option>
      • selected (boolean, default false)
      • carat (boolean, default false)
      • value
      • tip (the displayed text)
  • <input>
    • name
    • size (int, default -1)
    • maxlen (int, defaults to size or 32 if size is negative)
    • type (textarea [default], password, noedit, numeric)
    • default
    • border-color (color)
    • text-color (color)
    • background-color (color)
    • [value can be set with osxml:update, use default to set it in XSL]
  • <textarea>
    • name
    • width (int, default -1)
    • height (int, default 1)
    • scroll (boolean, default false, only available when height is not provided
    • [value can be set with osxml:update and cannot be set in XSL]
  • <meter> (a progress bar)
    • name
    • size (int, default -1)
    • value (int, <= 100, default 0)
    • full-color (color)
    • blank-color (color)
    • full-char (int, <= 0xFFFF, default 108 (l))
    • blank-char (int, <= 0xFFFF, default 32 (space))
    • [value can be set with osxml:update]

And then a bunch are handled specially by the "browser"
  • <osxml:update>
    • disable-time (boolean, default false)
    • control (the name of the object to change the value of)
    • value (the new value)
  • <osxml:text-mode-ui>
    • <head>
      • <title> or <footer> (internally called InfoBar)
        • color (colorcolor)
      • <timer>
        • initial (int, default -1)
        • control
      • <meta>
        • event (required to be TIMEOUT if used)
        • key (one of the keys (see below), required if event is not used)
        • action (required)
    • <body>
      • foreground-color(color)
      • background-color(color)
      • inverse-color (color)
      • See above for tags
  • <osxml:text>
  • <osxml:row>
    • dims
    • <td>
  • <osxml:newline>

Keys: ENTER, SPACE, ESC, TAB, BACKSPACE, OEMKEY, F1-F12, ANY, PGUP, PGDN, HOME, END, DEL, or probably any single typable character

Now, go play with that! There's a bunch of new stuff in there I think. Like apparently you can make tables with <osxml:row> and <td>



marcusj0015

sorry for not posting in a while,

school started

and im completely confused about all this xsl modding

thaimin

It is kinda like HTML, but more basic, less functional, and has more quirks (like those colors).
The only reason I have been talking about it is because I have been mining into winload.exe and that information has been significantly easier to understand then anything dealing with bootres...

joakim

Yes I was aware of all those "possibilities". They all (at least most of them) seem to exist also in bootmgr. I have tried some of them earlier without much luck. After all, we are not interpreting the code with a web browser..

Do you know what blank-color, full-color, active-color, normal-color and inverse-color is? What about full-char and blank-char?

Anyway, I think we should be able to create more interesting boot menus than the default format..

Joakim

thaimin

I assume that the meter is drawn using full-char / full-color for the parts of the bar that are done and blank-char / blank-color for the bar that isn't yet done.

For example, a progress bar with l as full and . as blank is at 25%:
[ll......]

I assume active-color is the color of the selected item in the menu, and normal-color is the color for unselected items. I don't know if this is foreground or background though.

Inverse-color did pique my curiosity and I have no idea what it does.

joakim

Hmm, I'll look into some parts of bootmgr. Specifically, the menu selection and the progress bar for wim mounting. We'll see how it goes..

I suppose we could inject some stupid ascii artwork into the empty frames.

Joakim

marcusj0015

that actually would be pretty awesome

sorry guys im not much of a programmer im more opf an artist

so if you need any pictures then ill try

ive only done photoshop though not ascii so that should be fun

thaimin

I have some sad news.

After mining my way through winload I found out that bootres.dll is loaded VERY early in the process. The SYSTEM registry hive is not even loaded (and don't even think that the SOFTWARE hive where the certificate is stored is loaded...). In fact the code-integrity in winload.exe is all checked against the catalogs in "System32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\" and "System32\CodeIntegrity\driver.stl". But guess what, when bootres.dll is loaded, those haven't even been initialized yet! So it uses a built-in list of acceptable root certificates:

Microsoft Authenticode(tm) Root Authority
Microsoft Root Authority
Microsoft Root Certificate Authority
Microsoft Code Verification Root
Microsoft Digital Media Authority 2005

So now there are two ways this could go.
  1. Stay with test signing and modify user32.dll.mui so that you can't visibly see it.
    • Pro:
      • We know it will work, and it wouldn't be hard.
      • Less modification of winload.exe in case it is replaced.
    • Con:
      • Requires test signing (security hole AND you can't make a clean install of Windows with test signing enabled (that is a big one for me))
      • Modifies another file.
  2. Since the certificates that are checked (for ALL files, before it looks at catalogs) are located within the binary, they could be theoretically replaced in the binary with whatever certificate we wanted. Both bootmgr and winload would need to have the certificate (I have not checked how bootmgr checks winload yet, but I am guessing it is similar).
    • Pro:
      • Much more slick
      • Only boot files are modified
      • Does not require test signing (can pre-install it)
    • Con:
      • We have to replace a certificate (instead of adding one) (theoretically possible to add (Vista has 8), but that would be amazingly difficult)
      • The certificate we replace needs to be at least as large as my root, although they use a modified version and it might drop a bunch of my file size
      • May not work...
So we need to find out which one of those is not necessary at boot time. Although I have this nagging feeling that they will all be necessary...

marcusj0015

well then how do we add to the certificate store in the file instead of replaceing it?

joakim

I am certainly willing to at least try to patch a bogus certificate through winload.exe.

Even though it's still a security hole, it's a smaller one than compared to testsigning.

One thing though. Are you really sure that bootres.dll is loaded before winload.exe? Or maybe you meant the call against the certificate catalog was not yet done, when bootres.dll gets loaded by winload...

Joakim

AlexYM

@thaimin
Have you tried changing "/TESTSIGNING" string inside winload.exe? For me (in x86 OS) it works just fine, I mean - with testsigning on, modified bootres.dll loads fine, and there's no watermark on desktop after boot.



thaimin

[removed all that certificate / embedding stuff that is no longer necessary]


@joakim

How do you get the bootmgr.exe? All I can find is the bootmgr which seems to be compressed or something weird. Isn't the real bootmgr.exe on the 200MB 'hidden' partition?


@AlexYM

I did try adding test-signing to {bootmgr} and that worked great! I haven't tried your method of disabling test-signing yet. Although I am still hopeful there is a non-testsigning method.

joakim

BOOTMGR is usually located on the 100 Mb partition. It is build of 2 parts. The 16-bit stub and the exe attached at the end of the stub. BOOTMGR is compressed in someway unknown to me. What I know is you can use bootmgr.exe (the pxe version) and attach an older 16-bit stub (from vista sp0) that handles its larger size. However you will still need to reduce the size of the embedded xsl so that total size (including the stub) is below 512 Kb. This pxe version that now is able to local boot, is not compressed and is more easy to read.

When disassembling it, preferrably cut off the stub first.

Or just grab an older version of bootmgr that is not compressed at all (cannot vhd boot though).

Joakim

thaimin

Actually, forget all that stupid stuff about certificates.

There is a MUCH easier way that I just tested and works!

This is still not 100% complete, but is getting there.

Find all instances of 68 70 08 00 00 in winload.exe (there are 3) and replace them with 68 40 08 00 00. Now bootres.dll doesn't need any signing at all! One of those is for bootres.dll, one is for bootres.dll.mui, and the third I am a bit unsure about...

Note 1: This is untested in 64-bit, but should be C7 44 24 40 70 08 00 00 to C7 44 24 40 30 08 00 00. There are only two (bootres.dll and bootres.dll.mui, but not the unsure one...)

Note 2: winload.exe still needs to be signed (and bootmgr testsigning needs to be enabled)! So run my program on winload after you do the edits so it gets re-signed and then run bcdedit /set {bootmgr} testsigning on

Note 3: I hope that unknown one doesn't hurt anything at the moment, but it doesn't seem to. I will work on clarifying which ones do what.

DO NOT DO THIS ON A LIVE SYSTEM AT THE MOMENT. It may totally f your system... (although it didn't for me, I just don't want to be responsible).

So this is awesome! No security holes (since it ONLY enables bootres.dll and bootres.dll.mui to be unsigned). However, it still requires testsigning for the bootmgr. So hopefully a trick like this works for bootmgr as well, and just letting winload.exe through (a bit bigger of a security hole...).

AlexYM

@thaimin
That is an awesome find, allowing insigned bootres.dll to load!
To allow the same for winload.exe, you can try instead of "bcdedit /set {bootmgr} testsigning on" another option:
bcdedit.exe /set nointegritychecks on
(it works solely for unsigned winload.exe, not for unsigned winload.exe.mui).
May be the third mentioned sequence of bytes in winload.exe is for it's own mui file?
And to allow unsigned bootmgr.exe.mui (in case we want to modify boot menu appearance and look) - apply the same to bootmgr store:
bcdedit.exe /set {bootmgr} nointegritychecks on

.

thaimin

The unsure one is most likely the unloading of bootres.dll in case of graphics failure. To allow winload.exe.mui to be used unsigned I believe you need to switch the following (there is only one of them):
6A 30 58 53 0D 01 05 00 00 -> 6A 00 58 53 0D 01 05 00 00
I have not tested it at all, and it will be different on 64-bit, I believe:
83 E0 30 0D 01 05 00 00 -> 83 E0 00 0D 01 05 00 00

@AlemYM
So we can easily re-sign winload.exe and then use bcdedit /set {bootmgr} testsigning on. You get no test-signing warning as you pointed out earlier since {current} is not in testsigning mode.

However, as I have said a couple of times, I do not want to rely on testsigning at all. It cannot be setup pre-install.

thaimin

Some more little hacks (untested)

So before I talked about how the copyright was fixed, well I found out that you can adjust it at least a little bit.

The easy ones:
Code:
C7 45 F8 CE 02 00 00 89 45 E8 C7 45 DC 7F 7F 7F FF y pos:   [   718   ] ** ** ** fg color:[R  G  B A] ** required to properly set width
Remember that the boot up screen is 1024 x 768 and 32bpp in Windows 7 (so you can use alpha for the foreground color).

The harder ones:
Code:
A1 A8 37 49 00 83 65 F4 00 83 65 EC 00    [scrn wdth] x pos:  [0] height: [0]
The x position, height, and background color can be MAX 0xFF (255). I believe you should keep the height 0 to let it calculate the proper height.

Changing the width will be difficult. It grabs a global variable that has the current screen width stored in it. You can however change it to point to any address that has the value you want it in the file (but convert the address to a memory address).

Now if you set it so x+width or y+height goes off the screen it will fail to draw. If it fails to draw then it also will not draw the "Starting Windows" message from the message table (during osload-main or osload-graphics).

So if we just change the y-position to 0xFFFF (way off the screen) then we don't have to bother changing the copyright notice OR the message table. Just the XSL, and we can make it say whatever we want. The downside is the Starting Windows is nicer and larger text...

AlexYM

@thaimin
It would be great if you''ll manage to find where definitions are located for animation "film" - width/height (200pxl), position on screen, number of frames, etc...

thaimin

I know I have been posting a lot, and posting really long messages, but please bear with me. I am trying to get all the thoughts out of my head and written somewhere.


I have performed some tests.

I tested the winload.exe.mui hack and it does make it so no signature was required for the MUI.

I tested the copyright message stuff. Moving copyright off screen does indeed make it not draw and forces "Starting Windows" to not draw as well. Changing the foreground color works (did not test alpha though). Changing the background color failed however (its possible that it is only changing the alpha and not red channel which doesn't work). I did not test width or x positioning (since you need to change width to change x and width would be complicated to change).

I also tested some other new things as well:
  • Set copyright font size: C7 45 E4 0B 00 00 00 -> C7 45 E4 XX XX XX XX (currently 11 (0x0B))
  • Move startup message vertically: C7 45 F4 0B 02 00 00 -> C7 45 F4 XX XX XX XX (currently 523 (0x20B))
  • Set startup message font size: C7 43 24 12 00 00 00 -> C7 43 24 XX XX XX XX (currently 18 (0x12))
  • The font for both of them can be replaced like so:
    • Find the font for your locale in winload.exe (it is a Unicode string)
      • zh-TW zh-CHT zh-HK zh-Hant: \fonts\msjh.ttf (Han (Traditional))
      • zh-CN zh-CHS zh-Hans: \fonts\msyh.ttf (Han (Simplified))
      • ko: \fonts\malgun.ttf (Korean)
      • ja: \fonts\meiryo.ttc (Japanese)
      • everyone else: \fonts\segoeui.ttf
    • Replace it with the desired font (if your font name is longer than the one already there you must rename you font, easy way is to copy it and rename it boot.ttf which is as short as the shortest one there)
    • Note: I do not think this will change the text-mode-ui text!
The background and foreground colors of the startup message are like the background color of the copyright message, so at the moment I cannot change them.

So, now that these two messages are so changeable, we can display 0, 1, or 2 messages with the following properties:
  • Both messages:
    • Can move vertically
    • Can change font size
    • Fixed background color
    • Change the font (the changed font applies to both)
  • Message 1 (utilizing original copyright message):
    • Text color can change
    • Limited to 23 characters
    • Must display if message 2 displays
  • Message 2 (utilizing original startup message):
    • Fixed text color
    • Any number of characters long

@joakim
Since the MUI resources for winload.exe are loaded before the registry is loaded, there is no MUI cache involved (the MUI cache is in the registry). However, I am having problems settings the values in winload.exe. They don't show up. If I change winload.exe.mui however it does work (which is really easy now since it doesn't need a signature). My program is not MUI-aware so it could be that whatever program you have edits the right file automatically.


@AlexYM
I have been looking for how to move / resize / whatever the animation, however I have not had any luck so far. I am still looking though.


@everyone
There have been a lot of really important developments recently but I don't have the time to put them all into the program yet. You will have to wait just a bit to get a program. For my own reference, this is what needs to be added/changed:
  • Change testsigning to only sign {bootmgr}
  • Add the hacks that allow bootres.dll, bootres.dll.mui, and winload.exe.mui to load with no/invalid signatures
  • Edit message table in winload.exe.mui instead of (or in addition to) winload.exe.
  • Add options to:
    • Have 0, 1, or 2 messages
    • Move message vertically
    • Change message font
    • Change message font sizes
    • Change message 1 text color

Anything else you would want to change?

Seagate

Would it be possible to increase/change the total amount of frames drawn for the animation and the amount of frames looped?
I tried using more than 105 frames but it just cut off the additional ones and looped the last few secods.

joakim

I must say you have a done some extensive detailed work here. Impressive!

For my own part, I have sort of given up the task of circumventing testsigning. I also did not find anything interesting to put into bootmgr/winload.exe, besides what's already described.

I thought that maybe it could work to inject a footer into the animation page, and thus place it on top of the lower MS signature. But the footer gets placed right below it, sadly. That said, you can of course tweak that footer with text/colors.

Regarding my own winload.exe tweaks, I always modify winload.exe directly, never touched a mui so far.

thaimin, do you know how to specify font size in the xsl?

Joakim



thaimin

New hacks!

Change background color of both messages (tested, and alpha doesn't seem to work):
Code:
B8 00 00 00 FF    R  G  B  A
Change alignment of both messages (untested):
C7 43 30 03 00 00 00 -> C7 43 30 XX 00 00 00
Where: XX = 03 for center, 05 for left, and 09 for right

@joakim
You cannot change the font size in the XSL. Everything in the XSL is rendered as part of the "text-mode-ui", a.k.a. a console. It is a fixed width and fixed size font. They give you bold by having an alternate font. The message boxes are simply drawn right on top of that.


Now some sad news about the animation. It turns out that the animation is not handled by winload.exe at all! In fact winload.exe never draws any of the animation! Winload leaves the screen sitting with the two message boxes (starting windows and copyright), it then passes control off to the kernel (ntoskrnl.exe). The kernel then renders the animation without touching the rest of the screen (so that the messages stay there). I believe winload does physically load the activity.bmp into RAM, however it just leaves it there for the kernel to use.


So what does this mean? Well, I am not going to go into editing the kernel (that would be opening too many holes). This means that the animation is fixed in its location, size, frame rate, and pattern (3 seconds straight, 4 seconds loop).

@Seagate, this means no increasing the number of frames.


This also means that I am almost done with my adventures in winload land. The only things left I would like to accomplish are changing the "Starting Windows" text color and allowing the copyright message to be any length.


So its into bootmgr land! Time to see if I can disable checking for winload and then testsigning will be completely done for!

marcusj0015

so wait with the .XSL can we increase the FPS to at least 23?

it flickers and looks like its having trouble drawing it sometimes

so faster FPS would be good

thaimin

No, you cannot change the FPS. Nothing about the animation except the pictures can be changed.

marcusj0015

Thaimin,

does this mean we Wont ever have Custom Animation?

i agree with you on the Kernel hacking way to many possible implacations not even counting the massive glaring security holes that would come with it

thaimin

I think you misunderstood. We can change the picture that makes the animation but nothing else about the animation.

marcusj0015

oh ok

is everything working with the Copyright Microsoft corp working and the animation mod working?

or are you still looking into it?

is there anyway i could help?

thaimin

Everything works great except the need to have no testsigning for bootmgr. I am working on that right now.

marcusj0015

awesome!!!

what about the .MUI's

do you need to edit those for the text?

thaimin

Yes, but they are standard PE files. They act just like an EXE but it only have resources and no code. I can use the library I have already made to open them, edit them, and save them.

marcusj0015

ok thats awesome

if you need anything just ask and ill try to help



joakim

I am not sure how to disable the integrity check of winload.exe within bootmgr, but there is a trick. Use an older version of bootmgr (for example longhorn version from 2005 works great on Windows 7 (and on a side note I might add that this particular version seemed to pxe boot way faster than the later version too)). If you reboot virtual machines over and over again, it might be a timesaver to not have to update the checksum every time you modify something in winload.exe..

Now I don't really have breaking news, I just tested some of the stuff you (thaimin) already have posted, and want to confirm some of it. I found that the easiest way to remove both the copyright message and startup text is to set font size to 0. Replace the "B" with "0", and you will only have the animation present in the centre of the screen;

Code:
00443852  C745E40B000000   mov    dword ptr [ebp-1Ch],0000000Bh
Placing the startup text at the very top of page can be done by replacing 20B with 000;
Code:
004437FE  C745F40B020000   mov    dword ptr [ebp-0Ch],0000020Bh
Changing the font size of the startup text is done here;
Code:
004439A6  C7432412000000   mov    dword ptr [ebx+24h],00000012h
Changing "12" with "86" will create a huge text that will cover over the copyright message like this;



Joakim

marcusj0015

Joakim,

is there any way to increase the birghtness of the Copyright and increasing the text size of both copyright and starting windows?

Ascor

The Text could basically Cover the entire Image or am i wrong?


BTW:
Does anyone know where those Flashing BMP's for Icons are?
The Yellow one.
I found a few in Aero.msstyles but i am missing some.

thaimin

@marcusj0015
"birghtness of the Copyright"? It is pure white, that is as bright as things get. Sadly I have not been able to change the color of the startup text.
The text size for both the copyright and the starting windows messages are independently controllable (default to size 11 and 18).

@Ascor
The order of drawing is copyright, start message, animation. This means that the animation will be on top of the startup message.

thaimin

I have some updates. I have found out the basics of how to decompress the Windows 7 bootmgr (located at C:\Windows\boot\PCAT\bootmgr).

The file contains 3 parts: a boot loader stub that the BIOS loads and 2 PE files. The 1st is just a version resource. The second is a compressed PE file that contains all of the heavy duty booting stuff (including hopefully the magically code to turn off the security for winload).

I have made a little program available from Coder for Life - Projects - Windows 7 Boot Updater - Bootmgr Decompress that can decompress the second PE file. There are minimal instructions on that page.

Please note that the decompression is not 100% accurate, but very close. It is good enough to see all the resources and whatnot. I also have no re-compressor at the moment.

One day we may have to also consider supporting EFI. There is a separate bootmgr and winload for that.

joakim

thaimin, you don't know how to change the copyright color?? I just followed you instructions and could change it here;

Code:
0044384B  C745DC7F7F7FFF   mov    dword ptr [ebp-24h],FF7F7F7Fh
To get purple text replace 7F7F7FFF with FF00FF00. Can't remember what I did for yellow.

@Ascor
Do you really want text on the entire screen? I think it fails when the text is placed in the area where the animation is. But you could for a test try to place it at the top and increase the size dramatically.

Joakim

thaimin

@joakim
Oops, I meant startup text color cannot be changed. Yellow would be FFFF00XX (the alpha is apparently ignored)

@Ascor/joakim
As I said, you can put the text where the animation will be but the animation will cover up whatever is behind it. So you'll see something like Start[ANIMATION]dows.

joakim

Would you mind elaborating on the details of the compression. I mean how the 2 pe's are interlaced or whatever they are.

Either way, re-compression is not necessary at all.

Joakim

thaimin

The two PE's are completely independent (at least to the best of my knowledge). The first one has nothing of importance in it.

Re-compression will be necessary. When un-compressed the image is 511.06KB on its own which means that with the stub and other PE file it is well over 512KB total.

The compression method is a variant of LZNT1 (which is a variant of LZSS). If you understand LZSS you will understand the compression used here quite easily. It is a bit different (the sliding window has a sliding size and resets every 4096 uncompressed bytes). The remaining problem is that there are an additional 2 bytes at the start of every 4096 uncompressed bytes (in the very beginning these are 0xCA and 0xBB). I don't know what to do with these two bytes so I just drop them. I thought they were a checksum, but I have tried about 10 different checksums and none of them match. If you can figure out how 0xCA and 0xBB relate to the first 4096 uncompressed bytes that would be awesome!

joakim

I know next to nothing about LZNT1/LZSS so I'm probably not gonna be of any help with those bytes.

As a temporary workaround, until re-compression is solved, you could just trim the size of the embedded xsl. Then total size should get below the limit.

Joakim



Ascor

I was just curios IF we could do that

joakim

@Ascor
I will try it and report back.

Anyways, I just discovered and also at the same time got a little bit confused, that winload.exe don't have to be signed (even though it is signed) on 64-bit. Can anybody else confirm this, in case my test environment is completely screwed..?

bootmgr (embedded exe) still have to be signed on 64-bit though.

@thaimin
I would guess that this could be patched in the 16-bit stub. What do you think?

Joakim

joakim

As foreseen by thaimin, the startup text cannot be drawn across the whole screen.

thaimin

@joakim

On Windows 7 64-bit winload.exe must be signed OR integ checks must be off (according to Alex). If not WinRE is booted and the modified winload.exe is replaced. If you have neither of those, your computer is special.

For sake of clarity, from now I will call the stub "bootmgr" and the PE file "bootmgr.exe"

I have found the code to patch in the Windows 7 bootmgr.exe:

80 7D 0B 00 74 04 33 F6 EB 03 6A 30 5E -> 80 7D 0B 00 74 04 33 F6 EB 03 6A 00 5E

I have not tested yet. The stub probably assumes that bootmgr.exe is compressed so to use the everything from Windows 7 then I will need to re-compress...

Maybe bootmgr can be patched to allow bootmgr.exe to be unsigned. However, my tools are only for 32 and 64 bit programs... do you have a 16-bit disassembler that you would recommend?

joakim

For 16-bit use ndisasm.exe inside;
http://www.nasm.us/pub/nasm/releaseb...9rc7-win32.zip

joakim

What I meant was that if NOINTEGRITYCHECKS and TESTSIGNING is on, then winload.exe don't have to have valid bogus certificate. In my case, the pointer to it in the pe header is pointing to an invalid certificate. Could it be that NOINTEGRITYCHECKS only checks the pe header and not the actual certificate??

Anyways, this is not very useful, so don't waste time on it.

joakim

Quote�� Quote: Originally Posted by thaimin View Post
I have found the code to patch in the Windows 7 bootmgr.exe:

80 7D 0B 00 74 04 33 F6 EB 03 6A 30 5E -> 80 7D 0B 00 74 04 33 F6 EB 03 6A 00 5E
What is this patch supposed to do?

It runs fine on 32-bit, as it will without it too. However in 64-bit it is barking about non signed file it cannot verify signature on. So the stub detects the environment and choose whether to run signature check depending on 32-bit vs 64-bit. If you can find the check in the stub, then great.

To reduce possible confusion maybe we should refer to the files as;
Code:
bootmgr                (stub + osloader.exe) stub or bootmgr.bin (16-bit header of bootmgr) osloader.exe          (embedded exe in bootmgr) bootmgr.exe          (pxe version)

thaimin

@joakim
That patch is supposed to allow winload.exe to be used without TESTSIGNING or NOINTEGRITYCHECKS on bootmgr. That patch is only for the 32-bit version of the bootmgr found in c:\Windows\Boot\PCAT. It is probably different on 64-bit. I haven't dove into the stub yet.

I have figured out what 3 of the nibbles of the mystery 2 bytes are (they are the size of the next compressed fragment) and the last nibble is always 0xB, so that is solved. It didn't effect my decompression at all. The question I still have is if the compression algorithm asks for data that doesn't exist (it does do this...) then what do I fill it with? One site suggested 0x20, but that didn't help... I have also started working on a compressor.

osloader.exe is bad name. winload.exe official name is osloader.exe (check its VERSION_INFO in a resource editor), and in the files they call it osloader. My guess is that it is only winload.exe when they distribute it...

I would be up for
bootmgr (stub + osloader.exe)
stub (16-bit header of bootmgr)
bootmgr.exe (embedded exe in bootmgr)
pxe bootmgr.exe (pxe version) (I am biased here cause it is my goal to use only files that the user would have and not add anything, so I do not want to add/replace a new boot manager)

joakim

Oops, I forgot for a second that we are dealing with nt6 and not nt5.. Names are fine as you suggest.

joakim

I think the patch for signature checking in bootmgr must be done within bootmgr.exe itself and not the stub, since the stub only calculates basic checksum of bootmgr.exe.



thaimin

Yes, it is for bootmgr.exe (now that we have terminology!). And for 32-bit only.

It is really nice to know that the stub only does checksum!

joakim

Bingo, I just found it. It is just about patching a conditional jump. Just tested on 64-bit. Does not need to have bootmgr.exe signed with test certificate either.

Modify;
Code:
74165768f8964600 > 75165768f8964600
Joakim

thaimin

Awesome! Is that for the built-in Windows 7 one?

My re-compression is going well. The benefit of having the Windows 7 is that it is compressed, you can add a ton of stuff to the XSL!

I also have to translate all my hacks from 32-bit into 64-bit...

joakim

There is only 1 bootmgr for Windows 7, regardless of 32-bit/64-bit. Since I have not been able manually decompile the compressed bootmgr, I patched the pxe bootmgr.exe and attached the stub from vista sp0 (that handles uncompressed bootmgr.exe).

But the code should be the same inside the embedded bootmgr.exe.

joakim

The checksum calculation in the stub can probably be disabled by the changing 7403 with EB08 at offset 0x105E

Joakim

joakim

Just confirming that both these hacks works. In my 64-bit test environment I can boot with a bootmgr where certificate is invalidated and checksum is bad.

Joakim

thaimin

Awesome on all counts!

I still need to find out the 64-bit equivalents of my winload.exe hacks, and to redo the program.

thaimin

I have successfully created a re-compressor. I have combined them into one tool:

Coder for Life - Projects - Windows 7 Boot Updater - Bootmgr Zip

I would like to note that the decompressor is still losing a few bytes (~60 bytes from a 511.06 KB file, it just sets them to 0 because I don't know what to use). The compressor works very good, and decompressing the re-compressed file is perfect. My compression is not as good as the original, but just barely worse (1.5 KB larger out of a 344 KB file)!

So this is definitely good enough to begin testing things with, and I hope to find how to handle those pesky 60 bytes!

thaimin

Actually, it struck me right after writing that how I could find the problem! Some of the missing bytes were in the resources section, where there are plenty of easy to understand strings and I found out what it was doing wrong!

It now works PERFECTLY. The checksum and digital certificate of the resulting "bootmgr.exe" file verify. So there it is! You can now use Windows 7 bootmgr fully!

(My compression is still a little worse than there's, but it doesn't matter, since its compressed we have 150 KB extra space!)

joakim

Amazing work. Digital signature still valid after decompress! I just noticed the pxe bootmgr.exe is the exact same as the embedded bootmgr.exe. Ha ha, I thought they were different. So all offsets are still the same as the ones I've been working with lately.. Lets scrap the notion of a pxe bootmgr.exe. There is just 1 such.



thaimin

And now you can use it compressed! More bootmgr.xsl fun! However there may be a hard limit that the bootmgr.exe file cannot be more than 512 KB. It seems odd to me that uncompressed it is 511.06 KB like they had a limit. However you could remove the certificate and version information for an extra 8 KB of space.

Looking at the "bootmgr.exe" it actually calls itself bootmgr.dll within its Export data directory but bootmgr.exe within its version information. The other little PE file (the one not compressed and that has almost nothing) is also called bootmgr.exe in its version information.

Anywho. I need to take a break from this for a bit (a couple days). When I come back I will make the GUI.

joakim

You can also remove the embedded mui and the network related stuff from the xls and save another 4 Kb.

Did you find any working patch for the checksum on winload.exe (in bootmgr.exe)?

marcusj0015

i feel ya on that Thaimin,

i took a break from that so i could edit the icons in imageres

theres over 200 icons and at least 10 different sizes of the same image in each icon so after my editing i have to save a shit ton of versions and then compile it and replace it

its tedious

plus i have to go over each and every dll and exe for icons or dialogm boxes or text strings to capitralize everything in windows

ive been working on this for about 3 weeks im probably 0.01 percent done


the good news is when im done and my files gget updated all i have to do is extract everything and batch replace everything

AlexYM

Quote�� Quote: Originally Posted by marcusj0015 View Post

plus i have to go over each and every dll and exe for icons or dialogm boxes or text strings to capitralize everything in windows

ive been working on this for about 3 weeks im probably 0.01 percent done


the good news is when im done and my files gget updated all i have to do is extract everything and batch replace everything
And then Service Pack 1 goes out with nearly all dll's and exe's to be updated, and you'll have to do all the job all over again...

thaimin

Quote�� Quote: Originally Posted by AlexYM View Post
And then Service Pack 1 goes out with nearly all dll's and exe's to be updated, and you'll have to do all the job all over again...
Sorry to keep advocating my own tools, but that is why I made the "BatchResourceUpdater". Service Packs do not change the resource IDs, so you make a little script (it's very simple) and it can update the file with a simple double click...

thaimin

Another mention, Adobe Flash has an Export Movie option that can save as a sequence of images (I would recommend PNG due to high quality / small size). The sequence is compatible with my program, so that is a nice way to make a nice animation. Just make sure you set Flash to use 200x200 frames and 15 fps.

marcusj0015

thaimin,

i think i will check out your tool sounds very good

i know that im crazy trying to repace every resource iin the Whole Windows 7 OS

but idk

i get annoyed by the little things





AlexYM,

like i said all i have to do is extract everything and click one botton and all my custom resources are updated again

so not any where as big of a job as it is now

thaimin

I did work on the new GUI a bit. It cannot actually do anything with your files, but it's an impressive GUI. It has a complete preview of the boot animation. Please test it out and tell me what you think.

http://www.coderforlife.com/projects/win7boot/GUI.exe

Some notes about the new GUI:
  • The file is much larger (~2.5MB) (the GUI builder for MS Visual Studio adds tons of extra stuff, the final version will hopefully be smaller). However it does include a compressed version of the default animation which weighs in at 1.2MB so it won't get any smaller than that).
  • The GUI is nearly complete, pending any changes you guys think should be added.
  • Everything you can change within the GUI itself I plan to have available in the next version.
  • You can now save / load a "boot skin". The boot skin packs the animation and fonts used into it so it is completely portable (Note: current embedded fonts are not loaded from the boot skin).
  • The animation selection is incredibly more lenient. You can select any image to be a static image (and it won't care if it's not 200x200). For selecting an animation folder it still prefers an activity.bmp, but if that is not found then it takes the first 200 images of all formats (and if there is less then it just fills in with black) and does the same scaling as for static images.
  • It is assumed that most people will just modify the standard winload / bootres / bootmgr so I have moved this to a separate window. The boot skin files will not include this information.
  • The command line (once remade) will only be able to apply a boot skin that has been saved with the GUI. It will have options for setting the winload / bootres / bootmgr files to apply to.
  • Three options are currently disabled: background color, text color 2, and text length is maxed at 23 for text 1. I plan to have these eventually but not in the first new version.

joakim

I will certainly give feedback it, but will be away for a few days now. You have done lots of interesting work!!

marcusj0015

that is amazing thaimin,

does the GUI.exe replace win7 boot updater?

i really like the preview

and that IS a very beautiful gui

its ****ing awesome

if it would only actually apply it!

but still very cool

i espically love the Preview!



thaimin

Glad you like it!

The GUI will be the new GUI for the old program. So yes, it will replace the old one. I have decided that the GUI is essentially complete accept I am going to add a fullscreen view so you can see how it will really look during bootup (and add the advanced screen with file locations and a restore button and enable embedded fonts).

I need to program all the hacks in and them it will be working. But I won't really have time for about a week.

djpatch

First of all sorry for my bad English.
Thank you thaimin the excellent program that created
I wanted to know if there is a way to put the boot screen changed into the ISO my windows 7 that I'm changing to see the screens new during the initial setup from DVD.
Thanks for your patience , but I am just a beginner

marcusj0015

im obvisouly not Thaimin

but he said that yes you can do that a few pages ago when i asked becaue that is one of his goals also

thaimin

To clarify, with the current version you cannot (because it requires testsigning which cannot be setup until after installation). The new version (in about a week) will hopefully be able to (pending testing, but with joakim's testing so far it seems that yes, it will work).

WaxyChicken

Ok, i took a break and came in late on this thread.
i have Win7 Ultima 32 bit (x86)
what do i need to do before using this tool?
will it prevent me from booting? (30% chance? )

From what i'm reading you've been doing amazing stuff Thaimin. Keep it up!

thaimin

You haven't come in too late. As soon as I make this new version I will want plenty of people testing it before I go to beta / release.

I would personally recommend waiting a week for the new version. If you use the currently version you will need to do an extra command line: bcdedit /set {bootmgr} testsigning on. It has a very low chance of preventing you from booting (and it makes backups automatically so you can restore in WinRE.

WaxyChicken

OK, waiting patiently. Thanks

marcusj0015

Thaimin,

im gonna download your gui again and look at its shinyness

seriously it looks VERY professional

like something microsoft would release

if they were into hacking themselfs and just general awesomeness of course


if at all possible you should a font size thing in your app also

thaimin

@marcus

I just uploaded a new version that has a fullscreen preview. What did you mean be "if at all possible you should a font size thing in your app also" ? Which font size? You can change the size of each message (this is really "Text Size", should I rename it?)

(There are also a bunch of other minor changes such as adding the advanced dialog, even though it doesn't actually check the files, improving the playback of the preview, making it so embedded fonts can work (although untested), and adding a progress bar dialog (although it is never shown at the moment). I have now made every dialog / UI that I need to make, so it is time to make it do something).

marcusj0015

im sorry i cant speel for shit so try to navigate around the road blocks and ill try to type better

i did mean font size

i would go and change it

because it ALWAYS says font for every windows app ive ever seen

sorry im having like a blonde week


thats awesome!

well it looks fantastic time to make this bitch do some work!



marcusj0015

one bug i did notice with GUI.exe

if you click the preview (dont ask why i clicked it idk i just did

it says the frame that is being displayed

which is awesome

but if you go to another app with it running (i know im lazy)

it continues displaying the current frame under the cursor

marcusj0015

sorry for all the posts

i noticed in your Advanced Options section, that you automatically locate the BootMGR

what about the BootMGR that is on the 100MB partition Win7 automatically installs?

ill do some pokin around and get back to you

this installation dosent have it but ima reinstall

my partitions get trrashed with junk pretty quickly!

nicholai

i have Windows 7 Ultimate 64bit should i hack the boot manually, or will it be supported under your release next week?

marcusj0015

yes Thaimin also wants x64 support

that reminds me

Thaimin,

how is the whole EFI thing?

did you find out if macs use a bios app that is loaded in EFI

and basically boot the same way most PC's do or how does it work and are you gonna include it or whats up with it?

joakim

Someone asked earlier if it is possible to do the same mods on the DVD. Answer is yes, but you will of course need to inject the modified into boot.wim for this to work, as well as configuring testsigning in the BCD on the DVD. Works equally fine during regular setup as with winpe (as in recovery). Remember that just because you configure testsigning on the setup source, doesn't mean you will install Windows 7 with testsigning on...

Joakim

marcusj0015

Joakim,

@Thaimin already said that he has found a way around the test signing but going through bootmgr and disabling that

so all you need to do is use Thaimin's tool for boot vid hacking and patch ypour local files then copy them to a DVD of the same architecture of the modded files

you can do the same for WinRE

joakim

Since I'm not able to do this, maybe thaimin would describe the details to circumvent testsigning then...

Joakim

marcusj0015

Read the Whole page

How to change boot animation in Windows 7

marcusj0015

Joakim,

Thaimin said he was gonna take a break

or maybe he is doing some more coding idk

but yeah there is the info you requested in the link i just posted

Không có nhận xét nào:

Đăng nhận xét