In a large bowl, combine the chicken pieces with salt, black pepper, cumin, coriander, turmeric, and garam masala. Mix well to coat the chicken evenly. Let it marinate for at least 30 minutes, or up to 2 hours in the refrigerator for better flavor.
Heat the vegetable oil in a large skillet over medium-high heat. Add the marinated chicken in batches, cooking until browned on all sides, about 5-7 minutes. Remove the chicken from the skillet and set aside.
In the same skillet, add the chopped onion and cook until softened and golden, about 5 minutes. Stir in the minced garlic and ginger, cooking for an additional 1-2 minutes until fragrant.
Add the crushed tomatoes to the skillet, stirring to combine. Bring to a simmer and let it cook for about 5 minutes, allowing the flavors to meld.
Return the browned chicken to the skillet and stir well. Reduce the heat to low and pour in the heavy cream. Add the butter and stir until melted and combined. Simmer for another 10-15 minutes, or until the chicken is cooked through and the sauce is thickened.
Taste and adjust seasoning if necessary. Serve hot, garnished with fresh cilantro, alongside cooked basmati rice or naan.