Alfonso Soriano homered off Mark Buehrle leading off the game and Aramis Ramirez, activated from the disabled list earlier in the day, added a solo shot two outs later.
Zambrano (8-6) took over from there, striking out seven of his first nine batters and finishing with 12 in all for the fourth time in his career. He allowed three hits and one walk in eight innings, striking out the side in the first and third.
He improved to 3-1 in his last four outings _ in his previous start he lost 1-0 to San Diego after taking a no-hit bid into the eighth inning.
Zambrano's lone mistake on Friday was Paul Konerko's solo homer with one out in the seventh. A.J. Pierzynski followed with a single, but Jermaine Dye grounded into a double play.
Ryan Dempster pitched a perfect ninth.
Buehrle (4-4) settled down after a rough first, allowing two runs and four hits in seven innings. He struck out four and did not walk a batter.
The White Sox (29-40) dropped 11 games under .500 for the first time since May 29, 2001. Not that the Cubs (33-39) are much better.
Soriano started the game by sending a high, arching shot out to left on a 3-2 pitch. The ball landed an estimated 424 feet away for his 13th homer _ it was his fourth leadoff shot this season and the 36th of his career.