Quantcast
Channel: javascript – Gea-Suan Lin's BLOG
Viewing all 187 articles
Browse latest View live

用統計方法反推 JavaScript 壓縮程式的變數名稱

$
0
0

JavaScript 在正式提供服務時一般都會使用「YUI Compressor」、「UglifyJS」或是「Closure Compiler」壓縮後再拿到正式環境上使用,最主要的目的是為了降低網路傳輸量。

這些工具其中一個特點是,local function 與 local variable 會被較短的名字取代掉,這可以讓想要反組譯的人比較麻煩。

不過今天看到的這個工具可以解決「困擾」:「JSNice」。(在 Slashdot 上的「Machine Learning Used For JavaScript Code De-obfuscation」這篇看到的)

用統計方法去「猜測」這些 local function 與 local variable 應該叫什麼名字,讓人比較好理解。官方對準確度的說法是超過 60%:

In our experiments, we found JSNice to be effective for deobfuscating minified code. On average, more than 60% of the identifiers are recovered to the same name as before the minification process.

接下來會想辦法提供 UI 讓使用者可以選擇另外的名字:

Further, as JSNice computes multiple ranked suggestions, we provide a UI to navigate through these suggestions and select alternative identifier names.

先記錄起來,這網站很有趣,之後要 trace 別人的程式碼應該常常會用到 XDDD

Related Posts:


SIMD in JavaScript

$
0
0

SIMD in JavaScript」是 IntelMozilla 以及 Google 的計畫,希望在 EMCAScript 裡面增加規格,讓 EMCAScript 可以利用 CPU 的 SIMD 能力加速計算。

另外讓我想到的是 asm.js 也是用類似的技術想法 (做不同的方向),而且已經被 Firefox 22+ 以及 Google Chrome 28+ 支援了,效果相當好…

之後大家想要在 browser 上面做什麼事情,應該都會用類似的技術來做吧 (先檢測系統有沒有原生支援,沒有原生支援時用 plain javascript 模擬)。

Related Posts:

Mike Bostock 的 Visualizing Algorithms

$
0
0

Mike Bostock (D3.js 的創始人之一) 在 Eyeo 2014 上展現了要如何將演算法視覺化表現出來:「Visualizing Algorithms」。

既然是對演算法的展示,當然也都伴隨著對資料的處理。每一個圖形表示都有 D3.js 的 sample code 告訴你怎麼產生的。

與其他看到的 D3.js 範例不同,他給出來的範例可以感覺到「樸實無華」的壓迫感。文章開頭用梵谷「隆河上的星夜」也很配合整篇文章的風格。

有玩 D3.js 或是對資料視覺化的人有興趣或是有研究的人都應該去看他怎麼表現「動作」(演算法) 的部份。

Related Posts:

關於 jquery-latest.js…

$
0
0

jQuery 官方希望大家不要再使用 jquery-latest.js 了:「Don’t Use jquery-latest.js」。

由於他們發現有大量的網站使用 jquery-latest.js,如果直接照著字面上的意思升級到 2.0,會造成這些網站在 IE{6,7,8} 上爛掉:

To mitigate the risk of “breaking the web”, the jQuery team decided back in 2013 that jquery-latest.js could not be upgraded to the 2.0 branch even though that is technically the latest version. There would just be too many sites that would mysteriously stop working with older versions of Internet Explorer, and many of those sites may not be maintained today.

所以官方已經決定將這個檔案鎖定在 1.11.1 版:

As jQuery adoption has continued to grow, even that safeguard seems insufficient to protect against careless use of http://code.jquery.com/jquery-latest.js. So we have decided to stop updating this file, as well as the minified copy, keeping both files at version 1.11.1 forever. The latest released version is always available through either the jQuery core download page or the CDN home page. Developers can download the latest version from one of those pages or reference it in a script tag directly from the jQuery CDN by version number.

同時,這個決策得到 Google CDN team 的支持,所以 Google CDN 上的 http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js 也將鎖在 1.11.1:

The Google CDN team has joined us in this effort to prevent inadvertent web breakage and no longer updates the file at http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js. That file will stay locked at version 1.11.1 as well. However, note that this file currently has a very short cache time, which means you’re losing the performance benefit of of a long cache time that the CDN provides when you request a full version like 1.11.1 instead.

同時官方也再三宣導,請不要用 jquery-latest.js 了,應該在使用時指定版本號碼。

這個決策算是一種 workaround,避免全世界一堆網站爛掉…

Related Posts:

介紹 JavaScript 的影片

$
0
0

在「Must-watch videos about javascript」這邊列出了不少 JavaScript 相關的影片。不是給初學者看的,而是給已經研究過一陣子的人看的進階影片。

影片從 2009 年的「Nicholas Zakas: Scalable JavaScript Application Architecture」整理到 2014 年…

不過 2035 年那份「Gary Bernhardt: The Birth & Death of Javascript」是怎樣 XDDD

Related Posts:

jQuery 官網疑似被攻陷…

$
0
0

起因在「jQuery.com Malware Attack Puts Privileged Enterprise IT Accounts at Risk」這篇,RiskIQ 的人偵測到 jQuery 官方網站異常,帶有惡意軟體。檢查後發現在官網的 html 裡面出現了 jquery-cdn.com 這個非官方的 domain:

這個 domain 可以看到是全新建立的:

   Domain Name: JQUERY-CDN.COM
   Registrar: NAMESILO, LLC
   Whois Server: whois.namesilo.com
   Referral URL: http://www.namesilo.com
   Name Server: NS1.DNSOWL.COM
   Name Server: NS2.DNSOWL.COM
   Name Server: NS3.DNSOWL.COM
   Status: clientDeleteProhibited
   Status: clientRenewProhibited
   Status: clientTransferProhibited
   Status: clientUpdateProhibited
   Updated Date: 18-sep-2014
   Creation Date: 18-sep-2014
   Expiration Date: 18-sep-2015

透過這個 domain 一路穿出去將惡意程式導進來。

jQuery 官方收到 RiskIQ 的人通之後也開始調查發生什麼事情:「Was jquery.com Compromised?」、「Update on jQuery.com Compromises」。

就官方的調查看起來,還有好幾波不同的攻擊,故事還沒完結?

Related Posts:

nginx 打算使用 JavaScript 的方法...

$
0
0

nginx 的創辦人在接受 InfoWorld 訪問時提到了打算使用 JavaScript 做為設定檔的計畫:「The company plans to let you use JavaScript as an application language in its eponymous Web server」。

We're planning JavaScript configurations, using JavaScript in [an] Nginx configuration. We plan to be more efficient on these [configurations], and we plan to develop a flexible application platform. You can use JavaScript snippets inside configurations to allow more flexible handling of requests, to filter responses, to modify responses. Also, eventually, JavaScript can be used as [an] application language for Nginx. Currently we have only Perl and Lua [supported in Nginx]. Perl is our own model, and Lua is a third-party model.

目前的設定檔算是 DSL?還蠻有趣的想法...

Related Posts:

dropcap.js:頭字放大效果


用 npm 取代 Build Tools (像是 gulp 或 grunt)

$
0
0

這篇「How to Use npm as a Build Tool」教你如何用 package.jsonscripts 取代 gulp 或是 grunt 這類 Build Tools。

文章裡面可以看到各種奇技淫巧都出現了,dependency 的部份用 recursive 解決 (npm 內部自己再呼叫 npm 執行),stream 的部份用 pipe 解決 (這個到是很自然),然後用外部程式掛進來處理 watch 與 livereload,甚至還出現可以自己寫 js 檔案呼叫的方法... XDDD

無所不用其極!反正我就是不要用 gulp 與 grunt... XD

可以欣賞一下怎麼做的...

JavaScript 混淆工具

$
0
0

看到「12 Days of HaXmas: Improvements to jsobfu」這篇文章裡提到 JSObfu 這個工具...

文章裡的範例:

$ echo "console.log('Hello World')" | jsobfu

window[(function () { var E="ole",d="ons",f="c"; return f+d+E })()][(String.fromChar
Code(108,111,0147))](String.fromCharCode(0x48,0x65,0154,0154,111,32,0127,0x6f,114,01
54,0x64));

如果要他滾三次,就變成:

$ echo "console.log('Hello World')" | jsobfu 3

window[(function(){var T=String[(String.fromCharCode(102,114,0x6f,109,0x43,104,97,0x
72,0x43,0157,0x64,0145))](('j'.length*0x39+54),('h'.length*(3*('X'.length*024+8)+9)+
15),(1*('Q'.length*(1*0x40+14)+19)+4)),Z=(function(){var c=String.fromCharCode(0x6e,
0163),I=String.fromCharCode(99,0x6f);return I+c;})();return Z+T;})()][(String[(Strin
g[((function () { var r="de",t="mCharCo",M="f",_="ro"; return M+_+t+r })())]((0x6*0x
f+12),(01*('J'.length*('z'.length*(4*0x9+4)+27)+1)+46),(0x37*'Bw'.length+1),('K'.len
gth*(0x3*0x1a+17)+14),(02*(1*(1*(05*'RIZ'.length+2)+6)+3)+15),('X'.length*('zzJA'.le
ngth*021+15)+21),(0x1*0111+24),('FK'.length*0x2b+28),('z'.length*0x43+0),(03*33+12),
('AZa'.length*('NKY'.length*(02*4+3)+0)+1),(1*0x5c+9)))](('u'.length*(01*('KR'.lengt
h*('av'.length*0x7+3)+5)+19)+(01*('j'.length*056+0)+4)),('z'.length*(String.fromChar
Code(0x67,85,0155,0156,75,84,0114,0x4c)[((function () { var f="ngth",F="e",x="l"; re
turn x+F+f })())]*((function () { var n='m',a='Q'; return a+n })()[(String.fromCharC
ode(0154,101,110,0x67,0x74,104))]*(function () { var w='d',A='tMf'; return A+w })()[
((function () { var yG="ngth",q5="e",J="l"; return J+q5+yG })())]+'SX'.length)+'crFi
Kaq'.length)+(1*026+2)),('p'.length*(06*15+10)+'nnU'.length)))]((function(){var En=S
tring[(String.fromCharCode(0146,0x72,0x6f,0x6d,0103,104,97,0x72,67,0x6f,0144,101))](
(3*041+9),('eHUOhZL'.length*(0x1*(01*9+1)+3)+9)),Y=(function(){var z=(function () {
var Sf='r'; return Sf })(),Z=(function () { var N='o'; return N })(),C=String.fromCh
arCode(0x57);return C+Z+z;})(),k=String[((function () { var b="e",s="od",p="fromCha"
,H="rC"; return p+H+s+b })())](('C'.length*('H'.length*('Ia'.length*0xf+3)+12)+27),(
'G'.length*(01*('Wv'.length*25+10)+27)+14),('Q'.length*077+45),('MXq'.length*30+18),
(1*('B'.length*(0x1*29+20)+24)+38),(0x2*020+0));return k+Y+En;})());

嘖嘖... (趕快裝起來玩)

Mozilla 的 Shumway 登陸 Firefox Nightly Channel

$
0
0

MozillaShumway 專案是用 JavaScript 實作的 Flash Player,算是把 Flash Plugin 淘汰掉的方案:

Shumway is an HTML5 technology experiment that explores building a faithful and efficient renderer for the SWF file format without native code assistance.

由於是跑在 JavaScript 內,安全性受到 SpiderMonkey 的 Sandbox 保護,相較於 Adobe 常常出 security update 讓人有點頭痛...

最近 Shumway 的大進展是在 Firefox Nightly Channel 啟用了部份網站,可以測試 Amazon.com 上的影片:「Firefox Nightly now plays Amazon.com Flash videos using Shumway」。

不知道有沒有機會 porting 到 Google Chrome 上面...

Windows 10 的 IE 將會有 asm.js 支援

$
0
0

Twitter 上看到的:「Bringing asm.js to the Chakra JavaScript engine in Windows 10」。

這樣只剩下 Safari 還沒支援,其他幾個主流瀏覽器都支援了:(出自維基百科「asm.js」條目)

Mozilla Firefox was the first web browser to implement asm.js-specific optimizations, starting with Firefox 22. The optimizations of Google Chrome's V8 JavaScript engine in Chrome 28 made asm.js benchmarks more than twice as fast as prior versions of Chrome.

錯誤訊息「undefined is not a function」總算要改善了...

用 mermaid 畫流程圖...

$
0
0

mermaid 這個專案畫出來的圖還蠻順眼,雖然與 DOT graph 的語法不太一樣,不過還是很簡單,看一下介紹就會用了。

cdnjs 上有 hosting,把 code 放到 div 裡面,設定 class="mermaid",然後直接 script 掛進來就可以了。不過最近 CloudFlare 的速度一直很不順,在意的人可以考慮自己 hosting 一份。

簡單的像是這樣:

比較複雜點的:

Google Chrome 41 的加速改善

$
0
0

在「New JavaScript techniques for rapid page loads」這篇提到了 Google Chrome 41 對網頁速度的改善,尤其是 JavaScript 很多的情況下:

另外 Google Chrome 42 則會再透過 cache 加速 (目前的穩定版是 41):

Chrome 42 introduces an advanced technique of storing a local copy of the compiled code, so that when the user returns to the page the downloading, parsing, and compiling steps can all be skipped. Across all page loads, this allows Chrome to avoid about 40% of compile time and saves precious battery on mobile devices.

jQuery 這類經常被重複載入的程式碼將會被 compile + cache,大幅加快頁面呈現的速度。

從另外一方面觀察,已經進展到使用 cache 機制加速,看起來其他的都做的差不多了?


2006 年的 jQuery 程式碼...

在瀏覽器上面用 JavaScript 進行 Side-channel attack

$
0
0

用 JavaScript 就可以攻擊 L3 cache,進而取得資料:「JavaScript CPU cache snooper tells crooks EVERYTHING you do online」。

論文出自「The Spy in the Sandbox – Practical Cache Attacks in Javascript」(PDF) 這篇。

不需要任何外掛或 exploit,就純粹是利用 cache 反應時間的 side-channel attack。另外由於 AMD 的 cache 架構不同,這次的攻擊實作僅對 Intel 有效:

The Intel cache micro-architecture isinclusive– all elements in the L1 cache must also exist in the L2 and L3 caches. Conversely, if a memory element is evicted fromthe L3 cache, it is also immediately evicted from the L2 and L1 cache. It should be noted that the AMD cachemicro-architecture is exclusive, and thus the attacks described in this report are not immediately applicable tothat platform.

這次的攻擊方法真變態...

Google 對 GitHub 先前遭受 GFW 的 DDoS 攻擊的分析

$
0
0

Google Online Security 分析了前陣子 GitHub 被 DDoS 攻擊的行為:「A Javascript-based DDoS Attack as seen by Safe Browsing」。

透過 GoogleSafe Browsing,針對 baidu.com 這個網域的 injection 情況分析:

可以看得出來分成多個不同階段攻擊。其中 AWSCloudFront 承受了不小的壓力,不過畢竟是商用水準的 CDN,沒那麼容易垮掉。後來則是攻擊 GitHub 造成影響而上了新聞。

最終還是繼續推廣 TLS,可以避免中間被 injection 攻擊:

Had the entire web already moved to encrypted traffic via TLS, such an injection attack would not have been possible.

Mozilla Developer Network (MDN) 上的 JavaScript 教學

$
0
0

Mozilla Developer Network (MDN) 寫了一篇關於 JavaScript 的介紹文章,算是以現在的角度來教 JavaScript:「A re-introduction to JavaScript (JS tutorial)」。

不是給完全不懂的人入門看的,而是對程式語言有了解的人看的。

文章裡面不單純只是教學,還引用了許多重要的文獻,尤其是 ECMAScript 規格書。有想要考據確認規格書怎麼定義會很方便。

而最後面還提到了 browser 上 DOM 實作時的 memory leak 問題以及解法,這對於現在 single page application 的應用也愈來愈重要了。

AWS 推出 Amazon API Gateway

$
0
0

AWS 推出了「Amazon API Gateway – Build and Run Scalable Application Backends」,使得 Scalable API 又前進了一步。

API Gateway 可以直接將 HTTP Endpoint 接上 AWS Lambda 提供服務,並且也會自動接上 CloudFront,不過 CloudFront 不可選等級,目前看起來是最低的 Class 100,所以老問題還是沒解,如果不是用 168.95.1.1168.95.192.1,我們家的 IP 會被解去 ARN (Stockholm Arlanda Airport) XD

  4.|-- snuh-3201.hinet.net        0.0%    10    0.3   0.3   0.3   0.3   0.0
  5.|-- tpdt-3011.hinet.net        0.0%    10    6.7   9.0   4.8  12.5   2.8
  6.|-- r4101-s2.tp.hinet.net      0.0%    10    0.5   0.9   0.5   1.5   0.0
  7.|-- r4001-s2.tp.hinet.net      0.0%    10    3.8   1.1   0.5   3.8   1.2
  8.|-- r11-pa.us.hinet.net        0.0%    10  199.8 151.6 143.1 199.8  19.0
  9.|-- las-bb1-link.telia.net     0.0%    10  140.6 142.6 140.5 159.7   6.0
 10.|-- sjo-b21-link.telia.net     0.0%    10  141.6 142.1 141.5 146.1   1.2
 11.|-- nyk-bb2-link.telia.net     0.0%    10  217.0 218.9 217.0 224.0   2.6
 12.|-- kbn-bb4-link.telia.net     0.0%    10  305.7 305.8 305.7 306.2   0.0
 13.|-- s-bb4-link.telia.net       0.0%    10  316.4 316.4 316.4 316.6   0.0
 14.|-- s-b9-link.telia.net       10.0%    10  316.4 316.5 316.4 317.5   0.0
 15.|-- amazon-ic-300293-s-b9.c.t 10.0%    10  311.5 311.5 311.4 311.5   0.0
 16.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 17.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 18.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 19.|-- server-54-230-96-67.arn1. 10.0%    10  311.5 311.8 311.5 313.2   0.4

除了使用提供的 url 以外 (HTTPS Endpoint),也可以接上自己的 domain (以及對應的 SSL certificate):

另外功能是產生 SDK,支援 iOSAndroid 以及 JavaScript 三種版本:

這樣又簡化了不少東西...

Viewing all 187 articles
Browse latest View live