Mix the chicken with all the ingredients for the marinade. Keep in the fridge for 24 hours.
Drain the chicken well; reserve the marinade.
Heat the cooking oil and butter in a thick-bottomed frying pan.
Add the cardamom, cloves and cinnamon; cook gently for a minute to flavor the oil.
Lay the chicken thighs in the hot oil, skin side down and in a single layer.
Cook over medium heat for two to three minutes or until the skins are lightly browned.
Flip the chicken thighs over and cook to brown the opposite sides.
Pour the reserved marinade into the pan, and add the sliced chilies.
Set the heat to low, cover the pan and cook for about 10 minutes or until the marinade has been soaked up by the chicken thighs.
Add the yogurt and black pepper. Stir to spread the yogurt.
Cover the pan and continue cooking over low heat, flipping the chicken thighs occasionally, for another 10 minutes.
Sprinkle the garam masala on the chicken, stir and cook for another minute.
Scoop out the chicken, sprinkle with torn cilantro and serve your yogurt-marinated chicken garam masala with rice or paratha.