I need to reverse engineer some assembly code

I need to write test protocols to describe what the code is doing on a temp sensor board and a timer both of which are controlled by their own micro controller. For anyone who is FDA quality systems savvy it is for a class II medical device. I am pretty new at programming so please bear with me. Ultimately I would like to see the code in human readable form. What is the quickest way (I am not adverse to hiring someone if it is very complex) to be able to write some requirements and tests for the code? I am sorry I don't have all the specifics on the controller but any help would be appreciated.Thanks so much!

This is going to be really complex, as it's not something you just jump into randomly some day with the expectation of pulling back perfectly readable code. Understanding programming concepts is really important, and understanding low level data structures is even more, but you are wanting to go pretty low level.

The basic answer is you will not get 100% correct human readable code as aspects of the code are lost during compilation. If you really need something analyzed it is best to hire someone who has done reverse engineering on embedded systems before. Windows RE Analysts may work, but only a select few as pulling apart embedded systems and microkernels is much different from pulling apart windows binaries.

Phn1x,Thanks so much for your comments. I didn't think it would be easy (hence my cavet). I am familar with C, Java, and HTML. I might have to become the next expert Could you point me to any reources, and perhaps in chronological order if its not too much effort?What software do you recommend I get started with?I know that some information is lost when code is compiled but do you think that would stop me from understanding programming intent (admittedly a pretty vague question)?Thanks again,Coal

It doesnt stop you from understanding it, but there can be tar pits in some areas.

I RE embedded systems everyday and I pretty much use a handful of things:

Primaries: IDA PRO and GDB

aside from that I use a hand few of custom tools and a lot of python.

There really isnt any book I can give you, and there really isnt an order. First I would read the book "Real time concepts for embedded systems" Then I'd read the book for the microprocessor the device runs on.

Aside from that it just takes a lot of doing and a good support team. There is not much info out there on REing embedded systems so having people to goto for questions is essential.

Keep in mind though, RE work is resource intensive. A single person with 5 years of experience, who works on a small device can take between 3-12 months to RE the device depending on the objectives.

Human readable form might be not possible if you mean anything more than ASM code. Usually µCs and embedded devices are programmed in ASM anyway, so when reversing it you might get quite the same which was written by the programmers and not too much compiler-generated code.

If you haven't done anything before in this area, I would recommend hiring a person who have, as well.