åå ã¯ãã詳解ã»ãã¥ãªãã£ã³ã³ãã¹ã: CTFã§å¦ã¶èå¼±æ§æ»ç¥ã®æè¡ Compass Booksã·ãªã¼ãºãã¨ããæ¸ç±ããå¼ãç¶ãèªã¿é²ãã¦ãã¦ãã·ã§ã«ã³ã¼ãã®ç« ãèªã¿ã¾ããã
ä»å¾ããã詳解ã»ãã¥ãªãã£ã³ã³ãã¹ããããå¼ãç¶ãèªã¿é²ããã¤ãããªã®ã§ãããä»åã¯ããã¼ããããã¹ã¿ã¼ï¼ColabÃPythonã§ãã¤ããªãã¡ã¤ã«è§£æå®è·µã¬ã¤ã (ã¨ã³ã¸ãã¢å
¥éã·ãªã¼ãº)ãã¨ããæ¸ç±ãå
¥æããã®ã§ããã¡ãããã£ã¨èªãã§ãæ¦è¦ã ãã§ããã¾ã¨ãã¦ãããã¨æãã¾ãã
ç®æ¬¡ãè¦ãã¨ãã ãããã®å
容ã¯äºæ³ãã§ããã¨æãã¾ãããã¡ã¤ã³ã¯ãPython ã使ã£ã¦ããã¤ããªãã¡ã¤ã«ã解æããã¨ãããã¨ã§ãã対象ã®ãã¤ããªãã¡ã¤ã«ã¯ãããã°ã©ã ãç»åãã¡ã¤ã«ãã¢ã¼ã«ã¤ããææ¸ãã¡ã¤ã«ãªã©ã§ãããã®ãããã¯ããã©ã¬ã³ã¸ãã¯ã®åéã§ãããã®ã§ãCTF ã«ãå½¹ç«ã¡ããã§ãã
ããã§ã¯ããã£ã¦ããã¾ãã
åèæç®
ä»åãé¡æã«ããã¦é ããããã¤ããªãã¡ã¤ã«è§£æ å®è·µã¬ã¤ããã§ãã
ã¯ããã«
ãã»ãã¥ãªãã£ãã®è¨äºä¸è¦§ã§ããè¯ãã£ããåèã«ãã¦ãã ããã
ã»ãã¥ãªãã£ã®è¨äºä¸è¦§
以ä¸ã¯ãã¼ããããã¹ã¿ã¼ï¼ColabÃPythonã§ãã¤ããªãã¡ã¤ã«è§£æå®è·µã¬ã¤ã (ã¨ã³ã¸ãã¢å
¥éã·ãªã¼ãº)ãã®ãµãã¼ããµã¤ãã§ããåé¡ãã¡ã¤ã«ããã¦ã³ãã¼ããããã¨ãåºæ¥ã¾ãã
github.com
ã§ã¯ãæ¸ç±ã®ç« ãåèã«æ¸ãé²ãã¦ããã¾ãã
第1ç« ï¼ãã¤ããªè§£æã«åããæºåéå
ããã§ã¯ãColab ã®ç´¹ä»ãPython ã®åºæ¬ããã¤ããªè§£æã§ä½¿ã Python ã®æ©è½ã®ç´¹ä»ãªã©ãæ¸ããã¦ãã¾ããããã¯ããã©ãã©ã¨è¦ãç¨åº¦ã§ãã
å°ãã ãã¡ã¢ãã¦ããã¾ããç§ã¯ãbytesåãæ±ãã¨ããhexé¢æ°ã§è¡¨ç¤ºããããã¨ãå¤ãã®ã§ãããhexé¢æ°ã®å¼æ°ã«åºåãæåãæå®ã§ãããã¨ãåãã¦ç¥ãã¾ããã
>>> ee = "ãã¤ããªè§£æ".encode()
>>> ee
b'\xe3\x83\x90\xe3\x82\xa4\xe3\x83\x8a\xe3\x83\xaa\xe8\xa7\xa3\xe6\x9e\x90'
>>> ee.hex()
'e38390e382a4e3838ae383aae8a7a3e69e90'
>>> ee.hex(" ")
'e3 83 90 e3 82 a4 e3 83 8a e3 83 aa e8 a7 a3 e6 9e 90'
>>> ee.decode()
'ãã¤ããªè§£æ'
次ã®ç« ã«é²ã¿ã¾ãã
第2ç« ï¼ãã¤ããªãã¡ã¤ã«ã®æä½
ããã§ã¯ããã¤ããªãã¡ã¤ã«ã Python ã§æ±ãæ¹æ³ã«ã¤ãã¦ä¸å¯§ã«èª¬æããã¦ãã¾ããå¾åã§ã¯ããã¤ããªãã¡ã¤ã«ããã³ãããããã°ã©ã ããstringsã³ãã³ãã®èªä½ãªã©ããã¤ããªãã¡ã¤ã«ãæ±ããã¨ã«æ
£ãããããªå
容ãç¶ãã¾ãã
ãã¨ã¯ãæ
å ±ã¨ã³ãããã¼ãç¨ãã¦ããã¤ããªãã¡ã¤ã«å
¨ä½ã俯ç°ãã¦åæãããã¨è¡ãããã®è§£èª¬ãããã¦ãã¾ãã
次ã®ç« ã«é²ã¿ã¾ãã
第3ç« ï¼ãã¤ããªãã¡ã¤ã«ã®æ§é 解æã®ç·´ç¿ï¼ç»åãã¡ã¤ã«
ããã§ã¯ãç»åãã¡ã¤ã«ï¼BMPãPNGãJPEGå½¢å¼ã®é ï¼ã«ã¤ãã¦ãåãã¤ããªãã©ã¼ãããã«ã¤ãã¦è§£èª¬ããã¦ãã¦ããã®å¾ãPython ã使ã£ã¦ãå
·ä½çãªãã¤ããªãã¡ã¤ã«ã使ã£ã¦å®éã«è§£æãã¦ããã¾ãã
ããã¾ã§èªãã§ãã¦ããã®æ¸ç±ã®æ¹åæ§ã¯ããã¤ããªãã¡ã¤ã«ã解æãããã¼ã«ã Python ã§èªåã§å®è£
ãããã¨ã§ããã¤ããªãã¡ã¤ã«èªä½ã®ç解ãæ·±ããã¨ããæ¹æ³ã®ããã§ãã
ãã®ç« ã®æå¾ã«ãã³ã©ã ã¨ãã¦ãããªã便å©ãªã©ã¤ãã©ãªãããã®ã«èªä½ããã®ãããæ¸ããã¦ãã¾ãããã®ç®çã¯ãã便å©ãªã©ã¤ãã©ãªããªãã¦ãèªåã§ãªãã¨ãããåãã¤ãã¦æ¬²ãããããã©ã¤ãã©ãªã§ã¯æ°ä»ããªãæ
å ±ããã¤ããªãã¡ã¤ã«ã«å«ã¾ãã¦ãããã¨ãç¥ã£ã¦ã»ãããã¨ãããã¨ã ããã§ãã
ãã¼ããããã¯ãã¯ããã«ãã¨ãã§æ¸ãã¦ã»ããã¨ããã§ããï¼ç¬ï¼ã
第4ç« ï¼ãã¤ããªãã¡ã¤ã«ã®æ§é 解æ å®è·µç·¨ï¼ã³ã³ãããã¡ã¤ã«ï¼ã¢ã¼ã«ã¤ããææ¸ãã¡ã¤ã«ï¼
ããã§ã¯ãZIPãã¡ã¤ã«ãPDFãã¡ã¤ã«ã«ã¤ãã¦ã第3ç« ã¨åæ§ã«ããã¡ã¤ã«ãã©ã¼ãããã®è§£èª¬ãéãã¦ãåãã¡ã¤ã«ã«ã¤ãã¦æ·±æããã¦èª¬æãããã¦ãã¾ããç¹ã«ãPDFãã¡ã¤ã«ã¯ããããããªæ¡å¼µããããããä½ãå¥ã®ãã®ãåãè¾¼ã¾ãããã¨ï½ãCTF ã§ãåºé¡é »åº¦ãé«ãã¨æãã®ã§ãåºæ¬ã身ã«çãã¨æãã¾ãã
次ã®ç« ã«é²ã¿ã¾ãã
第5ç« ï¼å¿ç¨ç·¨1 ãã¤ããªãã¡ã¤ã«è§£æã®éå
·ç®±ï¼Binary Refineryï¼
ããã§ã¯ãBinary Refinery ã¨ããããã¤ããªãã¡ã¤ã«ã解æããããã® Pythonãã¼ã¹ã®ãã¼ã«ã«ã¤ãã¦ã90ãã¼ã¸ãããã®åéã§èª¬æãããã¦ãã¾ãã
ä»åã¯ç´°ããèªãã¾ããã§ãããããã¤ããªãã¡ã¤ã«ã®è§£æãå°éçã«è¡ãå ´åã«ä½¿ããã¦ãããã¼ã«ããªãã¨ããæãã§ããããã®ãã¼ã«ã使ããã¦ããæ¹ã«ã¨ã£ã¦ã¯ãè²´éãªæ¸ç±ãªãã ã¨æãã¾ãã
第6ç« ï¼ãã¤ããªãã¡ã¤ã«ã®æ§é 解æ å®è·µç·¨ï¼å®è¡ãã¡ã¤ã«
ããã§ã¯ ELFå½¢å¼ã®ããã°ã©ã ãã¡ã¤ã«ãé¡æã¨ãã¦ãELFãã¡ã¤ã«ã®ãã©ã¼ãããã«ã¤ãã¦ã®è§£èª¬ããã¢ã»ã³ãã©ã³ã¼ãã®èªã¿æ¹ã®è§£èª¬ãè¡ããã¦ãã¾ãã
35ãã¼ã¸ãããã®åéã§ããåç« ã®ããªã¥ã¼ã ã¨æ¯è¼ããã¨å°ãªãã§ãããããããæ¹åæ§ã®æ¸ç±ã ã¨ãããã¨ã§ãã
第7ç« ï¼å¿ç¨ç·¨2 ãã¤ããªãã¡ã¤ã«è§£æã®å®è·µ CTF
ããã§ã¯ãCTF ã®ãªãã¼ã¹ã¨ã³ã¸ãã¢ãªã³ã°ã®åé¡ãé¡æã¨ãã¦ãPython ã§éã¢ã»ã³ãã©ã解æãã¦ããæ¹æ³ã«ã¤ãã¦èª¬æããã¦ãã¾ãã
40ãã¼ã¸ãããã®åéã§ããã¾ãããã¼ã«ã¯ãPython ã¨è¦ªåæ§ãé«ããã¨ãçç±ãªã®ããradare2 ã使ããã¦ãã¾ããIDA ããGhidra ã使ããã¦ããæ¹ã«ã¨ã£ã¦ã¯æ³¨æã§ããã
å¾åã§ã¯ãPython ã®ãã¤ãã³ã¼ãã®è§£æã«ã¤ãã¦èª¬æãããã¾ãã解説ã®åéã¯å°ãªãã§ãããå
¨ãç¥ããªãã¨ãCTF ã®åé¡ã解ãã®ã¯é£ããã®ã§ãä¸åº¦ã¯èªã価å¤ãããã¨æãã¾ãã
Python ã®ãã¤ãã³ã¼ãã® CTF ã®åé¡ã¨ãã¦ã¯ã以åã以ä¸ã®è¨äºã§ãpicoCTF 2024 ã® Reverse Engineering ã® weirdSnake ã¨ããåé¡ã§æ±ã£ããã¨ãããã¾ãã
daisuke20240310.hatenablog.com
第8ç« ï¼å¿ç¨ç·¨3 æ©æ¢°å¦ç¿ãç¨ãããã¤ããªè§£æ ï½ãã«ã¦ã§ã¢ã®ç¨®é¡æ¨å®ãä¾ã«ï½
ããã§ã¯ããã«ã¦ã§ã¢è§£æãé¡æã¨ãã¦ãæ©æ¢°å¦ç¿ã«ãã£ã¦ããã¤ããªãã¡ã¤ã«ã®è§£æãå¹çåããæ¹æ³ã«ã¤ãã¦è§£èª¬ããã¦ãã¾ãã
å
·ä½çã«ã¯ãéã¢ã»ã³ãã©ãã¦ãã¢ã»ã³ãã©å½ä»¤ãç¹å¾´éã¨ãã¦ãword2vec ãç¨ãã¦ãå¦ç¿ãè¡ãã¾ããå¦ç¿ã«ä½¿ããããã¼ã¿ã»ããã¯ã6ã¤ã®ãã«ã¦ã§ã¢ã«ãã´ãªãå«ã¾ãã¦ããããã«ã¦ã§ã¢ã§ã¯ãªããã®ã¯å
¥ã£ã¦ãã¾ãããã¤ã¾ãããã«ã¦ã§ã¢ãã©ãããå¤å®ããã®ã§ã¯ãªãããã«ã¦ã§ã¢ã¨åãã£ã¦ããåæã§ãã©ã®ç¨®é¡ã®ãã«ã¦ã§ã¢ãªã®ããå¤å®ããæ©æ¢°å¦ç¿ã¨ãããã¨ã§ãããã«ã¦ã§ã¢ã§ã¯ãªããã¼ã¿ãå«ãã¦å¤å®ããæ¹æ³ã«ã¤ãã¦ã¯ãç°å¢æ§ç¯ã®æ¹æ³ã¾ã§ã解説ããã¦ãã¾ãã
æè¿ã ã¨ãLLM ã使ã£ã¦ãããã¨ãå¤ããã§ãããããã§ã¯ããã«ã¦ã§ã¢è§£æã«æ©æ¢°å¦ç¿ã使ãå ´åã®åºæ¬çãªæè¡ãææ³ãå¦ã¶ãã¨ãåºæ¥ãï¼é°å²æ°ãç¥ããã¨ãåºæ¥ãï¼ã¨æãã¾ãã
ãããã«
ä»åã¯ããã¼ããããã¹ã¿ã¼ï¼ColabÃPythonã§ãã¤ããªãã¡ã¤ã«è§£æå®è·µã¬ã¤ã (ã¨ã³ã¸ãã¢å
¥éã·ãªã¼ãº)ãããã£ããèªã¿ã¾ããããããããã¤ããªãã¡ã¤ã«ã®è§£æãæ¬æ ¼çã«ãã£ã¦ã¿ããæ¹ããæåã«èªãæ¸ç±ã¨ãã¦ããã¨æãã¾ãããã ãPython ã使ã£ã¦è§£æãããã¨ãåæã¨ãªã£ã¦ãã¦ãã¡ãã£ã¨åã£ã¦ããããªæ°ã¯ãã¾ããã
ã¾ããColab ã使ããã¨ãåæã«ãªã£ã¦ãããã¨ãæ°ã«ãªãã¾ãããColab 㯠Python ãã使ããªã人ã«ã¨ã£ã¦ã¯ãããã¼ã«ã ã¨æãã¾ãããå®éã¯ãããããªãã¼ã«ã¨çµã¿åããã¦åãçµããã¨ãå¤ãã®ã§ãLinux 㨠Colab ã®ããåããé¢åã ã¨æãã¾ããã
æå¾ã«ãªãã¾ããããã¨ã³ã¸ãã¢ã°ã«ã¼ãã®ã©ã³ãã³ã°ã«åå ä¸ã§ãã
æ°æ¥½ã«ãããã¨ãããããé¡ããããã¾ãð
ä»åã¯ä»¥ä¸ã§ãï¼
æå¾ã¾ã§ãèªã¿ããã ãããããã¨ããããã¾ããã