çµ±èšããå§ããŸãã æåã®AndroidããŒã¹ã®ããã€ã¹ã§ããHTC Dream / G1ã¯ã2008幎10æã«ç±³åœãšè±åœã§çºå£²ãããŸããã ãã©ãããã©ãŒã ã®æ¥éãªæ®åã®å§ãŸãã¯ã2009幎11æã®Motorola Droidã¹ããŒããã©ã³ã®åºçŸã«é¢é£ããŠããŸãã ãã以æ¥ãæ¯æ¥ã¢ã¯ãã£ãåãããããã€ã¹ã®æ°ã¯é©ç°çã«å¢å ããŠããŸãã ååã®Google I / Oã«ã³ãã¡ã¬ã³ã¹ã§ã¯ãæ¯æ¥40äžåã®ã¢ã¯ãã£ããŒã·ã§ã³ãšãããã°ãããæ°åãçºè¡šãããŸããã èããŠã¿ãŠãã ãããããã¯ãããã¹ã®äººå£ã®ååãäŸãã°ãã«ãã€å šäœã§ãã çŸåšãåèšã§1åå°ä»¥äžã®Androidããã€ã¹ãã¢ã¯ãã£ãåãããŠããŸãã æªããªãã ããã§ããããããGoogleã§å°ãªããšãå°ãã¯ã§ãããã管çã§ãããšæ³åããŠãã ããã ããããç§ã¯å°ãèªåŒµããŠããŠãããã§ã¯ã管çããšããèšèã¯æãé©åã§ã¯ãããŸããã GoogleãGTalkServiceã¡ã«ããºã ãä»ããŠä»»æã®ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããã³åé€ã§ããããšã¯ç¢ºå®ã«ç¥ãããŠããŸãã ãããæ°ããããã€ã¹ã®ã¢ã¯ãã£ããŒã·ã§ã³ã«é¢ããå°è±¡çãªçµ±èšãšçµã¿åãããããšã§ãæ°åäžäººã®ãŠãŒã¶ãŒãèªçºçã«ãã°ã€ã³ããäžçæ倧ã®ãããããããæãã£ããèããŸãã ã¢ã€ãã¢ã¯ç©ºæ³ç§åŠå°èª¬ã®ããã«èŠããŸãããGTalkServiceã¡ã«ããºã ã®å éšãç解ããããšã«èå³ããããŸããã ã©ã®ããã«é 眮ãããŠããŸããïŒ ãµãŒããŒããã®ã¡ãã»ãŒãžã¯ã©ã®ãããªåœ¢ã§ããã€ã¹ã«å±ããŸããïŒ äŒéãã£ãã«ã¯ã©ã®ãããå®å šã§ããïŒ ä»ã®èª°ããç§ã®ããã€ã¹ã«å¶åŸ¡ã³ãã³ããå«ãã¡ãã»ãŒãžãéä¿¡ã§ããå±éºã¯ãããŸããïŒ
Googleã«ãã£ãŠåé€ãããã¢ããª
GTalkServiceããã¹ãŠã§ã
ãã¹ãŠã®Androidããã€ã¹ã¯ãGTalkãµãŒããŒãšã®äžå®ã®TCP / SSL / XMPPæ¥ç¶ããµããŒãããŠããŸãã 圌ã¯åžžã«ãããã¯ãŒã¯ã«ã¢ã¯ã»ã¹ã§ããŸãã æ¥ç¶ã¯ãç¹å¥ãªGTalkSeriveãµãŒãã¹ã«ãã£ãŠå¶åŸ¡ãããŸãã æ¥ç¶ãã¢ã¯ãã£ããã©ããã確èªããããã«ãåžžã«pingïŒãããããããŒãããŒãã¡ãã»ãŒãžãïŒãGoogleã®ãµãŒããŒã«éä¿¡ããæ¥ç¶ã倱ãããå Žåãèªåçã«åæ¥ç¶ããŸãã ãã®éä¿¡ãã£ãã«ã«ãããGoogleã¯ããã€ã¹ããªã¢ãŒãã§å¶åŸ¡ã§ããŸãã GTalkServiceãä»ããŠéä¿¡ãããã¡ãã»ãŒãžã¯ã確å®ã«ãã¹ãŠã®ã¹ããŒããã©ã³ã«å±ããŸãã ãã®ã¡ã«ããºã ã«ãããC2DMãµãŒãã¹ïŒããã€ã¹ã¡ãã»ãŒãžã³ã°ãã¬ãŒã ã¯ãŒã¯ãžã®ã¯ã©ãŠãïŒã®äžéšãæ©èœããéçºè ã¯ãŠãŒã¶ãŒã®ã¹ããŒããã©ã³ã«ã€ã³ã¹ããŒã«ãããã¢ããªã±ãŒã·ã§ã³ã«ç¹å¥ãªã³ãã³ããéä¿¡ã§ããŸãïŒæŽæ°ã®ããŠã³ããŒããªã©ïŒã ãã ããC2DMã¯ç¹å¥ãªãªã¯ãšã¹ããæ®ããäžéšã®éçºè ã®ã¿ãå©çšã§ããŸãã Androidã¯å°ãªããšã2ã€ã®ã³ãã³ãããµããŒãããããšãç¥ãããŠããŸãïŒREMOVE_ASSETããã³INSTALL_ASSETãããã«ãããGoogleã¯ä»»æã®ã¢ããªã±ãŒã·ã§ã³ãåé€ããã³ã€ã³ã¹ããŒã«ã§ããŸãã ãããã£ãŠãAndroidããŒã±ããã§ãã«ãŠã§ã¢ãçºèŠãããšãå瀟ã®ãšã³ãžãã¢ã¯GTalkServiceãä»ããŠREMOVE_ASSETã¡ãã»ãŒãžãéä¿¡ã§ããæªæã®ããããã°ã©ã ã¯ã€ã³ã¿ãŒãããã«æ¥ç¶ãããŠãããã¹ãŠã®ããã€ã¹ããããã«åé€ãããŸãã ããã¯ããã¥ãŒã¹ãããããããã«ãäŒç€Ÿã¯ãããè€æ°å䜿çšããŠããŸãã ãããŠéã®ç¶æ³ã GoogleãINSTALL_ASSETã³ãã³ããçºè¡ãããšããã«ãã¡ãã»ãŒãžãåä¿¡ããåAndroidã¹ããŒããã©ã³ãããã°ã©ã ãšãšãã«APKé åžããããããŠã³ããŒãããã€ã³ã¹ããŒã«ããŸãã ãã®å¯èœæ§ã¯è¯ãäžæ¹ã§ãGoogleã¯ãã¹ãŠã®æ°èãã«ãŠã§ã¢ãè¿ éã«åé€ã§ããŸãã ããããäžæ¹ã§ãããã¯æãã§ãã ãããã誰ããç¹å®ã®é»è©±ã®GTalkServiceãžã®SSLæ¥ç¶ã«MITMæ»æãå®è£ ããINSTALL_ASSETã¡ãã»ãŒãžãåœè£ ããŠé»è©±ã®ããçš®ã®ææãåããããšãã§ãããã©ãã§ããããïŒ ã·ã¹ãã ã¯å®å šã§ããïŒ
ããŒã¿ãã£ãã«ã®ä¿¡é Œæ§
Googleã€ã³ãã©ã¹ãã©ã¯ãã£ããã£ããã£ãããªãã·ã§ã³ã«ã€ããŠã¯èæ ®ããŸãããçè«çã«ã¯ãä»»æã®ã¢ããªã±ãŒã·ã§ã³ããã¹ãŠã®Androidããã€ã¹ã«ããã«ããŠã³ããŒãã§ããŸãã ãã®æ®µéã§ã¯ãããããã¡ã³ã¿ãžãŒãšèŠãªããŸãã ããããããçŸå®çã«æãããã®ã¯ãç¹å®ã®ããã€ã¹ã«åœã®ã³ãã³ããéä¿¡ããããšã§ãã ã¯ããäžã§è¿°ã¹ãããã«ãGTalkServiceæ¥ç¶ã¯å®å šã§ãããã¹ãŠã®ããŒã¿ã¯SSLãä»ããŠéä¿¡ãããŸãã ãããã£ãŠãã¡ãã»ãŒãžã®åºæ¬çãªã»ãã¥ãªãã£ãšæŽåæ§ã¯ãããã³ã«èªäœã«ãã£ãŠä¿èšŒãããŸãã ãã ãããããã®ä¿èšŒã®äŸ¡æ Œã¯ç¥ã£ãŠããŸãïŒ ãUncover SSL ãã®è³æããèªã¿ãã ããïŒã å¿ èŠã«å¿ããŠãããã€ã¹ãšGoogleãµãŒããŒéã§éä¿¡ããããã±ããã®SSLæ¥ç¶ãå±éºã«ãããããããååãããããéã«ããããããå¯èœæ§ããããŸãã ãããã®æ§é ãç解ããINSTALL_ASSETã¡ãã»ãŒãžãæ£ããåœé ããå Žåãããã€ã¹ã«ä»»æã®ã¢ããªã±ãŒã·ã§ã³ã匷å¶çã«ã€ã³ã¹ããŒã«ã§ããŸãã çè«çã«ã åé¡ã¯ãããšãã°ããžã¿ã«çœ²åãªã©ãä»ã®ä¿è·ã¬ãã«ã¯ãããŸããïŒ Googleããã®ã¡ãã»ãŒãžã調æ»ããã«ã¯ãåä¿¡ããå¿ èŠããããŸãã ã¹ããã¡ãŒããªã³ã«ããäŒç€Ÿã®ãšã³ãžãã¢ãGTalkServiceãä»ããŠINSTALL_ASSETã³ãã³ããå床éä¿¡ããã®ãåŸ ã€å¿ èŠããããšæããããããŸããã ãããããã€ã«ãªãã®ã§ããããïŒ å®éããã¹ãŠãããã·ã³ãã«ã§ãã ä»åŸããŠãŒã¶ãŒãAndroidããŒã±ããããã¡ãã»ãŒãžãã€ã³ã¹ããŒã«ãããã³ã«ããã®åããµãŒãã¹ã䜿çšããããšèšããŸãã [ã€ã³ã¹ããŒã«]ãã¿ã³ãæŒããšãGTalkServiceãä»ããŠINSTALL_ASSETãéä¿¡ãããããã°ã©ã ã®ç®çã®APKããã±ãŒãžãããŠã³ããŒãããŠããã€ã¹ã«ã€ã³ã¹ããŒã«ããããã»ã¹ãéå§ãããŸãã ããã«ã€ããŠã¯è©³ãã説æããŸãããéèŠãªããšã¯ã調æ»ã®ããã«INSTALL_ASSETã¡ãã»ãŒãžãåä¿¡ããããšã¯åé¡ã§ã¯ãªããšããããšã§ãã äžè¬ã«ããã©ãã£ãã¯ã衚瀺ããã«ã¯ïŒSSLæ¥ç¶ãä»ããŠéä¿¡ããããšããäºå®ã«ããããããïŒãã»ãšãã©å¿ èŠãããŸããã
- Androidãšãã¥ã¬ãŒã¿ãŒã®ã€ã¡ãŒãžãååŸããŸããããã«ã¯ãAndroidããŒã±ãããšé£æºããæ©èœãå«ãŸããŠããŸãã
- keytoolãŸãã¯portecleã䜿çšããŠãCA蚌ææžã/system/etc/security/cacerts.bkãªããžããªã«è¿œå ããŸãã
- CA蚌ææžã§sslsnifã䜿çšããŠMITMæ»æãå®è£ ããŸãã
tickle_id: 1277687266074
assetid: -155863831473120556
asset_name: Replica Island
asset_type: GAME
asset_package: com.replica.replicaisland
asset_blob_url: android.clients.google.com/market/download/Download?assetId=-155863831473120556&userId=986032118775&deviceId=1094117203906638597
asset_signature: Ayn2bWDqckQkKsBY4JurvCFpYN0
asset_size: 5144485
ã»ãšãã©ã®ãã©ã¡ãŒã¿ãŒã¯ããŠãŒã¶ãŒãAndroidããŒã±ããã«èŠæ±ããã¢ããªã±ãŒã·ã§ã³ãèšè¿°ããŠããŸãã èå³æ·±ãã®ã¯asset_signatureå±æ§ã§ãã ããã¯INSTALL_ASSETã¡ãã»ãŒãžã®æå·çœ²åã§ããããã®æŽåæ§ãããã«ä¿èšŒãããŠãããšæ³å®ã§ããŸãã æ²ããããªãããã¯ããã§ã¯ãããŸããã ããã¯ããŠãŒã¶ãŒãAndroidããŒã±ãããããªã¯ãšã¹ãããAPKãã¡ã€ã«ïŒã€ãŸããããã°ã©ã é åžãããïŒã®base64ãšã³ã³ãŒãããã·ã¥ã«ãããªãããšã¯ãæ奜家ã«ãã£ãŠé·ãé確ç«ãããŠããŸããã ä»åã¯ãAPKããã±ãŒãžãããŠã³ããŒããããã§ãã¯ãµã ã䜿çšããŠé©åãªå€æãå®è¡ããããšã«ãã£ãŠã®ã¿ç¢ºèªã§ããŸãã INSTALL_ASSETã¡ãã»ãŒãžïŒããã³ãã®ä»ã®ã¡ãã»ãŒãžïŒã«å¯Ÿããè¿œå ã®ä¿è·ããªãããšãæããã«ãªããŸãã æ»æè ãGTalkServiceéã®SSLæ¥ç¶ãååã§ããå Žåãçè«çã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«ãå«ããä»»æã®ã¡ãã»ãŒãžãé»è©±ã«éä¿¡ã§ããŸãã ãã¡ãããå€ãã®ããããããããããã®ãããªæ»æãæ³åããã®ã¯ããªãå°é£ã§ãã ãããè¡ãã«ã¯ãå°ãªããšããMITMæ»æãå®è£ ã§ããããã«ããããã«ã被害è ãšåããããã¯ãŒã¯äžã«ããå¿ èŠããããŸãã ãŠãŒã¶ãŒã®å€§éææã«ã€ããŠã¯çãããããããŸããã ããã¯ãéä¿¡ãã£ãã«ã®ã»ãã¥ãªãã£ã®æ¬ åŠãæãªããã®ã§ã¯ãããŸããããããã§ã®æ¬ é¥ãæªçšããèŠèŸŒã¿ã¯ãççŽã«èšã£ãŠåŒ±ãã§ãã ãããã£ãŠãããã«ã€ããŠã¯ãã説æããŸããããAndroidãã©ãããã©ãŒã ãšGTalkServiceã¡ã«ããºã ã«ã¯ä»ã«ã©ããªé©ããããã®ãââèŠãŠã¿ãŸãããã
GTalk Service Monitorã€ã³ã¿ãŒãã§ã€ã¹
AndroidããŒã±ãããšã®çžäºäœçš
GTalkServiceã¯ãAndroidããŒã±ããããã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããããã»ã¹ã«é¢äžããŠãããšäžèšã§è¿°ã¹ãŸããã ããã¯äžè¬çã«èå³æ·±ã話ã§ãã ããã«ã¯èå³æ·±ããã¥ã¢ã³ã¹ããããŸãã ãŸãããŠãŒã¶ãŒãåžå Žããããã°ã©ã ãã€ã³ã¹ããŒã«ããæé ãæ€èšããŸãã
- AndroidããŒã±ãããèµ·åããŸãã
- ã€ã³ã¹ããŒã«ããç®çã®ã¢ããªã±ãŒã·ã§ã³ãæ€çŽ¢ããŸãã
- ãã€ã³ã¹ããŒã«ããã¿ã³ãã¯ãªãã¯ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã«å¿ èŠãªç¹æš©ã®ç¢ºèªã
- ã¢ããªã±ãŒã·ã§ã³ãããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããŸãã
- ãŠãŒã¶ãŒã¯ãAndroidããŒã±ããã®ã¢ããªã€ã³ã¹ããŒã«ãã¿ã³ãã¯ãªãã¯ããŸãã
- ã¢ããªã±ãŒã·ã§ã³ã¯AndroidããŒã±ãããµãŒããŒã«POSTãªã¯ãšã¹ããéä¿¡ããŸãã
- AndroidããŒã±ãããµãŒããŒã¯ãã¢ããªã±ãŒã·ã§ã³ãC2DMã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããªã¯ãšã¹ãã«é¢ããæ å ±ãéä¿¡ããŸãã
- C2DMãµãŒããŒã¯ãGTalkServiceæ¥ç¶ãä»ããŠINSTALL_ASSETã¡ãã»ãŒãžããŠãŒã¶ãŒã®ã¹ããŒããã©ã³ã«éä¿¡ããŸãã
- GTalkServiceã³ã³ããŒãã³ãã¯INSTALL_ASSETã¡ãã»ãŒãžãåä¿¡ããVendingã³ã³ããŒãã³ããã¢ã¯ãã£ãåããŸãã
- Vendingã³ã³ããŒãã³ãã¯ãã¢ããªã±ãŒã·ã§ã³ã®APKããã±ãŒãžãããŠã³ããŒãããæçµçã«ã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ããŸãã
ã€ã³ã¿ãŒã»ããããããªã¯ãšã¹ãã¯æ¬¡ã®ãšããã§ãã
POST /market/api/ApiRequest HTTP/1.1
Content-Length: 524
Content-Type: application/x-www-form-urlencoded
Host: android.clients.google.com
Connection: Keep-Alive
User-Agent: Android-Market/2 (dream DRC83); gzip
version=2&request=CuACCvYBRFFBQUFLOEFBQUJvZWVEVGo4eGV4OVRJaW9 . . .
èå³æ·±ãã®ã¯æããã§é ããŠãããªã¯ãšã¹ããã©ã¡ãŒã¿ãé€ããŠããã¹ãŠã¯ããããªãã®ã§ãã Googleãç¥ã£ãŠããã°ãããã¯propobufç¬èªã®æ§é ã«ããã±ãŒãžåããããã®åŸbase64ã§ãšã³ã³ãŒããããããŒã¿ã§ãããšç°¡åã«æšæž¬ã§ããŸãã ããã§ãã ããã·ã¥ããã³ãŒãããæ§é ãã¢ã³ããã¯ãããšããªã¯ãšã¹ãããŒã¿ãååŸãããŸãã
1 {
1: "DQAAAK8AAABoeeDTj8xex9TIio . . ."
2: 0
[... ...]
13: "-606db3000d480d63"
}
2 {
10 {
1: "353999319718585473"
}
}
protobufãããã³ãŒãããåŸã®ãªã¯ãšã¹ãæ§é
ãã§ã«äœãã§ãããåé¡ããããŸãããã®ãã©ã¡ãŒã¿ãŒãŸãã¯ãã®ãã©ã¡ãŒã¿ãŒãäœãæ åœããŠãããã¯ããããŸããã ã»ãšãã©ã®å Žåããããã¯ããã€ã¹ã®èå¥åããã©ãããã©ãŒã ã«é¢ããæ å ±ãæ¿èªã®ããã®æ å ±ããããŠãã¡ãããããŒã±ããããèŠæ±ãããã¢ããªã±ãŒã·ã§ã³ã®èå¥åã§ãã ããã§ã¯ãAndroidããŒã±ããã§ã®äœæ¥ã«åå ããå€ãã®ãããããæ§é ã«ã€ããŠãé転ã®çµæãšããŠããã¢ãäœæãã説æãå©çšå¯èœã§ãããšèšããªããã°ãªããŸããã ãŸãããµã€ãcode.google.com/p/android-market-apiã«ã¯ãåžå ŽããããŸããŸãªããŒã¿ïŒèª¬æãããã°ã©ã ã¢ã€ã³ã³ãªã©ïŒãèŠæ±ã§ããããã«ãŸãšããŠèšè¿°ãããAPIãæ²èŒãããŠããŸãã 確ãã«ãã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«èŠæ±ã®æ§é ã«é¢ããããŒã¿ã¯ãããŸããã ããããé転ã¯æåãªAndroidãã©ãããã©ãŒã ã®ç 究è ã§ããJohn Oberheidã«ãã£ãŠè¡ãããŸãããJohnOberheidã¯ãèå³æ·±ãæ»æãå®è£ ããŸããã ãããã£ãŠãç瞮圢ã®ãªã¯ãšã¹ãã®æ§é ã¯æ¬¡ã®ããã«ãªããŸãã
[.. ..]
message InstallRequest {
optional string appId = 1;
}
message RequestContext {
required string authToken = 1;
[.. ..]
required string androidId = 4;
optional string deviceAndSdkVersion = 5;
[.. ..]
èŠæ±ããã®ãã£ãŒã«ãã®ã»ãšãã©ã¯ãããã€ã¹èªäœããæœåºã§ããŸãïŒããšãã°ãã€ã³ã¿ãŒãã§ãŒã¹èšèªãã·ã¹ãã ããŒãžã§ã³ãªã©ïŒã ãã ããappIdãã©ã¡ãŒã¿ãŒãšauthTokenãã©ã¡ãŒã¿ãŒã§ã¯ãããŸããã
- appId-AndroidããŒã±ããã®äžæã®ã¢ããªã±ãŒã·ã§ã³èå¥åã§ãã ãã®èå¥åã¯ã©ãã«ã衚瀺ãããªããããååŸããå¯äžã®æ¹æ³ã¯ãAndroidããŒã±ããããã¢ããªã±ãŒã·ã§ã³ããªã¯ãšã¹ãããprotobufæ§é ããèå¥åãååŸããŠãã©ãã£ãã¯ãååŸããããšã§ãã
- authTokenã¯ClientLoginã·ã¹ãã ã®ããŒã¯ã³ã§ãããAndroid MarketãµãŒããŒã¯ããã䜿çšããŠãªã¯ãšã¹ããèªèšŒã§ããŸãã
AccountManager accountManager = AccountManager.get(getApplicationContext());
Account acct = getAccount(accountManager);
accountManager.getAuthToken(acct, "android", false, new GetAuthTokenCallback(), null);
ããã¯ã©ãããæå³ã§ããïŒ äžã§åŒçšããprotobufæ§é ãã³ã³ãã€ã«ããAndroidããŒã±ãããµãŒããŒã«éä¿¡ããããã®POSTãªã¯ãšã¹ããäœæããããã®ãã¹ãŠã®ããŒã¿ãããããšãããããŸããã ãªã¯ãšã¹ããæ£ããå ŽåïŒãããæ£ããããšã確èªããŸãïŒãã¡ãã»ãŒãžINSTALL_ASSETãGTalkServiceãä»ããŠããã€ã¹ã«éä¿¡ãããæå®ããã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«ã«ã€ãªãããŸãïŒ ãŸããã·ã¹ãã ã¯ãŠãŒã¶ãŒããªã¯ãšã¹ããéä¿¡ããåã«ã€ã³ã¹ããŒã«ãèš±å¯ããããã«èšèšãããŠããããïŒåã³å³ãåç §ïŒã誰ã圌ã«äœãå°ããŸããã ãããŠãã¢ããªã±ãŒã·ã§ã³ã¯å¿ èŠãªãã¹ãŠã®æš©éã§ã·ã¹ãã ã«ã€ã³ã¹ããŒã«ãããŸãïŒ
ã¢ããªãä»ããæ»æ
AndroidããŒã±ããã®ã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ããŒã«ã¡ã«ããºã ã®åŸ®åŠãªç¹ãç解ããã®ã§ãJohn Oberheidããªããšãæåããããšã¬ã¬ã³ããªæ»æã«ã€ããŠè©±ãããããšãã§ããŸãã ã¢ã€ãã¢ã¯ããã§ãã ã€ã³ã¹ããŒã«èŠæ±ãèªåã§äœæã§ããå Žåããããèªåçã«è¡ãã¢ããªã±ãŒã·ã§ã³ãäœæããããšã劚ãããã®ã¯äœããããŸããã ãã®ãããªæ©èœãå®å šã«ç¡å®³ãªããã°ã©ã ã«è¿œå ããAndroidããŒã±ããïŒããã¯ç°¡åã«å¶åŸ¡ã§ããŸããïŒãéããŠé åžãéå§ãããšããããã€ã³ã¹ããŒã«ãããã¹ãŠã®ãŠãŒã¶ãŒã«å¥œããªãã®ãããŠã³ããŒãã§ããŸãïŒ ããã«èšã£ãŠãã£ãã Johnã¯PoCã¢ããªã±ãŒã·ã§ã³ãäœæããAngry Birds Bonus Levelsãšããååãä»ããŸãããããã¯ãAndroidããŒã±ãããŠãŒã¶ãŒã®æ³šç®ãéããããšã«ãªã£ãŠããŸãã æãç°¡åãªãœãŒã·ã£ã«ãšã³ãžãã¢ãªã³ã°ãæ©èœããŸããããŠãŒã¶ãŒã¯ããã°ã©ã ã®ã€ã³ã¹ããŒã«ãéå§ããŸããã æãæ°ãã€ããã®ã¯ãããããæŽæ°ãšãªã¢ã«ããã«3ã€ã®ããã°ã©ã ã®ã€ã³ã¹ããŒã«ã«é¢ããã¡ãã»ãŒãžãããããšã«æ°ä»ãããšããããšã§ããå Žæã远跡ããææçªå·ã«é»è©±ããããé£çµ¡å ãªã¹ããçãããšã§ãã ãããã®ãã¹ãŠã«å®éã«æªæã®ããæ©èœããããŸãããã決ããŠäœ¿çšãããŸããã§ããã ç§ã¯ãPoCããã¹ãããçŽåŸã«ç 究è ãGoogleã§åé¡ãå ±åããå瀟ããã§ã«ãã°ãä¿®æ£ããŠãããšèšããªããã°ãªããŸããã ãšããã§ã解決çã¯éåžžã«ç°¡åã§ããããšãå€æããŸããã ã·ã¹ãã ã¯ãAndroidããŒã±ãããä»ããŠè¡ãããã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«èŠæ±ããã¹ãŠèšé²ããçä¿¡INSTALL_ASSETã¡ãã»ãŒãžã«å¯ŸããŠå¯Ÿå¿ããèŠæ±ã以åã«è¡ãããããšã確èªããŸãã Vendingã³ã³ããŒãã³ããäºæããªãã¢ããªã±ãŒã·ã§ã³ã®INSTALL_ASSETã¡ãã»ãŒãžãåä¿¡ããå Žåãã³ãã³ãã¯åã«ç¡èŠãããŸãã ãã以äžã®åé¡ã¯ãªããšæãããŸãã ãããïŒ ã¡ãã»ãŒãžã®æ¬æã«ã¯ããã§ãã¯ãåãåãããšãã§ããç¹å¥ãªãã©ã°ãå«ãŸããŠããå ŽåããããŸãïŒã¢ããªã±ãŒã·ã§ã³ã®ãªã¢ãŒãåé€ã®æ©èœãç¶æããããšãå«ãïŒããããã¯å°ãç°ãªã話ã§ãã
ãã®èšäºã¯ãç 究è John Oberheidã«ããè³æã«åºã¥ããŠäœæãããŸãã ã
ããã«ãŒãã¬ãžã³ã 7æïŒ07ïŒ150
ããã«ãŒã賌èªãã