Haskell, 3535 41 bytes
a#b|all(`elem`[1`elem`[0..99])[a,b,a*b]=a*bb]=mod(a*b)$1+99
Example usage: 3#4
returns 12
, while fake numbers like 3.5#4
, 3#400300#4
and 3#40(-3)#4
all yield the error non-exhaustive pattern in function #
. Non-fake inputs whose product would be greater than 99 result in the product modulus 100.
Edit: Thanks to Jonathan Allan for pointing out that I initially missed a part of the challenge.