早上刷某乎,看到这个: 怎么找到一个程序员做男朋友? ,顺着链接来到 这里 。
虽然啥也看不懂,但是看起来蛮好玩的样子:
begin 777 portal.bin M(R!796QC;VUE#0H-"B,C($ME>0T*#0I24T$@4'5B;&EC($ME>3H@*$XL(#<I M#0I.(#T@,C,S("H@30T*32!I<R!T:&4@9W)E871E<W0@9F]U<BUD:6=I="!P M<FEM92!T:&%T(&UA:V5S($X@96YD('=I=&@@,C,S#0H-"B,C($5N8W)Y<'1E M9"!!=61I="!142!G<F]U<"!N=6UB97(-"@T*5&AE($%U9&ET(%%1(&=R;W5P M(&YU;6)E<B!I<R!E;F-R>7!T960@=VET:"!T:&4@*BI24T$@4'5B;&EC($ME M>2HJ+@T*#0I@8&`-"D-/3D-!5"A$14-265!4*#$Y-S,W,BDN=&]3=')I;F<H M*2P@1$5#4EE05"@S,S,P-SDI+G1O4W1R:6YG*"DI#0I@8&`-"@T*(R!#05!4 M0TA!#0I5<V4@=&AI<R!G:7-T(')E=FES:6]N(&`W9#(S939E.3DY-&)B-F9A M93@W-&1A8C,U930V9F0W-6(Y9&0Q-6)E8"!R97-U;'0@87,@0T%05$-(02X- !"@`` ` end
搜了一下找到了 原帖 ,发现原来出来好久了已经,真是信息太闭塞。
好久没玩 CTF,手有点痒,所以就支起摊子开动了。
开始一头雾水,完全不知道该干啥,盯着这一坨字符串看了半天,旁边一同事说了句每行开头都是 M,然后就搜了下 每一行都是M开头
,还真找到了 这个 ,真是大千世界,无奇不有:
(1)UUENCODE编码:这是很早以前在UNIX上使用的编码方式,其主要特征是:编码以BEGIN开头,以END结尾,并且每一行字母都以英文字母M开头。
随便找了一个 UUENCODE在线解码 ,扔进去之后就有能看懂的东西了:
## Key RSA Public Key: (N, 7) N = 233 * M M = 9001 N = 2097233 (2097233, 7) M is the greatest four-digit prime that makes N end with 233 ## Encrypted Audit QQ group number The Audit QQ group number is encrypted with the **RSA Public Key**. CONCAT(DECRYPT(197372).toString(), DECRYPT(333079).toString()) # CAPTCHA Use this gist revision `7d23e6e9994bb6fae874dab35e46fd75b9dd15be` result as CAPTCHA.
哦,原来是RSA,虽然以前没在搞懂这玩意,但是还是了解一点,在加上强大的 Google,先看看原理:
轻松学习RSA加密算法原理
先解决题目里 M 的问题,说是使得 N 尾数是 233 的最大四位数,一个脚本就搞定:
for i in range(999, 10000): n = 233 * i if n % 1000 == 233: print i
然后就是用 RSA 解密了,当然不用自己动手了,找到这个:
RSA Python 实现
改了下原来的 keyGeneration 函数和主函数:
def keyGeneration(keyLength): p = 233 q = 9001 n = p * q fn = (p-1) * (q-1) e = 7 d = computeD(fn, e) return (n, e, d) #Unit Testing (n, e, d) = keyGeneration(1024) M1 = decryption(197372, d, n) M2 = decryption(333079, d, n) print M1 print M2
就得到群号了,这里就不贴了,233。
不过好像还没完,要验证码才能加入,又是个坑。
# CAPTCHA Use this gist revision `7d23e6e9994bb6fae874dab35e46fd75b9dd15be` result as CAPTCHA.
开始没想,以为就是 7d23e6e9994bb6fae874dab35e46fd75b9dd15be
, 提交之后就给我拒了,拒绝理由还给我个 400 Bad Request
, 挺专业!
仔细看了下发现好像是 git commit 的 hash,所以可能他的意思就是这次提交的代码的结果,clone 了他的gist,查了下 log 发现还真有这次提交,reset 过去之后就是 Roman Hitman
,还好刚才在 Google 的时候发现某大神以前写的 脚本 ,跑了一下得到了这些东西:
## Questions 1. The answer to life, the universe, and everything? Google 之 2. The tenth Fibonacci number? Google 之 3. `CONCAT(Date.FromKeyword("GFW sensive day").Format("MMDD", "ISO-8601"), Date.Now.Format("DDmm", , "ISO-8601"))` # Join US QQ Group: * Group number is **CONCAT(D321 O1454 B10101110)** * Verify CAPTCHA is `CONCAT('K', ANSWER(Q1), ANSWER(Q2), ANSWER(Q3))` QQ group number: 321812174 QQ verify code: Z425506040241
一激动赶紧把验证码扔过去测试了一下,被拒绝了。
看了下 Date.Now.Format
和 now 有关以为得自己拼接,然后拿 php 弄出来这个(这里有个小插曲就是斐波拉契数列的第10个数是55,不是34,详细见百度百科黑体加粗提示):
K4255JunJunSunSunWedWed0303
扔过去还是不对,就读了下 RomanHitman 源码,才发现是这个作者把开头的字母换成了Z,估计是想留个坑给别人吧,也怪我不仔细,改过了再跑一下就好了。
终于看到了Accept。
然后,我就默默的跑来写攻略的,果然是应该注孤生的。
PS:看了下群相册,居然还有什么终极三问,因为我也不知道同时掉水里该救谁,所以还是退了吧!
嗯,至此,所有的坑都踩完了,感觉心好累。
另外虽然觉得这么写出来可能不太好,但是我觉得既然拿出来浪费我一天时间,那我就只能对不住了!