ソフトウェア

JavaScriptのアンチデバッグ技術をシンプルな発想で回避する方法


JavaScriptは実行するコードそのものをユーザーに公開してしまう仕様のため、リバースエンジニアリング対策のために難読化されていたり、アンチデバッガーが搭載されていたりします。そうしたアンチデバッグへのシンプルで効果的な対抗策がJavaScriptの解析技術を掲載しているブログ「nullpt.rs」にまとめられています。

Evading JavaScript Anti-Debugging Techniques
https://www.nullpt.rs/evading-anti-debugging-techniques


JavaScriptの動作を解析するためのデバッグツールは多くのブラウザに搭載されており、例えばGoogle Chromeの場合は開発者ツールの「ソース」タブからアクセスすることが可能です。解析したいJavaScriptを開き、コードの左側の部分をクリックすることでブレークポイントを設定でき、その行に到達した時点の変数やコールスタックの中身を確認できます。


GUIから設定する以外にも、コードの中に「debugger」という文を挿入することでもブレークポイントを設定することが可能です。デバッガーを開いていない場合にはdebugger文は無視されて通常通り動作しますが、デバッガーを開くとその行に到達した際にポーズがかかるようになります。


debugger文の仕組みを利用したアンチデバッグ技術の1つに、この「debugger」文を無限ループさせたり、大量に記入したりすることでデバッガーを利用させないようにするという手法が存在しています。解析する時に意図していない部分でのポーズが大量発生するため、ブレークポイントを利用できません。もちろん、「ブレークポイントを無効化」をオンにすればdebugger文を無視できますが、今度はユーザーが設定したブレークポイントも無効化されてしまいます。


nullpt.rsの著者たちが編み出した解決方法は「debuggerという予約語を別の言葉に置き換える」です。JavaScriptの言語の仕様そのものを変更することになるため、実現するためにFirefoxのソースコードを書き換えてビルドし直したとのこと。


今回採用された新たな予約語は「ticket_debugger」です。こうすることで、コードに埋め込まれているdebugger文を完全に無視して解析に必要な部分だけにポーズをかけることが可能になります。


nullpt.rsのブログではその他にも多数のアンチデバッグ技術回避方法が解説されているので、気になった人は確認してみてください。

この記事のタイトルとURLをコピーする

・関連記事
「JavaScript」はここから始まった、1995年のJavaScriptリリースはこんな感じ - GIGAZINE

ジェイムズ・ウェッブ宇宙望遠鏡はJavaScriptで制御されている - GIGAZINE

「100ドルをもらうか?コードを教わるか?」ホームレスがアプリ開発に成功した秘話 - GIGAZINE

開発者7万人に聞いたソフトウェア開発の今をまとめた「Stack Overflow Developer Survey 2022」 - GIGAZINE

「プリンス・オブ・ペルシャ」をJavaScriptで構築しブラウザで遊べるようにした「PrinceJS」レビュー - GIGAZINE

FirefoxがJavaScriptベンチマークテストの「SunSpider」でついにChromeを抜いたと報告、ただしSunSpiderは古いという指摘も - GIGAZINE

in ソフトウェア,   ウェブアプリ, Posted by log1d_ts

You can read the machine translated English article How to bypass JavaScript anti-debugging ….