Ben Day (young, Tye Sheridan, older, Corey Stoll) is innocent of murdering his mother and two sisters.
His mother, in serious financial trouble, was contacted by a serial killer, Calvin Diehl aka "The Angel of Debt." She agreed to let him kill her so her kids could get the insurance money and live with their aunt. However, on the night of the murder, her daughter Debby woke up and saw Diehl. Diehl grabbed a shotgun the Day family had and shot Debby dead, before finishing off Ben's mother.
Ben was in the house that night with his pregnant girlfriend Diondra Wetzner (young, Chloe Grace Moretz, older, Andrea Roth) trying to get some money so they could leave town. When Diondra sees Ben's nosy sister Michelle stole a present meant for her, she strangled Michelle when Ben wasn't looking. With only Libby left alive, Diondra tried to convince Ben to kill his sister and blame all the killings on a satanic cult, as to get the family inheritance. Ben pretends to agree but in the end doesn't do it. His guilt over Michelle's death, and trying to protect his unborn child, led Ben to stay silent for almost 30 years.
The grown up Diondra and her daughter Crystal (Denise Williamson) try to kill Libby (Charlize Theron) when Diondra realizes she is close to the truth. However, Libby escapes their clutches. Calvin Diehl is caught, and Diondra is arrested soon after, though Crystal is at large. Ben meets with Libby, who tells her he can find his daughter. Libby says she will make sure that Crystal will not go to jail, seeing her as just a misguided soul. The two of them make amends, and appear to be ready to start over. With the real killers in custody, Ben is released from prison. Libby prepares to make a new start so she can make peace with the guilt she has felt all her life.