I don't know if this is a bug or not, but I've failed at 50%, 60%, 70% hacks enough times in a row (sometimes 5 or 6 times in a row at the same terminal) often enough that I've wondered if the RNG is biased towards failure. I thought I would mention it since it is easier for you to confirm/deny than for me to check by collecting statistics. Of course sometimes I also get lucky at low chance hacks a ridiculous number of times in a row, so this could just be normal random variation.
The naive method I used to use (random() % 100) is biased towards lower numbers because 2^8, 2^16, 2^32 aren't evenly divisible by 100. It's fairer to mask and reroll - probably you already know this, but mentioning it just in case:
int roll;
do {
roll = (random() & 0x7f);
} while (roll > 99); // assuming you want 0..99
Edited to add: To explain a little more - masking with &0x7f (assuming random() itself is fair) will produce output 0..127. Taking the remainder when dividing by 100 will map 0..50 and 100..127 to 0..50, meaning the chance of getting a number less than or equal to 50 is (51 + 28) / 128 = almost 62%, almost a 25% difference from the intended success/failure rates.