Code War 2017 - Online Round Write-ups - Part 1
Bài đăng này đã không được cập nhật trong 3 năm
Vậy là vòng Sơ loại của cuộc thi Code War 2017 đã chính thức khép lại sau những giờ thi đấu quyết liệt, đầy kịch tính, chắc hẳn đã để lại nhiều trải nghiệm và kỷ niệm thú vị cho các đội chơi. Ban tổ chức xin gửi đến các bạn phần write-up của các bài Code Puzzle lần này, hi vọng sẽ mang lại những gợi ý cho các bạn. Hãy để lại những comments chia sẻ với chúng tôi suy nghĩ, cảm tưởng của các bạn về những bài thi lần này, hay chia sẻ những cách giải mà bạn cho là hay, và ưng ý hơn so với của ban tổ chức nhé
Welcome to Code War 2017 (5pt)
Chẳng có thử thách nào cả, đơn thuần chỉ là copy & paste flag thôi. Eazy point
Flag: CodeWar{good_luck_and_have_fun}
Point Of View (20pt)
Chúng ta có một hình ảnh như này !
Mở ảnh dưới dạng hex, ta thấy đoạn cuối file như sau:
Flag đây rồi: CodeWar{everyone_knows_it}
Messed Up Poem (150pt)
Chúng ta có một bài thơ thế này:
Unknow Title - by Unknow Author - eoms tnihgs aer ettreb ltfe unisda esmo ngefsiel meoc a tlleit oto teal i iwll ellt ouy ohw ot tge eht falg ouy elfw wyaa whne i dnpeeo ym ahnd adn i lliw veern eb ebla ot cahct ouy aanig ni sthi kbacl adn weiht dlwor ouy vgea em culroo btu i cdulo tno velo yuo hwen i ovdel rntehao uyo hsulod atke eth oglwlfoin nlei ohw anc oyu eilsm dan tllsi ookl os ads nhwe oyu tlso ieomnhgst oyu evenr dha osem orwsd rae tetber tefl usnenpko dan tup esceunrord newbtee hetos rodws seom oelvs era ntaem ot eb kferanso fi tafe oudlw vaeh uor pasth sscor edyaosm ew lliw ieslm ot a rntergas adn og no uro wya ni stih ilef ew era ont meatn fro heac rehot ti cdluo ahpepn ni teh tnxe fi yuo eebilve ni rtoaneh dan tvernco lal fo emht ot repup seac waht ahs eomc ot eb i wlil vrnee gteerr eht srmemoie ew aehv adem i lalhs ernve orgfte
Hẳn là text đã được mã hóa bằng cách nào đó, tuy nhiên khá là dễ đọc, bạn có thể nhẩm được đại loại như "some things are better....".
Thực tế, mỗi từ là một anagram
, bạn có thể tự tìm cách decode bằng tay, hoặc có thể dùng http://www.anagram-solver.org để search một câu, rồi dùng câu đó để search bài thơ thì ra bài này:
Apologies/Farewell
Có mấy dòng bị thiếu, ta dịch nốt, kết quả là thế này
you should take the following line
and put underscore between those words
and convert all of them to upper case
Đã rõ ý tưởng, kết hợp lại ta có một bài đầy đủ như sau:
Apologies/ Farewell :- Anounymous Some things are better left unsaid, some feelings come a little too late. You flew away when I opened my hand, and I'll never be able to catch you again. In this black & white world, you gave me color, but I couldn't love you when I loved another. you should take the following line how can you smile and still look so sad, when you lost something you never had. Some words are better left unspoken, and put underscore between those words some loves are meant to be forsaken, if fate would have our paths cross someday, we'll smile to a stranger and go on our way. In this life, we're not meant for each other, it could happen in the next if you believe in another, and convert all of them to upper case what has come to be I will never regret the memories we've made I shall forget.
Yeah, vậy là ta cần lấy dòng how can you smile and still look so sad
này, thêm underscore, và đưa tất cả thành chữ hoa là ok !
Flag: CodeWar{HOW_CAN_YOU_SMILE_AND_STILL_LOOK_SO_SAD}
2D is Hard (200 point)
At a galaxy far far away, I hear that they only have flattened things. Even with rubick. You can ? Can you solve ?
Các bạn ghép về hình Rubik hoàn chỉnh thì sẽ thấy được flag:
Flag: CodeWar{NOTFORBEGINNER}
Let Take A Break (150pt)
The flag has the format of
CodeWar{AAAAAA_BBBBBBBB_CCCCC}
, where:AAAAAA
is the anagram of the name of a street in Hanoi.AAAAAA
contains only letters.BBBBBBBB
can be found here using the regular expression(3[@](.{8})[å][~])
where:@
is the cracked md5 hash578F7ADED41B684CB09D33CA23A57AB1
,å
is the cracked whirlpool hash0bb51f486a79de40bc1cb61b4dfb4c5af4a4f4f82c30cfeb465677468a05416f8a1a9a2e8a90534542f4d1fea26e1790bde241762f7d3c3e046e70c9ba330cb8
,~
is the cracked SHA1 hashbbbd558a572a105c718e04894e9ffa8756ef8402
.@
,å
and~
are animals.CCCCC
is the screenname of a Twitter user with ID380710
??. The SHA256 hash of the whole stringAAAAAA_BBBBBBBB_CCCCC
(all letters are in uppercase) is:753053aeae0d1a3fe33bd2cb31a901069873b8c37127b0d3757dd3a90313b526
.
Đầu tiên, ta có thể search mấy cái hash trên mạng
578F7ADED41B684CB09D33CA23A57AB1
-> TIGER
bbbd558a572a105c718e04894e9ffa8756ef8402
-> DOG
0bb51f486a79de40bc1cb61b4dfb4c5af4a4f4f82c30cfeb465677468a05416f8a1a9a2e8a90534542f4d1fea26e1790bde241762f7d3c3e046e70c9ba330cb8
-> CAT
Vào http://regexr.com/ để check regex, ta tìm được một chuỗi là 3GWHATEVERTG. B có 8 ký tự, vậy hẳn là WHATEVER
Tiếp tục tìm C, có 5 ký tự, ta viết một script dùng Twitter API check tất cả các user có ID từ 38071000 tới 38071099
try:
import json
except ImportError:
import simplejson as json
from twitter import Twitter, OAuth, TwitterHTTPError, TwitterStream
# Đoạn này các bạn hãy sử dụng key của mình
ACCESS_TOKEN = 'xxxx'
ACCESS_SECRET = 'yyyy'
CONSUMER_KEY = 'zzzz'
CONSUMER_SECRET = 'tttt'
oauth = OAuth(ACCESS_TOKEN, ACCESS_SECRET, CONSUMER_KEY, CONSUMER_SECRET)
twitter_stream = TwitterStream(auth=oauth)
twitter = Twitter(auth=oauth)
for i in xrange(38071000, 38071100):
try:
a = twitter.users.show(user_id=i)
if a:
if len(a["screen_name"])==5:
print a["screen_name"]
except:
pass
Ta tìm được 2 cái tên, kết hợp với B, ta thấy cái tên UWANT
là hợp lý hơn.
Tìm A, có 6 ký tự, đơn giản ta sẽ brute force từ AAAAAA cho tới ZZZZZZ cho nhanh
from hashlib import sha256
s = "ABCDEFGHIKLMNOPQRSTUVXY"
target = "753053aeae0d1a3fe33bd2cb31a901069873b8c37127b0d3757dd3a90313b526"
for a1 in s:
for a2 in s:
for a3 in s:
for a4 in s:
for a5 in s:
for a6 in s:
cur = a1+a2+a3+a4+a5+a6+"_WHATEVER_UWANT"
if sha256(cur).hexdigest() == target:
print cur
break
Flag: CodeWar{ICANDO_WHATEVER_UWANT}
Coding Is Art (50pt)
Ta có một file Ruby code.rb
, mở lên xem nào
cs = ["x", "y", "x", "z", "x", "z", "x", "t", "x", "y", "x", "t", "x", "y", "x", "y", "x", "u", "x", "u", "\n", "x", "y", "x", "u", "x", "u", "x", "y", "x", "u", "x", "t", "x", "y", "x", "t", "x", "y", "x", "y", "x", "u", "x", "u", "x", "y", "x", "u", "x", "u", "x", "y", "x", "u", "x", "u", "x", "u", "x", "y", "x", "u", "x", "u", "x", "u", "x", "y", "x", "u", "x", "z", "\n", "x", "y", "x", "y", "x", "z", "x", "z", "x", "y", "x", "z", "x", "y", "x", "y", "u", "z", "x", "z", "x", "t", "x", "y", "x", "y", "t", "y", "x", "y", "x", "y", "x", "z", "x", "z", "x", "y", "x", "z", "x", "z", "x", "<", "x", "y", "x", "z", "x", "z", "x", "z", "x", "z", "x", "y", "x", "y", "x", "y", "x", "y", "x", "z", "x", "z", "x", "y", "x", "z", "x", "z", "x", "y", "x", "z", "x", "y", "x", "y", "x", "z", "x", "z", "x", "y", "x", "z", "x", "z", "x", "y", "x", "z", "x", "y", "x", "y", "u", "z", "x", "z", "x", "y", "\n", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "t", "y", "x", "y", "x", "t", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "v", "u", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", ">", "\n", "v", "u", "y", "x", "y", "x", "v", "u", "y", "x", "y", "x", "v", "u", "y", "x", "y", "x", "v", "u", "x", "t", "x", "y", "x", "t", "x", "y", "x", "v", "u", "v", "x", "v", "x", "y", "x", "v", "u", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "y", "x", "u", "x", "v", "u", "y", "x", "y", "x", "v", "u", "v", "x", "v", "x", "v", "u", "y", "x", "y", "x", "u", "x", "v", "u", "x", "v", "u", "y", "x", "y", "x", "v", "u", "y", "x", "y", "x", "v", "u", "x", "y"]
#x ,y/,z),t|,u_,v(
ns = [4, 2, 3, 1, 1, 1, 27, 2, 3, 1, 1, 1, 2, 1, 1, 1, 20, 1, 102, 1, 1, 3, 2, 9, 3, 6, 3, 3, 1, 2, 3, 4, 2, 2, 1, 2, 1, 1, 1, 1, 1, 2, 3, 6, 2, 6, 2, 3, 1, 3, 2, 22, 1, 1, 2, 6, 3, 6, 3, 3, 1, 12, 3, 6, 3, 6, 3, 3, 1, 2, 3, 5, 2, 1, 2, 2, 8, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 3, 1, 1, 1, 9, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 11, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1, 2, 8, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 8, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 3, 1, 1, 1, 1, 2, 7, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 3, 1, 1, 1, 9, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 11, 2, 7, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 8, 2, 1, 2, 4, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 4, 5, 1, 2, 1, 2, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 7, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 6, 1, 1, 1, 3, 5, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 5, 5, 1, 2, 4, 3, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 4, 3, 2]
ns.each_with_index do |n, i|
n.times{puts cs[i-1]}
end
Một gợi ý rất rõ ràng và lộ liễu: x ,y/,z),t|,u_,v(
, nghĩa làthay x bởi space (dấu cách), thay y bởi /, thay z bởi ), thay t bởi |, thay u bởi , thay v bởi (
Script sẽ trở thành
cs = [" ", "y", " ", ")", " ", ")", " ", "|", " ", "y", " ", "|", " ", "y", " ", "y", " ", "_", " ", "_", "\n", " ", "y", " ", "_", " ", "_", " ", "y", " ", "_", " ", "|", " ", "y", " ", "|", " ", "y", " ", "y", " ", "_", " ", "_", " ", "y", " ", "_", " ", "_", " ", "y", " ", "_", " ", "_", " ", "_", " ", "y", " ", "_", " ", "_", " ", "_", " ", "y", " ", "_", " ", ")", "\n", " ", "y", " ", "y", " ", ")", " ", ")", " ", "y", " ", ")", " ", "y", " ", "y", "_", ")", " ", ")", " ", "|", " ", "y", " ", "y", "|", "y", " ", "y", " ", "y", " ", ")", " ", ")", " ", "y", " ", ")", " ", ")", " ", "<", " ", "y", " ", ")", " ", ")", " ", ")", " ", ")", " ", "y", " ", "y", " ", "y", " ", "y", " ", ")", " ", ")", " ", "y", " ", ")", " ", ")", " ", "y", " ", ")", " ", "y", " ", "y", " ", ")", " ", ")", " ", "y", " ", ")", " ", ")", " ", "y", " ", ")", " ", "y", " ", "y", "_", ")", " ", ")", " ", "y", "\n", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "|", "y", " ", "y", " ", "|", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "(", "_", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", ">", "\n", "(", "_", "y", " ", "y", " ", "(", "_", "y", " ", "y", " ", "(", "_", "y", " ", "y", " ", "(", "_", " ", "|", " ", "y", " ", "|", " ", "y", " ", "(", "_", "(", " ", "(", " ", "y", " ", "(", "_", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "_", " ", "(", "_", "y", " ", "y", " ", "(", "_", "(", " ", "(", " ", "(", "_", "y", " ", "y", " ", "_", " ", "(", "_", " ", "(", "_", "y", " ", "y", " ", "(", "_", "y", " ", "y", " ", "(", "_", " ", "y"]
# ,y/,)),||,__,((
ns = [4, 2, 3, 1, 1, 1, 27, 2, 3, 1, 1, 1, 2, 1, 1, 1, 20, 1, 102, 1, 1, 3, 2, 9, 3, 6, 3, 3, 1, 2, 3, 4, 2, 2, 1, 2, 1, 1, 1, 1, 1, 2, 3, 6, 2, 6, 2, 3, 1, 3, 2, 22, 1, 1, 2, 6, 3, 6, 3, 3, 1, 12, 3, 6, 3, 6, 3, 3, 1, 2, 3, 5, 2, 1, 2, 2, 8, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 3, 1, 1, 1, 9, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 11, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1, 2, 8, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 8, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 3, 1, 1, 1, 1, 2, 7, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 3, 1, 1, 1, 9, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 11, 2, 7, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 8, 2, 1, 2, 4, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 4, 5, 1, 2, 1, 2, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 7, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 6, 1, 1, 1, 3, 5, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 5, 5, 1, 2, 4, 3, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 4, 3, 2]
ns.each_with_index do |n, i|
n.times{puts cs[i-1]}
end
Chạy thử xem sao..... oops, kết quả khá là xấu xí. nhưng tôi đoán ra được các ký tự này có lẽ sẽ tạo thành chữ có nghĩa. Ta sửa script một chút như sau:
cs = [" ", "y", " ", ")", " ", ")", " ", "|", " ", "y", " ", "|", " ", "y", " ", "y", " ", "_", " ", "_", "\n", " ", "y", " ", "_", " ", "_", " ", "y", " ", "_", " ", "|", " ", "y", " ", "|", " ", "y", " ", "y", " ", "_", " ", "_", " ", "y", " ", "_", " ", "_", " ", "y", " ", "_", " ", "_", " ", "_", " ", "y", " ", "_", " ", "_", " ", "_", " ", "y", " ", "_", " ", ")", "\n", " ", "y", " ", "y", " ", ")", " ", ")", " ", "y", " ", ")", " ", "y", " ", "y", "_", ")", " ", ")", " ", "|", " ", "y", " ", "y", "|", "y", " ", "y", " ", "y", " ", ")", " ", ")", " ", "y", " ", ")", " ", ")", " ", "<", " ", "y", " ", ")", " ", ")", " ", ")", " ", ")", " ", "y", " ", "y", " ", "y", " ", "y", " ", ")", " ", ")", " ", "y", " ", ")", " ", ")", " ", "y", " ", ")", " ", "y", " ", "y", " ", ")", " ", ")", " ", "y", " ", ")", " ", ")", " ", "y", " ", ")", " ", "y", " ", "y", "_", ")", " ", ")", " ", "y", "\n", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "|", "y", " ", "y", " ", "|", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "(", "_", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", ">", "\n", "(", "_", "y", " ", "y", " ", "(", "_", "y", " ", "y", " ", "(", "_", "y", " ", "y", " ", "(", "_", " ", "|", " ", "y", " ", "|", " ", "y", " ", "(", "_", "(", " ", "(", " ", "y", " ", "(", "_", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "y", " ", "_", " ", "(", "_", "y", " ", "y", " ", "(", "_", "(", " ", "(", " ", "(", "_", "y", " ", "y", " ", "_", " ", "(", "_", " ", "(", "_", "y", " ", "y", " ", "(", "_", "y", " ", "y", " ", "(", "_", " ", "y"]
# ,y/,)),||,__,((
ns = [4, 2, 3, 1, 1, 1, 27, 2, 3, 1, 1, 1, 2, 1, 1, 1, 20, 1, 102, 1, 1, 3, 2, 9, 3, 6, 3, 3, 1, 2, 3, 4, 2, 2, 1, 2, 1, 1, 1, 1, 1, 2, 3, 6, 2, 6, 2, 3, 1, 3, 2, 22, 1, 1, 2, 6, 3, 6, 3, 3, 1, 12, 3, 6, 3, 6, 3, 3, 1, 2, 3, 5, 2, 1, 2, 2, 8, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 3, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 3, 1, 1, 1, 9, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 11, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 1, 1, 2, 8, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 8, 2, 1, 1, 1, 1, 1, 2, 1, 1, 2, 3, 1, 1, 1, 1, 2, 7, 2, 2, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 3, 1, 1, 1, 9, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 11, 2, 7, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 8, 2, 1, 2, 4, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 4, 5, 1, 2, 1, 2, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 7, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 6, 1, 1, 1, 3, 5, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 5, 5, 1, 2, 4, 3, 2, 3, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 2, 4, 3, 2]
ns.each_with_index do |n, i|
n.times{print cs[i]}
end
Chạy lại lần nữa, ok đẹp rồi. Căng mắt nhìn lần nữa, à há flag đây rồi
Flag: CodeWar{my_bad_code}
His Best Friend (200pt)
Chúng ta lại có một file dạng text nữa wise_words
, bên trong nội dung toàn là số má, được sắp xếp theo từng block dạng thế này
9 9 9 9 9 9 9 9 9 9
7 7 7 7 7 7 7 7 7 7
8 8 8 8 8 8 8 8 8 8
1 1 0 0 0 0 1 0 1 0
8 8 4 1 4 1 8 1 8 1
5 5 4 2 4 2 5 2 5 2
5 5 4 4 4 1 5 3 5 2
7 7 5 2 5 7 7 5 7 5
3 3 1 8 1 8 3 6 3 3
4 4 2 7 6 0 5 0 2 8
6 9 5 6 5 7 7 4 8 4
3 0 6 5 3 5 5 0 2 0
0 6 7 5 4 3 0 7 7 7
Mỗi hàng dọc là một dãy 13 chữ số, đây chính là mã sách ISBN. Các bạn có thể liên tưởng đến hình ảnh giá sách với các cuốn sách được đặt dựng đứng. Ta dùng mã ISBN này để tra các tên sách, và ghép các chữ cái đầu tiên trong tên sách lại, ta sẽ có đoạn text như sau:
import isbnlib
f = open('wise_words', 'r')
c=[]
for k in xrange(30):
a = [[] for i in xrange(100)]
for i in xrange(14):
b=f.readline()
for i in xrange(len(b)):
if b[i] in "0123456789":
a[i].append(b[i])
for i in a:
if i: c.append(''.join([j for j in i]))
for isbn in c:
book = isbnlib.meta(isbn)
print book['Title'][0],
ABOOKLYINGIDLEONASHELFISWASTEDAMMUNITIONLIKEMONEYBOOKSMUSTBEKEPTINCONSTANTCIRCULATIONABOOKISNOTONLYAFRIENDITMAKESFRIENDSFORYOUWHENYOUHAVEPOSSESSEDABOOKWITHMINDANDSPIRITYOUAREENRICHEDBUTWHENYOUPASSITONYOUAREENRICHEDTHREEFOLDWELLDONEYOURFLAGISKEEPREADINGBOOKSWITHUNDERSCORESBETWEENWORDS
Bạn đã nhìn ra flag rồi chứ
Flag: CodeWar{keep_reading_books}
Wall Of Text (175pt)
There is a hidden message ? (somebody told that :v)
Ta có một bức ảnh như sau:
Thực tế trong các chữ cái sẽ có 1 số chữ màu đen nhưng mã là (0, 0, 10)
khác với phần còn lại là (0, 0, 0)
Ta sử dụng Stegsolve.jar (download tại đây) để check.
Tại Gray bits cho ta kết quả như sau:
Yes, flag đây rồi
Flag: CodeWar{there_is_an_answer_inside_every_questi}
8 is 8 but 8 is not 8 (100pt)
Ta có một bảng số như thế này
12573783756253821289993516661571532721735159999733657183510117532
23157187107235072287370282131575321373512705532214542504338253712
17532304457731617701230154447731752375213297235584440203439171532
25137587303551977591358133218712357175123101535103178782540737251
12753783129233055506665359991771523523751256666387210303128227531
33732315351537277752753531713535137211723323555332277131575275722
31257206665189999233657189993723175194949505718553821116661121357
73152285758307335314542587370532175311817587210235072182131712735
13527194445394444284440301230725137122022394449231617754447732175
12357387362387721703178191358253127511853302118551977733218312735
75123741279706666587210706665221375573872265720133055359991735172
Các bạn có thể tô màu các vòng tròn trong các số 0, 6, 8, 9 ... để thấy được Flag. Để đơn giải thì ta chụp ảnh đoạn text lại, mở photoshop lên, fill nó bằng một màu nào đấy, ta được kết quả như sau Nheo mắt lại và đọc, nó đây rồi !
Flag: CodeWar{kids_can_read_this}
KubEye Challenge (300pt)
Restore it if you can ? Challenge Accepted ? https://kube-challenge.surge.sh/
Bài này có vẻ khá là dễ ăn đối với những người làm việc quen với 3D như Unity3D hay 3Dmax khi các thao tác ghép và điều chỉnh là quen thuộc. Chống chỉ định với các bạn dễ buồn nôn Chúng ta sẽ ngồi ghép các block lai, dựa vào các mảng text còn thiếu giữa các block. Try harder !!
Ngoài ra nếu các bạn quen với JavaScript và thư viện three.js
thì có thể viết 1 đoạn code để quay các khối về lại trạng thái ban đầu.
_g5.children.forEach(function(obj) { if (obj.type === "Object3D") { obj.rotation.set(0, 0, 0); } })
Để hiển thị 3D với three.js
thì chúng ta cần ít nhất 1 scene
, 1 camera
và 1 renderer
, ở đây _g5
là biến ứng với scene
.
Chạy đoạn code này xong thì công việc còn lại chỉ đơn giản là tịnh tiến các khối về vị trí ban đầu.
Nhìn vào các blocks, ta sẽ thấy được đoạn flag.
Flag: CodeWar{SEEING_IS_BELIEVING!}
Trên đây là hướng dẫn giải một số bài trong vòng sơ loại Code War 2017. Chúng tôi sẽ tiếp tục gửi đến các bạn phần write-ups cho các bài còn lại trong thời gian sớm nhất. Stay tune !
All rights reserved