Recover boolean vector from dot products
Here is an variant of the idea 1 in the question, where a factor of 2 is used to replace the original factor of 9.


Let $v=[2^0, 2^1, 2^2, 2^3, \cdots, 2^{62}, 2^{63}, 0, 0, 0, \cdots]^T$. Obtain $b^Tv$, which will determine the first 64 entries of $b$.
Let $v=[0, 0, 0, \cdots, (64 \text { zeros}),  1, 2, 2^2, 2^3, \cdots, 2^{62}, 2^{63}, 0, 0, 0, \cdots]^T$. Obtain $b^Tv$, which will determine the next 64 entries of $b$.
Let $v=[0, 0, 0, \cdots, (128 \text { zeros}),  1, 2, 2^2, 2^3, \cdots, 2^{62}, 2^{63}, 0, 0, 0, \cdots]^T$. Obtain $b^Tv$, which will determine the next 128 entries of $b$.
And so on, until we have determined all entries of $b$. There may be less than 64 positive numbers in $v$ in the last round.


The above scheme is the best possible if the number of effective bits in $b^Tv$ is 64 and we have no prior knowledge about $v$ except the number of its entries. This can be seen easily from information theory, as each query against the black box can provide at most 64 bits of information.