More Related Content
PDF
PHPerがgolangでもがいてる話@第1回 関西Golang勉強会 PDF
Word press初心者が 基本アーキテクチャを ざっくりと学ぶ ODP
PPT
Perl Beginners #7 おとなのWAF PDF
KEY
エンジニアの為のWordPress入門 〜WordPressはWebAppプラットフォームです〜 PDF
PPTX
What's hot
PDF
WordPressの多言語プラグイン「qTranslate」で、あなたのサイトも世界にデビュー♪ PPT
PPTX
SWF LOVE (ASを使わないFlash勉強会 #1) PPTX
SWF LOVE (ASを使わないFlash勉強会) PDF
Wp プラグインapiから理解するword press.share KEY
WordPressプラグイン Jetpack って何だ?! ODP
PDF
PDF
WordPress 多言語化プラグインqTranslateの紹介 PDF
PDF
PDF
第21回関西PHP勉強会 ReactPHPは もっと流行って欲しい #phpkansai KEY
WordPress プラグイン Infinite Scroll を試してみた PDF
PDF
Drupal 8 - モダンなアーキテクチャのPHPベースOSS CMS PDF
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜 PPTX
PDF
PDF
PDF
Viewers also liked
PPTX
PDF
PDF
Ne the god_of_religion_of_islam PDF
Valsts pārvaldes institūciju pasūtīto pētījumu koordinācijas sistēma DOC
DOCX
Trabajo colaborativo list PDF
The Monthly Lekhapara, July 2015 PPTX
جای خالی مدیر ارشد برند در شرکت های ایرانی PPTX
PPTX
Plan clases ingles orinson valenciano PDF
Presentación de Servicios Prevengest PPTX
Kauno miesto savivaldybės 100 dienų ataskaita DOCX
PPTX
[KGC 2013] Online Game Security in China PDF
PDF
20120319 aws meister-reloaded-s3 PDF
PPT
More from Yosuke HASEGAWA
PDF
次世代プラットフォームのセキュリティモデル考察(前編) PDF
PDF
ES6時代におけるWeb開発者とセキュリティ業界の乖離 PPTX
PDF
HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API PDF
Bypass SOP, Theft Your Data - XSS Allstars from Japan / OWASP AppSec APAC 2014 PDF
PDF
WindowsユーザのためのはじめてのPerlプログラミング 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/