Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2024年は難読化と仲良くなりたい
Search
みっちゃん
January 22, 2024
Programming
0
200
2024年は難読化と仲良くなりたい
ebisu.mobile #4での登壇内容です
https://hey.connpass.com/event/305181/
みっちゃん
January 22, 2024
Tweet
Share
More Decks by みっちゃん
See All by みっちゃん
ドキュメントから adbコマンドの仕組みを読み解く
mitchan
1
130
STORES二年生が得た新しい視点
mitchan
0
220
TabLayoutの「選択されていないインジケーター」にも色を付けるには
mitchan
0
37
Material Design とは
mitchan
0
59
勉強方法としてのコミュニティ活用
mitchan
0
660
Android端末のNFCを無効化しようとしてダメだった話
mitchan
1
4k
頑張ってKotlin率をちょっとあげた話
mitchan
0
170
Other Decks in Programming
See All in Programming
2 週間で Twitter Bot を作ってみた
contour_gara
0
770
Goのエラースタックトレースの歴史と今後
sonatard
10
1.8k
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
180
Scalable Customer Journey Orchestration (CJO)
lewuathe
0
420
From Spring Boot 2 to Spring Boot 3 with Java 21 and Jakarta EE
ivargrimstad
0
590
Documentation for users with AsciiDoc and Antora
ahus1
0
370
Node.js v22 で変わること
yosuke_furukawa
PRO
11
3.9k
効率化に挑戦してみたらモバイル開発が少し快適になった話
ryunakayama
0
140
ServerAction で Progressive Enhancement はどこまで頑張れるか? / progressive-enhancement-with-server-action
takefumiyoshii
6
430
FigmaとPHPで作る1ミリたりとも表示崩れしない最強の帳票印刷ソリューション
ttskch
43
19k
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
170
AmperとFleetを使ったAndroidアプリ
yoppie
0
260
Featured
See All Featured
For a Future-Friendly Web
brad_frost
172
9k
Bash Introduction
62gerente
605
210k
The Cult of Friendly URLs
andyhume
74
5.7k
The Mythical Team-Month
searls
216
42k
WebSockets: Embracing the real-time Web
robhawkes
59
7k
How to name files
jennybc
65
93k
A Tale of Four Properties
chriscoyier
152
22k
5 minutes of I Can Smell Your CMS
philhawksworth
199
19k
Ruby is Unlike a Banana
tanoku
96
10k
A Philosophy of Restraint
colly
197
16k
Become a Pro
speakerdeck
PRO
13
4.6k
The Brand Is Dead. Long Live the Brand.
mthomps
49
29k
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