In a bowl, combine chicken with yogurt, lemon juice, garam masala, turmeric, cumin, chili powder, paprika, and salt. Let marinate for at least 30 minutes or overnight.
Melt butter in a large skillet over medium heat. Add onion and cook until soft, about 5 minutes.
Stir in garlic and ginger; cook for 1 minute.
Add the marinated chicken and cook until browned on all sides, about 8-10 minutes.
Stir in the tomato sauce and bring to a simmer. Cook for 10 minutes.
Lower the heat and stir in heavy cream. Simmer for another 10 minutes, stirring occasionally.
Serve hot with rice or naan. Garnish with fresh cilantro.