I'd say Snape.
He's done so much to improve of himself and nobody notices.
He never gets thanked for his heroic deeds, in fact, some of them he yet again gets severely punished for when he's been punished more than enough already.
He constantly puts himself in danger to protect his students and yet he's still painted as the big bad devil by his haters.
Sure he has done horrible things and he used to be a Death Eater, but even Dumbledore himself pointed out in the Half Blood Prince how much remorse Snape felt for his bad deeds and that he even wanted Dumbledore to give him a second chance (which thankfully he did, bless his soul.)
Was Snape the best person in the world? No.
Was Snape a big bad monster? No.
Is Snape capable of remorse? Yes.
Is Snape capable of doing things that are messed up? Yes.
He might not have been a completely good person, but he's not a bad person either.
Every bit of Severus Snape's deeds have matched him as an Anti-Hero.
Anti Heroes will lack a lot of good qualities and when they do good stuff it's usually for selfish reasons.
Snape has done all of this, he has only changed to protect Harry because of Lily (and Dumbledore), but Draco doesn't remind him anything of a sort of Lily at all, and he even protects him despite Draco being hostile towards him in the Half Blood Prince.
Not only does he protect Draco, but he also comforts Narcissa when she is crying in rage and fear of her son getting hurt.
I don't think a bad person could have any capability of doing all of this.