本文介绍apk文件反编译后文件可读写漏洞的检查方法
一、文件任意读写所需的Java方法:
openFileOutput(String name , int mode)
name:文件名
mode:打开方式
mode有如下几种:
Context.MODE_PRIVATE = 0 (0x0000)--代表文件是私有数据,只能被应用本身访问,写入后会覆盖原有内容。这是默认的操作模式。
Context.APPEND = 32768 (0x8000)------代表文件是私有数据,只能被应用本身访问,是追加方式写入,不会覆盖原来的内容
Context.MODE_WORLD_READABLE = 1 (0x0001)---代表文件可以被其他应用读取
Context.MODE_WORLD_WRITEABLE = 2 (0x0002)----代表文件可以被其他应用写入
二、文件任意读写漏洞风险点
mode=读、写、读写的时候,具有风险。
三、apk反编译检查
smali代码中检查openFileOutput方法,再判断mode的值,为0x1,0x2,0x3表示文件可读、可写、可读写。例如:
const-string/jumbo v3, "libcuid.so"
const/4 v4, 0x1
invoke-virtual {v2, v3, v4}, Landroid/content/Context;->openFileOutput(Ljava/lang/String;I)Ljava/io/FileOutputStream;
表示文件libcuid.so可读。