TL; DR:
Bob cannot force a win on 12, but has a nonlosing strategy.
We use a notation X-> Y to indicate that a move from number X to number Y is possible, and X->Win to indicate that the current player can force a win if the current number is X. Moving to a winning move is a losing move, as then the other player can win. Similarly, we have X-> Lose.
With this, we build a partial game tree. Formatting was a bit of an adventure, so... sorry for the mess?
Base cases:
Based no Gareth's (correct) answer, we have
1->Win
2->Lose
3->Win
4->Win
5->Lose
6->Win
7->Lose
8->Win
9->Win
10->Win
11->Win
14->Win
Turn 1:
The cubes and squares less than 12 are: 1, 4, 8, 9
We can infer the moves
12->11
12->8
12->4
12->3
All losing moves, which can be disregarded (as a rational player will ignore them)
Also, 12-> 24, which we will eventually find forces the next player to lose or enter a loop.
Turn 2:
Carrying on in this fashion to build a more complete game tree,
24-> 8 (Losing)
24-> 15 (Losing- see below)
24-> 16 (Losing, next player can remove 16)
24-> 20 (Losing, see below)
24-> 23 (Losing- see below)
24-> 48 (Loops to self or 12 in 2 moves, or to 12 in 1 move)
As all these moves are losing except for 48, the active player must move to 48
Turn 3:
15-> 7 (Win- Having found a winning move, we can infer that 15 is a winning position and terminate this branch)
20-> 19 (Winning- see below)
23 -> 7 (Winning)
We can subtract 1,4,8,9,16,25,27, or 36 from 48, allowing move
48 -> 12 (Loop, changing turn parity)
48 -> 39 (Loops to 12 in 1 move)
48 -> 40 (Loops to 24 in 1 move)
48 -> 44 (Losing)
48 -> 47 (Losing)
Turn 4:
19-> 3 (Losing)
19-> 10 (Losing)
19->11 (Losing)
19-> 15 (Losing)
19 -> 18 (Losing- see below)
19 -> 38 (Losing- see below)
All moves here are losing, so moving to 19 is a Winning move.
21 -> 5 (Winning)
23 -> 7 (Winning)
32 -> 7 (Winning)
39 -> 12 (Loop, retaining player parity)
40 -> 24 (Loop, changing player parity)
44 -> 17 (Win)
47 -> 5 (Win)
Turn 5:
We can subtract 1, 4, 8, 9, 16, 25, 27, or 36 from 38, allowing move
38 -> 2 (Winning)
18-> 2 (Winning)
13-> 5 (Winning)
15-> 7 (Winning)
17-> 1 (L)
17 -> 8 (L)
17 -> 9 (L)
17 -> 13 (L)
17 -> 16 (L)
17 -> 34 (L)
Turn 6:
34-> 7 (W)