Pangbai泰拉记二周目(1)

第一节:题目

怎么藏了五段flag啊!!

第二节:过程

一个apk文件,首先先unzip一下看看里面有什么东西

$ unzip -l pbterrai.apk | grep -v META-INF
Archive:  pbterrai.apk
  Length      Date    Time    Name
---------  ---------- -----   ----
     2608  1981-01-01 01:01   assets/dexopt/baseline.prof
      262  1981-01-01 01:01   assets/dexopt/baseline.profm
  9488008  1981-01-01 01:01   classes.dex
   574040  1981-01-01 01:01   classes2.dex
     4216  1981-01-01 01:01   lib/arm64-v8a/libpangbaiterrai.so
     2952  1981-01-01 01:01   lib/armeabi-v7a/libpangbaiterrai.so
     3260  1981-01-01 01:01   lib/x86/libpangbaiterrai.so
     4232  1981-01-01 01:01   lib/x86_64/libpangbaiterrai.so
     2285  1981-01-01 01:01   assets/flag3_fragment.png
     1738  1981-01-01 01:01   DebugProbesKt.bin
     1006  1981-01-01 01:01   kotlin/annotation/annotation.kotlin_builtins
     8308  1981-01-01 01:01   kotlin/collections/collections.kotlin_builtins
     2674  1981-01-01 01:01   kotlin/concurrent/atomics/atomics.kotlin_builtins
      137  1981-01-01 01:01   kotlin/coroutines/coroutines.kotlin_builtins
      590  1981-01-01 01:01   kotlin/internal/internal.kotlin_builtins
    29399  1981-01-01 01:01   kotlin/kotlin.kotlin_builtins
     4184  1981-01-01 01:01   kotlin/ranges/ranges.kotlin_builtins
     4827  1981-01-01 01:01   kotlin/reflect/reflect.kotlin_builtins
     6320  1981-01-01 01:01   AndroidManifest.xml
      744  1981-01-01 01:01   res/-1.xml
      352  1981-01-01 01:01   res/-5.xml
     7778  1981-01-01 01:01   res/-6.webp
.....

有很多很多,但是我们知道本质上的apk其实就是一个zip,里面有很多一定会有的部分比如manifest.xml resources.arsc这些,而我们分析这些压缩包发现,其实有很多都是res INF 这样不太重要(flag基本不会在这里)的部分,所以我们过滤一下,筛选出比较重要的五部分,看看
$ unzip -l pbterrai.apk | grep -iE "manifest|\.arsc|flag|\.so$|\.dex$"
  9488008  1981-01-01 01:01   classes.dex
   574040  1981-01-01 01:01   classes2.dex
     4216  1981-01-01 01:01   lib/arm64-v8a/libpangbaiterrai.so
     2952  1981-01-01 01:01   lib/armeabi-v7a/libpangbaiterrai.so
     3260  1981-01-01 01:01   lib/x86/libpangbaiterrai.so
     4232  1981-01-01 01:01   lib/x86_64/libpangbaiterrai.so
     2285  1981-01-01 01:01   assets/flag3_fragment.png
     6320  1981-01-01 01:01   AndroidManifest.xml
  1273176  1981-01-01 01:01   resources.arsc


看到了flag3,事实上其他flag也确实藏在了这里的部分文件里,而且和最终结果相呼应的是,结果的flag也由五部分组成,也就是说每个文件格式下都有一个flag
我们把这些文件单独提取出来放到单独的文件里
unzip -o -q pbterrai.apk -d x AndroidManifest.xml resources.arsc classes.dex assets/flag3_fragment.png lib/x86_64/libpangbaiterrai.so

然后我cd 到x目录下去扫里面是否有flag
strings -e l AndroidManifest.xml                   | grep flag
strings resources.arsc                             | grep flag
strings assets/flag3_fragment.png                  | grep flag
strings classes.dex                                | grep flag
strings lib/x86_64/libpangbaiterrai.so             | grep flag

注意manifest因为是二进制字段所以直接搜flag不行,一定要-e l才可以
可以发现输出了很多flag,然后从里面找一找flag的字段,最终整理成下面的
flag1: flag{W31
flag2: c0m3_70_
flag3: 7h3_W0r
flag4: 1d_0f_@
flag5: ndr01d}

所以结果就是
flag{W31c0m3_70_7h3_W0r1d_0f_@ndr01d}