I am using ollydbg and a Hex editor. I confirmed that once the application is edited in any way it behaves different than normal.
My first thought was that the file is checking the checksum value so I looked at the intermodular calls in olly and did not see anything about checksum. I was specifically looking for MapFileAndCheckSum
But I am trying to reason this out, I am thinking that a checksum value has to be hard coded in the file so it can be compared to the actual checksum. So I am wondering from the developers point of view how is it possible to get the checksum value to be hard code when the application is not complete/compiled
Which brings me to the question. What ways is there for an application to detect that it has been modified?
------- EDIT ------- Additional Information ------
I have been doing some testing and I have to say I'm baffled as to where the checksum value is being stored.
- There are no connections to the internet.
- Only one dll comes with the application (I extracted the installer files manually) the dll file is old and was last modified prior to the application. I even compared it to an earlier version of the application that did not have this checksum check and the dll is identical.
- I taught that maybe the checksum value would be entered in the registry by the installer so I extracted the .exe and .dll to a separate computer that has never used the installer. Changes are still being detected!
- It is definitely a checksum test, as I have changed a single byte of padding by from 00 to 20 and the change is detected. If I edit back to 00 to application performs normally.
So now I am wondering would it be possible to calculate what the checksum is going to be before entering the hard coded checksum value? I do realize that the actual checksum value will change when changing the hard coded checksum value. I want to know if there is any method to predetermine a checksum value when hard coding and finding a match. Seems impossible but I cannot think of any other means considering the situation.
user3262342wrote, try to check whether the application is reading its own file from disk, break on CreateFileA(W) or NtCreateFile and continue from there. – PhoeniX Feb 11 '14 at 13:35