The Brazilian, who swapped Porto for Zenit last year, scored the leveller soon after Lucho Gonzalez had given the visitors the lead midway through the first half.
Hulk then saw a tame second-half penalty saved as the Russian side were held to a point that keeps them in second place in Group G and above Paulo Fonseca's men.
The Portuguese side were looking to make amends for their defeat to Zenit in their last European outing as well as a disappointing 1-1 domestic draw at Belenenses over the weekend.
They came flying out of the traps, dominating possession and pinning their opponents firmly inside their own half.
Josue forced Zenit goalkeeper Yuri Lodigin to push away his effort from just outside the area, with Silvestre Varela heading wide from the subsequent corner.
Lodigin saved his own blushes after saving Danilo's effort from distance at the second attempt, having spilled the ball at first.
The visitors continued an all-out assault on the Zenit goal and it came as no surprise when they took a 23rd-minute lead, shortly after Varela had blazed over from a decent position.
In Porto's next attack, Danilo's inch-perfect cross from the right allowed Gonzalez to leap above Cristian Ansaldi and head in to the net at the far post.
Despite dominating, Zenit levelled proceedings against the run of play five minutes later after some slack defending from Porto.
There looked to be no danger when Roman Shirokov's ball rolled into the area, but a mix-up between Porto defenders Eliaquim Mangala and Alex Sandro allowed Hulk to steal in, round goalkeeper Helton before slotting home.
The 27-year-old, who scored 54 goals in 99 league games for Porto between 2008 and 2012 pointedly refused to celebrate his equaliser, however.
Porto were undeterred and continued to enjoy the upper hand until half-time, although the closest they came to adding a second was when Lodigin made a reaction save after Josue's 35-yard free-kick had evaded everyone in the area.
Their failure to nudge in front should have come back to haunt them after Zenit were awarded a penalty seven minutes after half-time when Nicolas Otamendi handled Viktor Faizulin's cross in the area.
However, Hulk's penalty lacked power and was poorly placed, allowing Helton to easily deny his former team-mate.
Zenit were a lot more comfortable on the ball as opposed to the opening 45 minutes, but Porto were still proving formidable in attack, with Varela's shot blocked by Nicolas Lombaerts, while Lodigin made a fine save from Jackson Martinez's strike.
The Portuguese champions were vulnerable to the counter-attack, however, and Helton had to be at his best to keep out a strike from substitute Andrey Arshavin, who had been played through by Oleg Shatov's wonderful flick.
Luciano Spalletti's men looked the stronger team in the final minutes but they had to be content with a point, despite Ansaldi spectacularly volleying just wide from distance with Helton well beaten.