views:

30

answers:

3

I'm trying to reverse-engineer a program that does some basic parsing: text in, text out. I've got an executable "reference implementation" and the source code to what must be a different version, since the compiled source output != executable output.

The process creates and deletes temporary files very quickly in a multi-step parsing process. If I could take a look at the individual temporary files, I could get some great diagnostic data to narrow down where my source differs from the binary.

Is there any way to do any of the following?

  • Freeze a directory so that file creation will work but file deletion will fail silently?
  • Run a program in "slow motion" so that I can look at the files that it creates?
  • Log everything that a program does, including any data written out to files?
+1  A: 

You didn't mention what OS you're doing this on, but assuming you're using Windows...

You might be able to make use of SysInternals tools like Process Explorer and Process Monitor to get a better idea of the files being accessed. As far as I know, there's no "write-only" option on folders. For "slowing down" the files, you'd just need to use a slower computer. For logging, the SysInternals tools will help out quite a bit. Once you have a file name(s) that are being created, you could try preventing their deletion by opening the files in a stream from another process. That would prevent the system from being able to delete them.

Agent_9191
+1  A: 

There are two ways to attack this:

  1. Run various small test cases through both systems and notice the differences. Since the test cases are small, you should be able to figure out why your code works differently than the executable.

  2. Disassemble the executable and remove all the "delete temp file" instructions. Depending on how this works, this could be a very complex task (say when there is no central place where it happens).

Aaron Digulla
+1  A: 

Running a tool like NTFS Undelete should give you the chance to recover the temporary files it's creating then deleting. Combine this with ProcMon from Sysinternals to get the right filenames.

CodeByMoonlight
Good ideas all, but this one helped me out the most. Thanks
Ryan