Shore and Warden's The Art of Agile Development is a great book, with a section on "Applying XP to an Existing Project" (in chapter 4). Projects get worse over time unless you fight hard: overcoming such technical debt is hard and will make it increasingly difficult to ship acceptable releases. The only solution is to reduce the rate at which you deliver new features, and spend the time saved improving test coverage and refactoring.
Usually, projects don't have much test coverage, and don't have the option of running a 10 minute automated script that will build and exercise your code pretty thoroughly. Instead, most code is structured so that it is hard to test. The best option then is to add simple test coverage where you can, while starting to refactor with a view to making the code abstracted such that it is easier to test.
Though the team will need to spend time improving the code to make it clean and testable you probably won't be able to stop delivering for the time it would take "finish" the cleanup. So, you have to do it step by step while also adding new features. That's okay, pick the worst areas first, and don't expect obvious benefit right away. Keep at it, because eventually you'll get there. Don't listen to the voices that say all large projects are bad.
In short, spend a little time each week tidying up, and make sure the code is better next week than it is this week.