Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
2024年は難読化と仲良くなりたい
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
みっちゃん
January 22, 2024
Programming
450
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2024年は難読化と仲良くなりたい
ebisu.mobile #4での登壇内容です
https://hey.connpass.com/event/305181/
みっちゃん
January 22, 2024
More Decks by みっちゃん
See All by みっちゃん
Do you use git worktree?
mitchan
0
170
Android値受け渡し大全 〜 設計を制する者が「渡す」を制す 〜
mitchan
1
7.5k
2024年にチャレンジしたことを振り返るぞ
mitchan
0
310
DroidKaigi初めて登壇したレポ
mitchan
1
280
実践!難読化ガイド
mitchan
0
4.6k
「実践!難読化ガイド」事前予告編
mitchan
0
350
画面遷移 〜iOSとAndroid〜
mitchan
0
500
パソコン音痴な私がモバイル開発界隈でぬくぬく成長している理由
mitchan
0
640
ドキュメントから adbコマンドの仕組みを読み解く
mitchan
1
440
Other Decks in Programming
See All in Programming
Seven New Principles of Software Engineering
yegor256
0
440
Next.js: The final boss of Web Performance
guaca
0
380
あなたの await、OS まで届いてる? strace で覗く JavaScript の非同期
hasutosasaki
1
1.9k
動画プレイヤーはなぜカクつくのか 〜Flutterのレンダリングとネイティブの境界を解剖する〜
naruogram
0
320
Web3Dライブラリを作ってVue Custom Rendererの仕組みを理解しよう / lets learn vue custom renderer by making 3d library
drumath2237
1
120
高橋メソッドでCVE解説シリーズ 〜CVE-2026-112816〜
hakkadaikon
0
200
Inertia Rails: The One-Person Framework with React & Friends
skryukov
0
380
まずはコードより業務と向き合う:テーブル解体のためにPdMを呼んだ話
sakawe_ee
0
140
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
250
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
4
1.8k
SODA - FACT BOOK(EN)
sodainc
1
200
クラウドゲーミングのパフォーマンス最適化に挑む / Cloud Gaming Performance Tuning
vivion
0
320
Featured
See All Featured
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
HDC tutorial
michielstock
2
1k
Color Theory Basics | Prateek | Gurzu
gurzu
1
510
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
YesSQL, Process and Tooling at Scale
rocio
174
15k
So, you think you're a good person
axbom
PRO
2
2.2k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
560
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
470
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.4k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
First, design no harm
axbom
PRO
2
1.4k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Transcript
2024年は難読化と仲良くなりたい 登壇者:STORES 決済 Androidチーム みっちゃん 1
自己紹介 名前:みっちゃん(4月で3年目) 所属:STORES 決済 Androidチーム ナワバリ:おおさか My fun:犬!!猫!! Twitter: @mimimi_engineer
2
コンピュータプログラムの動作を変えずに、プログラムコードの内部的な手続き の内容・構造・データなどを、人間にとって読み取りにくくなるように改変・加 工すること。難読化されたコードは第三者によるプログラムの解読・解析が困難 になる。 参考:wikipedia 難読化 (ソフトウェア) 難読化ってなに? 3
変数や関数名を意味のない文字列に変換するなどしてコードを読みにく くし、悪意のあるユーザーからコードを守ることができる! セキュリティ対策の一環! 4
• R8(あーるえいと) Androidアプリの「圧縮」「難読化」「最適化」を行うのツールのこと! どんなツールを使うの? 5
• Android Gradle プラグイン 3.4.0 以上を使用したプロジェクトのビルドでは、デフォルト でR8 コンパイラと連携して、コンパイル時に圧縮・難読化・最適化が実行される • 難読化によってコードが悪意のあるユーザから守られる
• 圧縮・最適化によってAndroidアプリ/ ライブラリのサイズが小さくなる 参考:Android Developer アプリの圧縮、難読化、最適化 R8(あーるえいと) 6
R8 は ProGuard ルールファイルを通じて、デフォルトの動作を変更したり、ア プリの構造を正確に把握したりできます。 参考:R8 の構成ファイル • <module-dir>/proguard-rules.pro 独自の
ProGuard ルールをこのファイルに含めます。 どんなコードを書くの? 7
ProGuardルールファイルに-keepを追加し、 特定のコードを削除しないように宣言することができる どんなコードを書くの? 8
STORES 決済 はアプリだけでなくSDKも公開している 2023年12月27日夜 年明け1月4日から新バージョンSDKのQAを開始するための準備中、事件勃発。 2023年は難読化とケンカしちゃった 9
事件勃発! 新バージョンSDKのQA用アプリを用意するのに、 難読化ありでビルドが通らない・・・!
難読化ってなに 先輩明日からお 休みですよね 29日休みたい だが28日一人で 解決できる自信 はない
ウ、ウワァーーーーーーーーーーーーーーーーーーー!!!!!(大混乱)
落ち着いてエラーをみます。
HogeManagerクラスのgetInstance()というメソッドが参照できなくなっている
companion object内に定義されたメソッドの難読化回避はこうしてこう。 参考資料:keep rules companion object
ErrorTypesインターフェースのUNAUTHORIZEDという定数が参照できなくなっている
companion object内に定義された定数の難読化回避はこうしてこう。 参考資料:keep rules companion object
あれ!!できない!!!
アッ・・・!! classじゃなくてinterfaceだった!!
こうだ!
え・・・ダメなんだけど・・・
interface内のcompanion objectに定義された定数を難読化対象から外すような proguardルールはどう書けばよかったのか、結局わからなかった・・・
@Keepで難読化回避
@Keepアノテーションとは • @Keepも-keepと同じで難読化の対象から外す役割がある • ライブラリコードの中では使用しちゃだめ ◦ (🚨Android Developersにベストプラクティスとしての記載あり)
2024年は・・・ 難読化は友達!怖くないよ!
おしまい 26