This tutorial is more of a guide and the values herein are likely to vary from version to version of Nero.
The aim of this tutorial is to familiarise you with W32Dasm and hopefully teach you enough to get past Neros protection so you can modify its resources. Remember: you mod at your own risk!
Before we begin, first make a backup of nero.exe and call it nero.exe.bak
**Always make backups: it means if we mess something up, we have a nice fresh copy to go back to.**
You'll also need to download a copy of URSoft's
W32Dasm. W32Dasm is very clean and only needs unzipping to run.
Now, open nero.exe in Resource Hacker, change a string, save, compile and run the .exe. Error message appears. Note what the error message says for future reference. I've noted "file was modified."
Open W32Dasm. To begin, we need to load nero.exe to be disassembled, so go to menu option Disassembler/Open File to Disassemble.. (top right) and select nero.exe.
(Nero is quite big with alot of calls to external dll's so this is going to take some time to load. Be patient.)
Now that it has loaded, some buttons that were previously grayed out will now be functional. You may be thinking "But what is this I am looking at?" You will need to change the default font. Go to menu option Disassembler/Font.../Select Font. I suggest Courier New/Regular/8. You can save this as the default font under Disassembler/Font.../Save Default Font.
You should now be looking at something like this:
Note the two boxes I've highlighted in red. Imported Functions and String Data References. Imports and Strings. These buttons are useful to us as a quick way to find things out.
Click the button for Strings, and a window will appear. For some programs this list is quite short, but for Nero its quite long, too tedious to scroll through, so we'll use the Search function instead. Close the Strings window. Select "Search" from the menu and enter in portion of the string. Earlier I noted "file was modified" from the error message so I will enter that.
You should now be looking at a highlighted line, saying something like:
| * Possible Reference to String Resource ID=04189: "The Nero executable file was modified!"
|
Slowly scroll the window up using the arrow key, what we are looking for is the last instance of an Unconditional Jump, nearest to the string we searched for.
Stop when you've found it. It should look something like this (As I pointed out at the beginning of this tutorial, some of the values are likely to vary depending on what version of Nero you are working with):
| * Referenced by a (U)nconditional or (C)onditional Jump at Address: |
| |:005B4ACF(C) |
| | |
| :005B4AF9   |
39BBC0020000           |
cmp dword ptr [ebx+000002C0], edi |
| :005B4AFF |
751D |
jne 005B4B1E |
| :005B4B01 |
E80408000 |
call 005B530A |
| :005B4B06 |
83F03 |
cmp eax, 00000003 |
| :005B4B09 |
7513 |
jne 005B4B1E |
The values of we want to change are right here. To understand what we are changing and why, we need to learn a little ASM, or assembly language. (Its beyond the scope of this tutorial to cover ASM in full, but hopefully you will find the reference below useful.)
From this reference (thanks Sweet Angel) two functions we are interested in are jne and je:
| Hex |
ASM           |
Meaning |
| EB |
jmp |
jump |
| 90 |
nop |
no operation |
| 75 or 0F85       |
jne |
jump if not equal |
| 74 or 0F84     |
je |
jump if equal |
| 77 or 0F87 |
ja |
jump if above |
| 0F86 |
jna |
jump if not above |
| 0F83 |
jae |
jump if above or equal |
| 0F82 |
jb |
jump if below |
| 0F83 |
jnb |
jump if not below |
| 0F86 |
jbe |
jump if below or equal |
| 0F8F |
jg |
jump if greater |
| 0F8E |
jng |
jump if not greater |
| 0F8D |
jge |
jump if greater or equal |
| 0F8C |
jl |
jump if less |
| 0F8D |
jnl |
jump if not less |
| 0F8E |
jle |
jump if less or equal |
Going back to our search in W32Dasm, we can see from the ASM reference that jne's can have a byte value of 75:
The information we're interested in is in the red box. See the two instances of 75? We need to change these bytes to 74 with a hex editor. Note their addresses in the far left. We can input those addresses directly into Hiew. For the first jne in the example above, the address we would enter is .005B4AFF. If you prefer not to use Hiew you can use your favorite hex editor instead - W32Dasm can give us hexidecimal offsets too. (I recommend Hexplorer as its free and very usable.)
Use the arrow keys to scroll to each line with the jne, you'll notice in the status bar of W32Dasm something like this (again, the addresses will be different depending on which version of nero you are working with):
| Line:885118 Pg 17703 of 29307 Code Data @:005B4AFF @Offset 001B4AFFh in File:NERO.EXE |
To make it clearer I've put the information we want in bold text. Remember the h at the end of 001B4AFFh indicates this is a hexidecimal offset. On entering this Offset (don't include the h) into your hex editor, you should have the cursor on a 75 depending on what kind of hex editor you have. On my version of Nero (Nero Express 6.0.0.27) I only had to change these two bytes, and ZmAn3 found with the latest version of Nero (6.6.0.6) theres only the one instance to change, at address .00628B31.
~Serenity
|