ありゃま、ちらっと見てみたけど随分複雑そうな問題で^^;
とっさに思いついたので晒してみる。解法が違っていたらスマソ。
#d[rsa](x) = d(x) , e[rsa](x) = e(x) , mod n は略

処理1:
m[x] = d(c[x]) 両辺をe() で括って、
e(m[x]) = e(d(x)) <=> e(m[x]) = x <=> (m[x])^11 = x
となるので、hardnessの小さい順にm[x] を求めて暗号を解く。

処理2:
m[x] * m[y] = d(x*y) , m[x*y] = d(x*y)
<=> m[x] * m[y] = m[x*y] の式変形を利用して、
判明したm[x] を掛け合わせて出来る数の暗号を解く。
例えば、m[3],m[5] が判明しているのなら、
(m[3])^1*m[5] = d(3^1*5) <=> m[3^1*5] = (m[3])^1*m[5]
(m[3])^2*m[5] = d(3^2*5) <=> m[3^2*5] = (m[3])^2*m[5]
(m[3])^3*m[5] = d(3^3*5) <=> m[3^3*5] = (m[3])^3*m[5]
の式変形のように、次々に判明していく。

この方法だと、rank==0がまだ判明していないm[x]をrank!=0に
配分していく処理が定番になってくるのかな?
#RSA暗号についての知識が足りないとやっぱり難しいな、うん。
#全部Whiteに設定して出力するという保険考えたけどダメぽorz