Ben Chase (Gary Oldman) is a sleaze bag lawyer who defends accused serial killer Martin Thiel (Kevin Bacon). After Martin is released, the murders start again. Martin mistakenly believes that Ben is like him, and plants the mutilated body of a victim where Ben will find it. Ben is horrified, and decides that he will make sure Martin pays for his crimes. Ben tries to give hints and help to the police investigators. However, Martin has learned too much from Ben and outsmarts the police every time. For example, Ben tips the police to a secret tunnel at Martin's home, but Martin tricks the police into entering without a warrant, so the evidence is not admissible.
Ben meets Martin's mother. Martin's mother is an abortionist. When Martin was 8 years old, Martin learned that his mother wanted to get an abortion with him, but was prevented from doing so. Martin has hated his mother since learning this. Ben suspects Martin is killing women who go to his mother. Ben's girlfriend sneaks in late at night and sees the records verifying that all the victims had been to Martin's mother. Martin tries to kill the girlfriend, but Ben arrives in time to save her. Martin goes home and kills his mother, so she can not talk to the police.
Ben goes to the criminal justice building, and talks with prosecutors about how they can get evidence to convict Martin. Martin shows up with a gun, and takes Ben hostage in the same court room where Ben had originally gotten Martin acquitted. Martin says that he hates these women and has the courage to kill what he hates, but Ben does not have the courage to kill Martin even though he hates Martin. Martin gives Ben the gun, but Ben will not shoot Martin. Martin lunges to attack Ben, and is shot dead by a police woman.
Thanks Joseph C!