for i inrange(width): for j inrange(height): tr1,tg1,tb1 = flag1.getpixel((i,j)) tr2,tg2,tb2 = flag2.getpixel((i,j)) image.putpixel((i,j),(tr1+tr2,tg1+tg2,tb1+tb2))
image.save('flag.png')
空白图片,stegsolve查看
拿到 flag
外星信号 Ultra
图片末尾提示:
翻译一下是用苹果设备查看图片显示不同,应该是iDot png隐写
Apple 的 PNG 解码器有一个私有的功能:通过 iDOT 进行并行解码,而其存在一个 BUG 或者说设计不严谨的地方
from Crypto.Util.number import * import gmpy2 N = 11353462911659482113796537452147300926058319193410149519981293344545095869273822230953023429933867057788424748612924709948861133348747189832397098293375764081790597820832766019459982124608221261607650511397189714784056313299551817534654742174637343804047231232241364089289257964139944018168155573510980260130960125621306919129390727418251555408239157881843225479158237727969284756513805560836003067115936987292751142016846824024901372913577548599978847860303760659677939193351221798796221804998385095596961591093782162020167439948314063423204757741472210008357888290333170757522814768955797167174930629344666183821709125207308525214263797625499327774875517941662523738827284067304929843343871569023248931759251331056863803201916908875256305736551124386988450879913404808869417817363510363373493093139804372817316366990863872781848240937733101758906281563575413208242901819275013539759479445299894840593737457394207415306989963459347994339058584475533786264375696277942369426844216474662828121334192775480587740071776080691560820922589751966526187341539255661442517814436944781114380877453502120302247547983180059537220197840688418898830571100216529994749464486853212098379822895838120836692532849021875818941979891105837972315129986493 c = 4598142980961588614870523368474306387497434303187254927457676265871592231881441246092917258758503624096206624791819316260705668875764048374035213672138915662719877795747211803584360349151646264274341548770123417923229997374982757324397146348908248704115062655445309042278469908831635522908894918382861563762003781223067210316435231509359575745828484177064520417698784251000631935361105284031848497200100561554984257265297077176545082009710252149167922123535451717313588884862304552508619154651546264753192894485610685402565486840707709012364088270364787452130288293053818329408433642977483320525542674345001200312959241276966417288770125166249156122793451000156544563900072606708005901579238109781720805374132101363788622676000360345128868422751829657184702090198806325558601552728909032627597688702884484377994243047876011323705947461799669488497113582621976154428096812072612119422667669321557427061098391558516935530727451865151957035156100271891977310043273298085691419672779758845492888551759393825925266903887942750052210444677062600227218953570162640164207895883301679126000642791876167281967081725589618329012476305157314322062703122134504285038691938912783524944917966615556902938825590064899700174139252191278691620663355243 e=0x10001 import gmpy2 a = 2 n = 2 whileTrue: a = pow(a, n, N) res = gmpy2.gcd(a-1, N) if res != 1and res != N: q = N // res print("n=",n) print("p=",res) print("q=",q) break n += 1
import gmpy2 from Crypto.Util.number import long_to_bytes q = 113787980601251745826843877382579552614648689857848904057572059325440944465611640163147176996118167635079365778546506624499634252375260044431411000949865475313224316650494893792164068973839036934191662707067777255376224926590339831443832304095551258919095844512924220523460823214952758504127950314742622077043 p = 105093597128835439479657061236111691975605383355129363600351480053850707028369723338526666770974606911527798737164915958103082313581695026637245098382021718070694325314274439104912172972661654273602405666361761211778169903604127876997716201210879207713092042764119984813765613769539486499321202923341006511223
e = 65537 c = 10602368727908312334676265892975307612231309319511015017178654564186172749979627738052483995870388025140270600159107954524376993980949045647370337520644299969292550299798129717198074042121264370311983929042594290226321121639097714569204574387632530578153623781118813035223106106430716561113649761388347227207862016222328885951443891878767280730866193302995220736592745950808566359750940949520997722511969961743175777398751576595421456387998438214806188903746057855596476380404784738717555105866919649086601807350830108805521710188675565963765427930594177874353694184805979235854934856122125278853834603734029710968348
# n = 40600296529065757616876034307502386207424439675894291036278463517602256790833 n = q*p # print(n) d = gmpy2.invert(e, (p -1) * (q-1)) print("d=",d) m = pow(c, d, n) print("m=",m) print(long_to_bytes(m))