WHCTF-Olddriver

[{"c": 7366067574741171461722065133242916080495505913663250330082747465383676893970411476550748394841437418105312353971095003424322679616940371123028982189502042, "e": 10, "n": 25162507052339714421839688873734596177751124036723831003300959761137811490715205742941738406548150240861779301784133652165908227917415483137585388986274803},
{"c": 21962825323300469151795920289886886562790942771546858500842179806566435767103803978885148772139305484319688249368999503784441507383476095946258011317951461, "e": 10, "n": 23976859589904419798320812097681858652325473791891232710431997202897819580634937070900625213218095330766877190212418023297341732808839488308551126409983193},
{"c": 6569689420274066957835983390583585286570087619048110141187700584193792695235405077811544355169290382357149374107076406086154103351897890793598997687053983, "e": 10, "n": 18503782836858540043974558035601654610948915505645219820150251062305120148745545906567548650191832090823482852604346478335353784501076761922605361848703623},
{"c": 4508246168044513518452493882713536390636741541551805821790338973797615971271867248584379813114125478195284692695928668946553625483179633266057122967547052, "e": 10, "n": 23383087478545512218713157932934746110721706819077423418060220083657713428503582801909807142802647367994289775015595100541168367083097506193809451365010723},
{"c": 22966105670291282335588843018244161552764486373117942865966904076191122337435542553276743938817686729554714315494818922753880198945897222422137268427611672, "e": 10, "n": 31775649089861428671057909076144152870796722528112580479442073365053916012507273433028451755436987054722496057749731758475958301164082755003195632005308493},
{"c": 17963313063405045742968136916219838352135561785389534381262979264585397896844470879023686508540355160998533122970239261072020689217153126649390825646712087, "e": 10, "n": 22246342022943432820696190444155665289928378653841172632283227888174495402248633061010615572642126584591103750338919213945646074833823905521643025879053949},
{"c": 1652417534709029450380570653973705320986117679597563873022683140800507482560482948310131540948227797045505390333146191586749269249548168247316404074014639, "e": 10, "n": 25395461142670631268156106136028325744393358436617528677967249347353524924655001151849544022201772500033280822372661344352607434738696051779095736547813043},
{"c": 15585771734488351039456631394040497759568679429510619219766191780807675361741859290490732451112648776648126779759368428205194684721516497026290981786239352, "e": 10, "n": 32056508892744184901289413287728039891303832311548608141088227876326753674154124775132776928481935378184756756785107540781632570295330486738268173167809047},
{"c": 8965123421637694050044216844523379163347478029124815032832813225050732558524239660648746284884140746788823681886010577342254841014594570067467905682359797, "e": 10, "n": 52849766269541827474228189428820648574162539595985395992261649809907435742263020551050064268890333392877173572811691599841253150460219986817964461970736553},
{"c": 13560945756543023008529388108446940847137853038437095244573035888531288577370829065666320069397898394848484847030321018915638381833935580958342719988978247, "e": 10, "n": 30415984800307578932946399987559088968355638354344823359397204419191241802721772499486615661699080998502439901585573950889047918537906687840725005496238621}]

题目直接给了10个c,n,e,并且e都是一样的,所以可以知道这题是RSA广播攻击,需要利用中国剩余定理去解出m,直接参考别人的代码

# -*- coding:utf8 -*-
import gmpy   # gmpy 是一個在 python 提供類似 GMP 的高等算術的 module,這裡用它算模反元素跟次方根
import json, binascii   # json 是 python 下的 json parsing 工具,binascii 則是用來做 binary 跟 ascii 之間轉換的工具
from functools import reduce

def chinese_remainder(n, a):   # Rosetta Code 上的 CRT Solver code,就只是把中國餘數定理 code 化而已
    sum = 0
    prod = reduce(lambda a, b: a*b, n)
    for n_i, a_i in zip(n, a):
        p = prod // n_i
        sum += a_i * modinv(p, n_i) * p
    return int(sum % prod)
def modinv(a, m): return int(gmpy.invert(gmpy.mpz(a), gmpy.mpz(m)))   # 用 gmpy 算模反元素,回傳轉成 int 的結果


with open("mayday.json") as dfile:  #题目给的n,e,c
    data = json.loads(dfile.read())   # 打開檔案,讀成 json
data = {k:[d.get(k) for d in data] for k in {k for d in data for k in d}}   # 從 [{c1, e1, n1}, {c2, e2, n2}] 轉成 {"c": [c1, c2], "e": [e1, e2], "n": [n1, n2]}
t_to_e = chinese_remainder(data['n'], data['c'])   # 用中國餘式定理解同餘方程組,推出原先的 t^e
t = int(gmpy.mpz(t_to_e).root(10)[0])   # 算 t^e 的 10 次方根(因為 e=10),推回原本的 t
print(binascii.unhexlify(hex(t)[2:-1]))   # 把結果從數字先轉成 hex 再轉成字串

参考资料:https://github.com/pcchou/ctf-writeups/tree/master/2016-tw-edu-ctf/mayday

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 关于诊断X线机准直器的作用,错误的是()。 (6.0 分) A. 显示照射野 B. 显示中心线 C. 屏蔽多...
    我们村我最帅阅读 10,828评论 0 5
  • 我们,总喜欢用偏执 来解读世间所有答案 于是一开始就封闭 却只顾着穷极一生来寻觅 爱情,其实并不遥远 只是心与心的...
    cde93e35ae65阅读 382评论 1 6
  • 白道人士不是真的白,黑道人士也不是真的黑。披羊皮的白道人士比盗亦有道的黑道人士带来的伤害有过之而无不及。做任何事情...
    黄文武阅读 1,063评论 0 3
  • 天上飞过小鸟 天上飘着白云 秋末,午后的太阳光 如此华丽丽的灿烂 却总也有不能晒到的 某个角落 那是最远的地方 那...
    华之山阅读 600评论 2 3
  • 说明:在做以下连接,登陆,注销,注册等操作之前,建议把XMPPStream对象写成一个单例对象,整个程序运行过程中...
    张不二01阅读 280评论 0 0