Baba might well be held up as someone who is good given his penchant for helping the people around him and his determination to fight for what he believes is right. Though he clearly made mistakes, they rarely had anything to do with hurting other people and he so often went out of his way to help others even when some looked down on him for it.
Amir might be one who could be "in the middle." He is a good kid but also selfish, and at the moment when the most courage is required he is unable to try to help Hassan and opens up a chasm between them that eventually results in Hassan being sent away.
Hassan can be held up as someone who is good. He is always thinking of others and serving others even when it is not required. He never reveals what happened and goes along with what Amir wants even when it is wrong.
Assef is easily placed into the bad category given the fact that he is a sociopathic, homicidal maniac driven by hatred for anyone or anything that he does not approve of or that is different from him.
I would say Amir was good after the rape of Hassan. As an adult he was very good. He was a good husband to Soraya. He was always there for his father. He also rescued Sohrab. He only made one major mistake as a child. I would say he was better than his father. He was better than Asseef. He was also better than Rasheed in a thousand splendid suns. He passed a few tests that Rasheed did not pass. He also was good when he stood upto general Taheri about Sohrab. I think that General Taheri his father in law was basically bad with the way he treated women. He was a minor version of Rasheed in a thousand splendid suns.