England's Alastair Cook scored his maiden Ashes century to force the third Test into the fifth day and stall Australia's unrelenting bid to wrap up the series on Sunday.
Cook held the Australian bowlers at bay for six and a half hours before departing for 116 in the third last over of the day as the tourists clawed their way to 265 for five, but still in deep trouble after starting the fourth day on 19 for one.
With the odds heavily stacked against them chasing down a world record fourth-innings target of 557 required for victory, England's best hopes of keeping their Ashes defence alive are to bat through Monday's final day and salvage a draw.
England's batting had let them down at vital stages in the first and second Test defeats but the tourists showed far more resistance on Sunday on a WACA pitch that had flattened out after 21 wickets tumbled on the first two days.
Cook, who had failed to score a half-century in his five previous innings of the series, underlined England's determination with a fighting hundred just eight days before his 22nd birthday.
The Essex opener survived a series of close shaves, including a dropped catch by Matthew Hayden on 83, to reach the milestone off 257 balls in the last hour of the day before fatigue finally undid him.
Australia's evergreen seamer Glenn McGrath got his wicket with a probing seamer that moved away from the left-hander and caught the edge of the bat on the way through to wicketkeeper Adam Gilchrist.
McGrath collected a second wicket two balls later when he clean bowled nightwatchman Matthew Hoggard for a duck to leave Kevin Pietersen (37 not out) and England skipper Andrew Flintoff (two not out) to endure a torrid final 10 minutes before stumps were drawn and Australia closing in for the kill.
Cook had earlier shared a 170-run partnership with Ian Bell that laid the platform for England's stubborn fightback and frustrated the Australians as they attempt to regain the Ashes they lost year.
Bell, who came to the crease late on Saturday when Andrew Strauss departed for a fourth-ball duck, batted almost four hours for 87, registering his third half-century of the series but again falling short of his hundred.
The 24-year-old hoisted Shane Warne over the ropes for two sixes and raised his 50 when he charged down the pitch and smashed the leg-spinner him to the cover boundary.
But Warne, who bowled 31 overs in the day, including 24 in a row before tea, eventually got his man when Bell drove a catch straight to Justin Langer at short extra cover, lifting his career tally to 696 Test scalps.
Paul Collingwood occupied the crease for 47 minutes for just five runs but failed to repeat his heroics from the second Test in Adelaide where he became the first Englishman in 70 years to make a double-hundred in Australia.
Intent on survival, Collingwood played just three scoring shots off 36 balls before he tentatively pushed a ball from seamer Stuart Clark and feathered a catch to Gilchirst, whose electrifying 57-ball century on Saturday allowed Australia to declare on 527 for five.
Pietersen, who made a hundred in Adelaide and top-scored with 70 in the first innings in Perth, once again proved a thorn in Australia's side, batting through the final two hours but needing to produce a marathon effort on Monday to save his team from surrendering the Ashes after just 15 months.