More Related Content
KEY
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜 PPTX
PDF
PDF
Word press初心者が 基本アーキテクチャを ざっくりと学ぶ ODP
PPT
Perl Beginners #7 おとなのWAF PDF
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会 PDF
What's hot
KEY
WordPress プラグイン Infinite Scroll を試してみた PDF
Wp プラグインapiから理解するword press.share PDF
PDF
PDF
WordPressの多言語プラグイン「qTranslate」で、あなたのサイトも世界にデビュー♪ ODP
PDF
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS PDF
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai PPTX
SWF LOVE (ASを使わないFlash勉強会 #1) PDF
PDF
WordPress 多言語化プラグインqTranslateの紹介 PPT
KEY
WordPressプラグイン Jetpack って何だ?! PDF
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜 PDF
PPTX
SWF LOVE (ASを使わないFlash勉強会) PDF
PDF
PDF
PPTX
Viewers also liked
PPTX
[KGC 2013] Online Game Security in China PPTX
PDF
Presentación de Servicios Prevengest PPTX
Kauno miesto savivaldybės 100 dienų ataskaita DOCX
PDF
PPT
DOCX
Trabajo colaborativo list PDF
20120319 aws meister-reloaded-s3 PPTX
PPTX
جای خالی مدیر ارشد برند در شرکت های ایرانی PDF
Valsts pārvaldes institūciju pasūtīto pētījumu koordinācijas sistēma PPTX
Plan clases ingles orinson valenciano PDF
PDF
PDF
The Monthly Lekhapara, July 2015 PDF
Ne the god_of_religion_of_islam DOC
More from Yosuke HASEGAWA
PDF
次世代プラットフォームのセキュリティモデル考察(前編) PDF
WindowsユーザのためのはじめてのPerlプログラミング PDF
PDF
HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API PDF
PPTX
PDF
ES6時代におけるWeb開発者とセキュリティ業界の乖離 PDF
Bypass SOP, Theft Your Data - XSS Allstars from Japan / OWASP AppSec APAC 2014 Chrome-eject がこの先生きのこるには
- 1.
- 2.
Who am I?
はせがわようすけ
• http://utf-8.jp/
• 顔文字でJavaScript書いたり
• 顔文字で86バイナリ書いたり
@hasegawayosuke http://utf-8.jp/
- 3.
- 4.
- 5.
Chrome-eject uses NPAPI
NPAPIplugin
• Netscape Plugin API
• DLL形式でブラウザの機能を拡張
• Flash Player, Silverlight, ...
• http://www.slideshare.net/TNaruto/npapi-26722229
NPAPI plugin in Chrome Extension
• JavaScriptだけで出来ないことを実現
• Chrome拡張の制約を超えて何でも可能
• でもDLL書かないと…
@hasegawayosuke http://utf-8.jp/
- 6.
- 7.
Chrome-eject uses NPAPI
//manifest.json
"plugins" : [ { "path" : "win32api.dll", "public" : false } ]
// background.html
<embed type="application/x-win32api-dynamic-call" id="p" hidden="true" />
var npwin32;
var mciSendString;
document.addEventListener( "DOMContentLoaded", function (){
chrome.browserAction.onClicked.addListener( function( tab ){
if( npwin32 === undefined ){
npwin32 = document.getElementById( "p" );
}
if( mciSendString === undefined ){
mciSendString = npwin32.import( "winmm.dll",
"DWORD mciSendStringW( LPCWSTR, DWORD, UINT, DWORD )"
);
}
if( mciSendString){
var r = mciSendString( "set cdaudio door open", 0, 0, 0 );
}
} );
} );
@hasegawayosuke http://utf-8.jp/
- 8.
NPWIN32 - callback
//import DLL functions
var EnumWindows = npwin32.import(
"user32.dll", "BOOL EnumWindows( CALLBACK, DWORD )" );
var GetWindowText = npwin32.import(
"user32.dll", "INT GetWindowTextW( DWORD, LPWSTR, INT )" );
// create CALLBACK object
var func = npwin32.callback(
function ( hwnd, lparam ){
var buf = new Array( 257 ).join( " " ); // space * 256
if( GetWindowText( hwnd, buf, 256 ) ){
alert( hwnd + " : " + GetwindowText.arg( 1 ) );
}
},
"BOOL (DWORD, DWORD)"
);
EnumWindows( func, 0 );
@hasegawayosuke http://utf-8.jp/
- 9.
- 10.
- 11.
How do Ieject without NPAPI?
Native Messaging API
@hasegawayosuke http://utf-8.jp/
- 12.
How do Ieject without NPAPI?
Native Messaging API
• http://developer.chrome.com/extensions
/messaging.html#native-messaging
• Chrome拡張と実行ファイル間でstdioを通じて
通信できる
• 事前にmanifestファイルをレジストリに登録
する必要がある
• しかもHKLM!
(☝ ՞
՞)☝気軽にejectできない!
@hasegawayosuke http://utf-8.jp/
- 13.
- 14.
How do Ieject without NPAPI?
キタ━━━━(゚∀゚)━━━━ !!!!!
@hasegawayosuke http://utf-8.jp/
- 15.
- 16.
- 17.
- 18.
- 19.
How do Ieject ?
• 拡張のなかにejectするWSHファイル(*.vbs)を
含めておく
• chrome.downloads.download APIを使ってvbs
をローカルにダウンロードさせる
• chrome.downloads.open APIを使ってダウン
ロードしたvbsファイルを実行する
• うまくいけば eject 完了!
@hasegawayosuke http://utf-8.jp/
- 20.
- 21.
chrome.downloads
var url =chrome.extension.getURL( "eject.vbs" );
chrome.downloads.download( {
url : url,
filename : "./" +
url.replace( /^chrome-extension:///, "" ),
conflictAction : "overwrite"
}, function( id ){
if( id === undefined ) return;
setTimeout( function(){
chrome.downloads.open( id );
chrome.downloads.erase( { id : id } );
}, 2000 );
} );
いまいち動きがおかしい。donloadのcallbackが呼ばれてすぐだとファ
イルを開けないので2秒待ちを入れている
@hasegawayosuke http://utf-8.jp/
- 22.
- 23.
- 24.
Conclusion - howto eject from Chrome Extension
• NPAPIは今後使えない
• Native MessagingはNPAPIほど気軽には使いに
くい
• chrome.system.storageはいまいちおかしい
• chrome.downloadsはZoneIdつけてくれる
• もう少し待てばもっとejectしやすくなるは
ず!
(☝ ՞
՞)☝ウイーン
Special Thanks to @Akkiesoft and Eject-command Users Group
@hasegawayosuke http://utf-8.jp/