Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【DroidKaigi 2026 後夜祭】マルウェアはどのように動的ロードを用いて アプリ挙動...

Avatar for Haruto K. Haruto K.
September 29, 2026
4

【DroidKaigi 2026 後夜祭】マルウェアはどのように動的ロードを用いて アプリ挙動を後から変えるのか

Avatar for Haruto K.

Haruto K.

September 29, 2026

Transcript

  1. 自己紹介 加藤 遥斗(@HalunoYo) Android Engineer @ BizReach セキュリティ&低レイヤー好き アセンブラ /

    CTF(pwn)に夢中 ※発表内容は業務内容とは関係ありません DroidKaigi 2026登壇動画
  2. 実際にストアに載ったマルウェア PDFリーダ 翻訳ツール Anatsa Joker ファイルマネージャ 懐中電灯 壁紙 QRコードリーダ Etc

    ファイルマネージャなどに擬態 銀行ログイン情報の奪取・キーロガーなど 壁紙、懐中電灯などに擬態 OTP盗聴・スクショ撮影・連絡先収集など 写真エディタ
  3. DEXファイル生成 by Gradle val generateDex = tasks.register<JavaExec>("generateDex") { … mainClass

    = "com.android.tools.r8.D8" argumentProviders.add( CommandLineArgumentProvider { … }) }
  4. ドロッパー作成 (ロジック ) fun inject() { val dexBytes = “646578…”

    val loader = InMemoryDexClassLoader( ByteBuffer.wrap(dexBytes), javaClass.classLoader ) val clazz = loader.loadClass("dev.sandbox.plugin.Payload") val instance = clazz.getDeclaredConstructor().newInstance() val result = clazz.getMethod("greet").invoke(instance) as String _title.value = result }
  5. ドロッパー作成 (ロジック ) fun inject() { val dexBytes = “646578…”

    val loader = InMemoryDexClassLoader( ByteBuffer.wrap(dexBytes), javaClass.classLoader ) val clazz = loader.loadClass("dev.sandbox.plugin.Payload") val instance = clazz.getDeclaredConstructor().newInstance() val result = clazz.getMethod("greet").invoke(instance) as String _title.value = result }
  6. ドロッパー作成 (ロジック ) fun inject() { val dexBytes = “646578…”

    val loader = InMemoryDexClassLoader( ByteBuffer.wrap(dexBytes), javaClass.classLoader ) val clazz = loader.loadClass("dev.sandbox.plugin.Payload") val instance = clazz.getDeclaredConstructor().newInstance() val result = clazz.getMethod("greet").invoke(instance) as String _title.value = result }
  7. ドロッパー作成 (ロジック ) val result = Payload().greet() val clazz =

    loader.loadClass("dev.sandbox.plugin.Payload") val instance = clazz.getDeclaredConstructor().newInstance() val result = clazz.getMethod("greet").invoke(instance) as String
  8. ドロッパー作成 (ロジック ) val clazz = loader.loadClass("dev.sandbox.plugin.Payload") val instance =

    clazz.getDeclaredConstructor().newInstance() val result = clazz.getMethod("greet").invoke(instance) as String リフレクション
  9. ドロッパー作成 (ロジック ) fun inject() { val dexBytes = “646578…”

    val loader = InMemoryDexClassLoader( ByteBuffer.wrap(dexBytes), javaClass.classLoader ) val clazz = loader.loadClass("dev.sandbox.plugin.Payload") val instance = clazz.getDeclaredConstructor().newInstance() val result = clazz.getMethod("greet").invoke(instance) as String _title.value = result }
  10. Kotlin Fest 2026 セッション名 Kotlin × グラフ理論: Unstable APIで挑む関数レベルAffected Test

    Selectionライブラリ 基本情報 日時 : 11 / 14(土) 16:30 - 17:10 場所:東京コンファレンスセンター品川