Straw Dogs

Scriptwriter David Sumner (James Marsden) and his wife, actress Amy Sumner (Kate Bosworth), move to where Amy grew up, in rural Mississippi, to rebuild the house of Amy's recently deceased father and so David can finish a script. David meets Amy's ex-boyfriend Charlie Venner (Alexander SkarsgÃ¥rd) and his friends Norman (Rhys Coiro), Chris (Billy Lush), and Bic (Drew Powell), whom he hires to fix a roof. David also meets former football coach Tom Heddon (James Woods), whose 15-year-old daughter Janice (Willa Holland) is attracted to a local man with an intellectual disability, Jeremy Niles (Dominic Purcell). Heddon often bullies Jeremy and believes Jeremy is stalking his daughter.
Charlie and his friends begin taunting David. The taunting escalates into harassment as they make crude remarks towards Amy and play loud music to annoy David and impede his work on his screenplay. After a jog, Amy goes upstairs to take a bath, then opens the bathroom window and disrobes provocatively in clear view of the workmen.
Someone enters the house and strangles the couple's cat. David is hesitant about confronting the workmen about the cat, but attempts to question the men. Charlie and his friends deny everything.
While David is out in the forest in order to hunt deer together with the workmen, Charlie forces his way into the house and rapes Amy. Afterwards, Norman rapes Amy while Charlie watches reluctantly.
When David returns, Amy says nothing about the rapes. David fires the men the next day. At Amy's insistence, they go to a local football game. Janice persuades Jeremy to enter an empty locker room and attempts to give him oral sex. Heddon has noticed her absence and begins looking for her, and as he approaches, Jeremy, scared of Heddon discovering them, holds his hand over Janice's mouth to silence her, accidentally smothering her to death. He runs away just as Heddon informs Charlie and his friends of Janice's disappearance and guesses that Jeremy has done something to her.
Amy begins to flash back to the rapes and asks David to take her home. On the way, she tells him she wants to return to Los Angeles, surprising him and causing him to accidentally run over Jeremy. David and Amy take him to their home and call an ambulance. Charlie and Norman overhear the ambulance call on a police scanner, and tell Heddon. He goes to David and Amy's house with Charlie, Norman, Chris and Bic. The Sheriff arrives, but Heddon kills the Sheriff at the front door then attempts to enter the house. David takes Amy and Jeremy upstairs to the bedroom and prepares to fight off the men.
When Chris attempts to enter through a window, David nails his hands to the wall with a nail gun, his throat fatally exposed to broken glass. When Heddon tries to follow, David burns his face with hot oil. Heddon and Charlie ram down one of the house's walls with Charlie's pick-up truck but Charlie is knocked unconscious. Meanwhile, David overpowers Heddon and Heddon accidentally shoots himself in the foot. David shoots Heddon then beats Bic to death with a fireplace poker. Upstairs, Amy and Jeremy are attacked by Norman, who has climbed in through a window. Norman is attempting to rape Amy again when David and Charlie appear. Charlie and Norman draw on each other when Norman threatens to kill Amy. Amy shoots Norman, Charlie assaults and disarms her, then David jumps him.
David and Charlie fight, and David ensnares Charlie's head in a bear trap. As sirens are heard, David says "I got 'em all".

Question: Who raped Amy?
Answer: Charlie