At the moment there are a number of different mocking frameworks. I would recommend that you either take a look at RhinoMock or TypeMock. Both are free for personal / open source projects. TypeMock has a corporate license as well.
RhinoMock forces you to refactor your code for testability (if needed, if you already have testable code you're doing good). This requires more work, but it will leave you with code which is loosely coupled which is a boon in itself. Due to this there are certain constructs you simply can't mock directly with Rhino. However, you can always introduce additional layers of indirection and solve it that way. The bottomline however is this: you need to do some more work, but ultimately the refactoring will benefit your code.
TypeMock on the other hand works by modifying the code on-the-fly (it uses the profiler API to inject code). This allows you to employ mocking for code that isn't otherwise suitable for this type of testing. TypeMock will pretty much allow you to mock anything (except for mscorlib), so it is easy to get started and it works well with legacy code. However, because you're not forced to refactor your code, you don't get the additional benefit of loosely coupled types. Additionally TypeMock will sometimes lead to very weird errors due to the fact that the running code is modified.