2020 AIS3 EOF Final - ARAY
題目:ARAY {FREE_FLAG}
, ARAY2 {EASY_FLAG}
, ARAY3 {REGEXP_FLAG}
, ARAY4 {HARD_FLAG}
2020 AIS3 EOF Final 的 YARA 系列題,是時候搞定它ㄌ
Challenge Info
Yet Another Reversing Artifact 有
reverse.yac
,yara
,libyara.so
三個檔案,四題共用
ARAY {FREE_FLAG} (50)
Solution
strings
下去噴出一堆 flag
用眼睛看,或是 yara rule 檢查
|
|
ARAY2 {EASY_FLAG} (100)
肉眼觀察,找到明顯被拆散的 flag 片段XD
簡單寫個腳本解掉:
|
|
ARAY3 {REGEXP_FLAG} (200)
自己寫一個簡單的 regex rule,然後編譯
|
|
|
|
用 hex editor 觀察,發現會以明文存起來,放在 \xA2
(RE_OPCODE_LITERAL
) 後面、並用 \xAD
(RE_OPCODE_MATCH
) 隔開每條規則
又因為 flag 是正常的英文單字,所以湊出來就好了@@
隨便湊 flag 腳本:
|
|
原本覺得這是最難的一題,不像 ARAY4 可以直接 dump instruction,沒想到直接用看的就出來了QAQ
沒仔細看 yara regular expression engine 跟它 bytecode 是怎麼存的,目前知道在編譯規則的時候 regexp 會被建成 AST,可以用內建的 function
yr_re_ast_print(re_ast)
把 AST 印出來
ARAY4 {HARD_FLAG} (300)
題目使用 v3.9.0
版本的 yara
|
|
yara 執行 bytecode 的 function 是 yr_execute_code()
(libyara/exec.c
),裡面有一個很大的 switch case 根據 1 byte opcode 做相對應的動作,是一個 stack based VM
可以 trace code 並印出一些資訊,來了解實際運作流程
經過一些嘗試,可以確定 hard flag 的部分會把輸入拿去做運算,然後跟特定數值做比較(OP_INT_EQ
),如果一樣就進行下一個比較,否則結束(OP_JFALSE
)
修改兩個 instruction(OP_INT_EQ
, OP_AND
)強制通過檢查,這樣就能看到所有規則:
|
|
|
|
確定輸出有 HARD_FLAG ../input
代表成功繞過所有檢查
最後整理出所有規則,總共有 80 個檢查:
- 19th:輸入不是
AIS3{You got my secret flag, but did you check which is real flag?}
- 45th:輸入中存在
AIS3{
跟}
- 64th:輸入長度為 88
- 76th:輸入要符合
$flag_format
,不會逆 regex QQ,但我猜是類似這樣AIS3\{.*\}
- 其他:把輸入拿去做運算,結果要跟特定值一樣
之後還會載入 256 個 hash function(md5
, sha1
, sha256
)然後算一堆 hash,就結果而言,能通過上面那 80 個規則就可以了
所以根據 instruction 生出相對應的 python code,用 z3 solver 解掉
最後修改的 exec.c
:
|
|
原本的 constrain 會把空白 filter 掉,這邊卡好久 = =
Flag
- FREE_FLAG:
AIS3{This is the free flag for do nothing but run `strings` on the compiled rule file :D}
- EASY_FLAG:
AIS3{Ok, now you just reversed the binary rule, but to make it harder, I have to add random string: xrmXfGydyUWk1Rirk3gZAN/tH08Ag+Hxrxus3n7kdjokmi54hcZOJmu6EwOvR1ISIBCK7KVYQSXNP1vfcKQ225Ok}
- REGEXP_FLAG:
AIS3{Even strings shows nothing about the flag, but I think you are good at regular expression!}
- HARD_FLAG:
AIS3{This is too hard, I want to go home. 7gy0kPXE1AUiMZLnAW06EKqummGSVcGh23Eq9tl9SW2fz}