Fatti:
Fatti:
A. A seguito di un controllo eseguito il 4 novembre 2002 presso la F._ SA, la Cassa di compensazione dell'industria svizzera metalmeccanica ha proceduto, mediante decisione 18 dicembre 2002, a una tassazione d'ufficio - riferita a ripresa di salario di fr. 213'857.55 per l'attività svolta da B._ nel 1997 - fissando in fr. 33'037.50 i contributi AVS/AI/IPG/AD (interessi di mora compresi) dovuti dalla società per il periodo dal 1° gennaio al 31 dicembre 1997.
A. A seguito di un controllo eseguito il 4 novembre 2002 presso la F._ SA, la Cassa di compensazione dell'industria svizzera metalmeccanica ha proceduto, mediante decisione 18 dicembre 2002, a una tassazione d'ufficio - riferita a ripresa di salario di fr. 213'857.55 per l'attività svolta da B._ nel 1997 - fissando in fr. 33'037.50 i contributi AVS/AI/IPG/AD (interessi di mora compresi) dovuti dalla società per il periodo dal 1° gennaio al 31 dicembre 1997.
B. Contro il provvedimento amministrativo la F._ SA, rappresentata dall'avv. Stefano Pizzola, è insorta con ricorso al Tribunale delle assicurazioni del Cantone Ticino, facendo valere che la persona in questione aveva svolto le sue mansioni a titolo indipendente, con fatture emesse dalla O._ di B._, escludendo pertanto qualsivoglia rapporto di dipendenza con la società.
Con giudizio 27 ottobre 2003 i primi giudici hanno respinto il ricorso, ritenendo che, benché la O._ fosse iscritta a registro di commercio, l'attività svolta da B._ per l'insorgente fosse di carattere dipendente per il fatto che l'interessato non aveva altra fonte di entrate e nel caso di mancato pagamento da parte della società si sarebbe trovato nella stessa situazione di un dipendente cui non viene versato il salario.
Con giudizio 27 ottobre 2003 i primi giudici hanno respinto il ricorso, ritenendo che, benché la O._ fosse iscritta a registro di commercio, l'attività svolta da B._ per l'insorgente fosse di carattere dipendente per il fatto che l'interessato non aveva altra fonte di entrate e nel caso di mancato pagamento da parte della società si sarebbe trovato nella stessa situazione di un dipendente cui non viene versato il salario.
C. La F._ SA, sempre assistita dall'avv. Pizzola, interpone ricorso di diritto amministrativo al Tribunale federale delle assicurazioni, al quale chiede l'annullamento del giudizio cantonale. Secondo l'insorgente non vi sarebbe stata dipendenza economica di B._, perché egli aveva potuto svolgere liberamente la sua attività lavorativa. Dei motivi si dirà, per quanto occorra, nei considerandi.
La Cassa opponente propone la reiezione del gravame, mentre B._, interpellato in qualità di cointeressato, e l'Ufficio federale delle assicurazioni sociali hanno rinunciato a determinarsi.

Diritto:
Diritto:
1. 1.1 La presente vertenza concerne la determinazione e la pretesa di contributi paritetici e non già l'assegnazione o il rifiuto di prestazioni assicurative. Il Tribunale federale delle assicurazioni deve pertanto limitarsi ad esaminare se il giudizio di primo grado abbia violato il diritto federale, compreso l'eccesso o l'abuso di potere d'apprezzamento, oppure se l'accertamento dei fatti sia manifestamente inesatto, incompleto o avvenuto violando norme essenziali di procedura (art. 132 OG in relazione con gli art. 104 lett. a e b e 105 cpv. 2 OG).
1.2 Pur essendo entrata in vigore il 1° gennaio 2003, la legge federale sulla parte generale del diritto delle assicurazioni sociali (LPGA) del 6 ottobre 2000, che ha apportato numerose modifiche nei diversi settori delle assicurazioni sociali, non è applicabile ratione temporis alla presente procedura, il giudice delle assicurazioni sociali dovendo applicare le norme in vigore al momento della realizzazione dello stato di fatto che deve essere valutato giuridicamente o che produce conseguenze giuridiche (<ref-ruling> consid. 1.2).
1.2 Pur essendo entrata in vigore il 1° gennaio 2003, la legge federale sulla parte generale del diritto delle assicurazioni sociali (LPGA) del 6 ottobre 2000, che ha apportato numerose modifiche nei diversi settori delle assicurazioni sociali, non è applicabile ratione temporis alla presente procedura, il giudice delle assicurazioni sociali dovendo applicare le norme in vigore al momento della realizzazione dello stato di fatto che deve essere valutato giuridicamente o che produce conseguenze giuridiche (<ref-ruling> consid. 1.2).
2. 2.1 Nel caso di specie è controversa la questione della qualifica quale dipendente o indipendente dell'attività esercitata da B._ per la società ricorrente nel 1997.
2.2 Nel querelato giudizio, cui si rinvia, la Corte cantonale ha già diffusamente e correttamente esposto come in materia di AVS l'obbligo contributivo di persone esercitanti un'attività lucrativa dipenda, tra l'altro, dal reddito da esse realizzato durante un determinato periodo di tempo con attività dipendente o indipendente (art. 5 e 9 LAVS, art. 6 segg. OAVS). Secondo l'<ref-law> il salario determinante comprende qualsiasi retribuzione del lavoro a dipendenza d'altri per un tempo determinato o indeterminato. Per l'<ref-law> il reddito proveniente da un'attività lucrativa indipendente "comprende qualsiasi reddito che non sia mercede per lavoro a dipendenza d'altri".
Per quanto concerne la qualifica dell'attività esercitata da un assicurato, il Tribunale federale delle assicurazioni ha precisato che gli accordi, le dichiarazioni delle parti, la natura dal profilo del diritto civile del contratto vincolante un assicurato a un datore di lavoro non costituiscono, in materia di AVS, elementi decisivi per stabilire se una persona eserciti un'attività lucrativa a titolo dipendente o indipendente. Di principio si deve ammettere un'attività dipendente secondo l'<ref-law> quando una delle parti, rispetto all'altra, è subordinata per quanto concerne l'impiego del tempo o l'organizzazione del lavoro e non sopporta il rischio economico a carico del datore di lavoro.
Questi principi non comportano comunque, da soli, soluzioni uniformi. Le manifestazioni della vita economica infatti possono assumere forme diverse e impreviste, così che è necessario lasciare alla prassi delle autorità amministrative e alla prudenza dei giudici il compito di stabilire in ogni caso particolare se ci si trovi di fronte ad attività indipendente o dipendente. La decisione sarà determinata generalmente dalla priorità di certi elementi, quali il rapporto di subordinazione o il rischio sopportato rispetto ad altri che militano in favore di soluzioni diverse (<ref-ruling> consid. 1, 122 V 171 consid. 3a, 283 consid. 2a, 119 V 161 consid. 2 e la giurisprudenza ivi citata).
Questi principi non comportano comunque, da soli, soluzioni uniformi. Le manifestazioni della vita economica infatti possono assumere forme diverse e impreviste, così che è necessario lasciare alla prassi delle autorità amministrative e alla prudenza dei giudici il compito di stabilire in ogni caso particolare se ci si trovi di fronte ad attività indipendente o dipendente. La decisione sarà determinata generalmente dalla priorità di certi elementi, quali il rapporto di subordinazione o il rischio sopportato rispetto ad altri che militano in favore di soluzioni diverse (<ref-ruling> consid. 1, 122 V 171 consid. 3a, 283 consid. 2a, 119 V 161 consid. 2 e la giurisprudenza ivi citata).
3. 3.1 Nel caso concreto, la Cassa opponente ha proceduto ad una ripresa salariale di fr. 213'857.55, corrispondenti a fr. 33'037.50 di oneri sociali (inclusi interessi moratori), ritenendo che le prestazioni effettuate nel 1997 da B._ e fatturate dalla O._ alla F._ SA fossero provento di attività dipendente, essendo le mansioni svolte dall'interessato strettamente collegate a quelle della società ricorrente e non avendo inoltre quest'ultimo sopportato alcun rischio imprenditoriale.
3.2 La ricorrente contesta questo apprezzamento. Dopo aver evidenziato come l'attività di B._ presso la O._ presenti caratteristiche appartenenti sia all'attività dipendente che indipendente, pretende che si esaminino gli elementi preponderanti. Fa valere in sostanza che dall'analisi puntuale dell'accordo di collaborazione 30 settembre 1996 da lei stipulato con la O._ risulterebbe in maniera incontrovertibile la prevalenza dei criteri caratteristici di un'attività indipendente. L'insorgente conclude che, essendo il reddito conseguito da B._ nel 1997 già stato oggetto di fissazione dei contributi sul reddito di attività indipendente, la Cassa opponente non poteva riconsiderare le relative decisioni, passate in giudicato, emanate dalla Cassa di compensazione del Cantone Ticino.
3.3 Ora, dall'istruttoria compiuta dai primi giudici, in particolare dalle risposte fornite da B._, è emerso che quest'ultimo era attivo per la ricorrente quale "responsabile esterno per acquisizione di lavori della ditta A._ e responsabile di tutti i contatti prima e dopo la fornitura". Egli percepiva una provvigione del 5% sul fatturato, comprensiva delle spese, ammontanti a circa il 40% del fatturato. L'interessato, che disponeva di un ufficio che ha dovuto arredare nella sua abitazione privata, nel 1997 non aveva personale alle sue dipendenze e quando si recava alla F._ SA poteva usufruire di un ufficio e delle relative strutture. È emerso pure che B._ nell'anno in questione non aveva svolto né la stessa né altre attività per società o persone al di fuori della ricorrente.
Inoltre dalla documentazione agli atti risulta che la Cassa di compensazione del Cantone Ticino ha emesso per B._ tre distinte decisioni definitive di fissazione dei contributi quale indipendente: la prima il 20 febbraio 2002, riferita al periodo dal 1° gennaio al 31 dicembre 1997, la seconda il 28 marzo 2002, per il periodo dal 1° gennaio 1998 al 31 dicembre 1999, la terza il 18 luglio 2002, per il periodo dal 1° gennaio al 31 dicembre 2000, tutte sulla base di un reddito aziendale di fr. 260'000.- nonché dei dati fiscali relativi alla tassazione IFD 1999/2000. Risulta poi che la Cassa opponente con scritto 3 ottobre 2002 ha comunicato all'amministrazione ticinese che B._ era da considerare quale dipendente con riferimento alla documentazione esaminata (lettera di cessazione del rapporto di lavoro e accordo di collaborazione commerciale). La Cassa cantonale di compensazione ha mediante successivo atto 17 ottobre 2002 reso noto a B._ di aver annullato la conferma di affiliazione 16 maggio 1997 quale indipendente. L'amministrazione ticinese ha in seguito comunicato alla Cassa opponente che in base alla documentazione ricevuta risultava in modo chiaro che l'interessato aveva avuto un rapporto di dipendente per gli anni dal 1997 al 2000 con la ditta F._ SA. Emerge ancora dall'incarto che, il 28 luglio 2003, il competente Ufficio di tassazione ha segnalato che il reddito aziendale dichiarato dal contribuente B._ per l'anno di computo 1997, pari a fr. 163'745.- netti dei costi d'esercizio, era comprensivo delle commissioni delle vendite incassate dalla società ricorrente. Infine, la Cassa di compensazione dell'industria svizzera metalmeccanica, per atto 3 settembre 2003, ha precisato che B._ aveva fatturato, tra il 1997 e il 2001, alla F._ SA i seguenti importi: fr. 351'387.65 nel 1997, fr. 574'494.90 nel 1998, fr. 733'786.65 nel 1999, fr. 663'994.10 nel 2000 e fr. 158'509.40 nel 2001, da cui deve essere dedotto che l'interessato ha continuato ad essere un dipendente della ricorrente.
3.4 Orbene, in base a quanto sopra esposto, la tesi ricorsuale non può essere seguita. I diversi elementi risultanti dal caso concreto indicano che si è in presenza, in materia di obbligo contributivo alle assicurazioni sociali, di un rapporto di dipendenza, anche se limitato sia dal profilo temporale che da quello dell'organizzazione del lavoro.
Va evidenziato che, malgrado B._ potesse gestire la sua attività con una certa libertà quanto all'impiego del tempo e alla gestione del lavoro, come pure nella sua organizzazione - usufruendo di un locale adibito ad ufficio nella propria abitazione, senza però aver dimostrato di avere sostenuto le spese d'arredamento -, egli non ha per contro assunto alcun rischio aziendale ed economico tipico di ogni imprenditore. Infatti, contrariamente a quanto da lui asserito - secondo cui si assumeva il rischio dell'incasso delle fatture (cfr. art. 6 dell'Accordo) perché veniva pagato solo dopo che la ricorrente aveva incassato dalla ditta A._ -, vuol essere rilevato che in sostanza si è trattato di un rischio meramente virtuale, atteso che le fatture emesse nel 1997 sono sempre state onorate dalla F._ SA entro un termine variabile tra 30 e 60 giorni, e meglio:
data emissione fattura importo data pagamento fattura
fatture 03.04.1997 fr. 59'233.70 02.06.1997
fatture 02.06.1997 fr. 40'899.35 25.07.1997
fatture 02.07.1997 fr. 35'633.25 05.09.1997
fattura 27.08.1997 fr. 34'683.45 30.09.1997
fatture 31.10.1997 fr. 88'394.55 15.12.1997
fatture 28.11.1997 fr. 92'543.35 19.01.1998
fr. 351'387.65
Di transenna si osserva che pure per gli anni dal 1998 al 2001 tutte le fatture sono state incassate, a conferma del rischio solo teorico di mancato pagamento da parte della ditta A._, e che il periodo d'attesa per l'incasso era a grandi linee il medesimo, pur essendosi realizzato un incremento non indifferente (fr. 574'494,90 nel 1998, fr. 733'786.65 nel 1999, fr. 663'994.10 nel 2000 e fr. 158'509.40 nel 2001).
Ma vi è di più. B._, per l'anno che qui ci occupa, il 1997, ha dichiarato di avere avuto quale unico committente la F._ SA. Ciò è tanto più credibile se si considera che con lettera 3 maggio 1999 il patrocinatore della ricorrente aveva precisato che i suoi clienti non potevano assolutamente accettare l'assoggettamento quale loro dipendente dell'interessato perché quest'ultimo era un dipendente esterno alla società. Inoltre, con la "cessazione rapporto di lavoro" 30 settembre 1996 la F._ SA aveva asseverato nei confronti di B._ che a seguito della riorganizzazione in atto nell'azienda, per quanto concerneva i reparti produttivi, avor, vendite e i quadri dirigenziali, era stata decisa la sua nuova funzione di responsabile acquisizione lavori reparto turbine. Pertanto la sua attività di dipendente (in organico) cessava con effetto 31 dicembre 1996, per proseguire tramite un accordo di collaborazione commerciale regolarmente approvato e firmato. All'art. 2 di tale accordo è poi stato protocollato che B._ aveva libero accesso allo stabilimento della F._ SA in qualità di responsabile esterno per la produzione dei prodotti acquisiti.
Orbene, ancorché gli atti sopra richiamati abbiano connotazioni talora ambigue, risulta in tutta evidenza che B._ ha continuato in sostanza l'attività di dipendente svolta fino al 31 dicembre 1996 anche dopo il suo passaggio alle dipendenze esterne della F._ SA. Detto altrimenti, l'argomentazione della ricorrente tende a celare il suo chiaro intento di continuare anche nel 1997 ad avvalersi della collaborazione di B._ come in precedenza: in sostanza l'interessato è stato trasformato da dipendente in organico a dipendente esterno alla società non formalmente iscritto in organico. Siffatta conclusione è confortata anche dal fatto che B._ ha dichiarato di aver lavorato nel 1997 solo per la ricorrente.
3.5 Visto quanto precede, il giudizio cantonale querelato, fondato sulla riconsiderazione di decisione passata in giudicato formale, merita tutela.
3.5 Visto quanto precede, il giudizio cantonale querelato, fondato sulla riconsiderazione di decisione passata in giudicato formale, merita tutela.
4. Non trattandosi in concreto di una lite avente per oggetto l'assegnazione o il rifiuto di prestazioni assicurative, la procedura non è gratuita (art. 134 OG a contrario). Le spese processuali, che seguono la soccombenza, devono pertanto essere poste a carico della ricorrente (art. 135 in relazione con l'art. 156 cpv. 1 OG).

Per questi motivi, il Tribunale federale delle assicurazioni pronuncia:
Per questi motivi, il Tribunale federale delle assicurazioni pronuncia:
1. Il ricorso di diritto amministrativo è respinto.
1. Il ricorso di diritto amministrativo è respinto.
2. Le spese giudiziarie, fissate in fr. 3000.-, sono poste a carico della ricorrente e saranno compensate con le garanzie prestate da quest'ultima.
2. Le spese giudiziarie, fissate in fr. 3000.-, sono poste a carico della ricorrente e saranno compensate con le garanzie prestate da quest'ultima.
3. La presente sentenza sarà intimata alle parti, al Tribunale cantonale delle assicurazioni, Lugano, all'Ufficio federale delle assicurazioni sociali, nonché a B._.