Most attacks on hash functions primarily involve finding collisions, which refers to trying to find two different inputs that produce the same hash output. Therefore, option A (Finding Collisions) is a significant aspect of hash function attacks.
Pre-generating hashes (option B), such as through rainbow tables or other methods, is also a common attack strategy, especially when attackers want to reverse-engineer original values from their hashed representations by checking them against known precomputed values.
While good guessing (option C) can occur, it is generally less relevant compared to the systematic methods of attacks represented by A and B.
Given this analysis, the correct answer would be:
A and B