I think you should treat the numbers as arrays of signed characters. Take the ordinary manual multiplication method and implement it on this data layout. For example, your algorithm will start with the least significant (rightmost) digit and multiply it by each digit in the other number, summing and computing carry as it goes.

You can also consider using Karatsuba's Algorithm, you'll find a lot on internet for Karatsuba's Algorithm