吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 18100|回复: 131
收起左侧

[Android 原创] 续 某哩某哩APP之m3u8解密分析之跳过so文件 从APP日志入手(AES/CBC模式)

    [复制链接]
闷骚小贱男 发表于 2021-2-23 13:35
本帖最后由 闷骚小贱男 于 2021-2-24 16:35 编辑

前排提示!!!!!

论坛禁止留联系方式!!
禁止求成品,也没有成品!


写在前面的话

前段时间已经研究过这个平台网页和APP的AES加解密方式了。
最近发现这个平台的APP的加解密方式更新了,所以又继续研究了下...


本贴用到的工具

1.反编译:jadx+NP管理器+Androidkiller(mt管理器的日志注入或Androidkiller的log/toast均可或别的工具均可)[jadx看java,NP管理器用来打印字符串APP,Androidkiller可以实时查看日志内容]
2.抓包:fiddler+安卓模拟器(这里用的是逍遥)
3.加解密网站(由于可能会...所以这里就不贴了)

抓包

1.打开APP抓包部分接口

设置好fd和模拟器的代{过}{滤}理端口之后,打开APP查看网络请求
1.0 fd.png

接口 请求方式 提交内容 数据类型 (猜测)用途
host_XXXX.txt GET 密文(暂不知道是什么加密) 可能是返回能正常访问的主机群
/v1/initial GET 明文 新版本检测+首页弹窗+视频分类
/v1/register/token POST device_id/platform/key/universal_id/lang 明文 注册新用户,返回token和uid
/v1/user/info POST token/lang/download_amount 明文 查询并返回用户信息
/v1/firstpurchase GET 明文 买VIP悬浮广告

2.随意点一个视频查看fd的数据

1.1 m3u8密文.png
由图看出:

之前的m3u8处理方法 现在的m3u8处理方法
链接加密,m3u8明文 链接明文拼接,m3u8密文

(PS:图中能看到http://localhost:1500/video?mode=的请求,其实关闭模拟器的fd代{过}{滤}理之后,用浏览器打开这个网址.看到的就是解密后的m3u8的内容,不过这个m3u8文件是需要处理后才能用下载器下载的)
1.2 需要处理的本地m3u8.png
(再PS:这个m3u8的headers中还有和网页版中的X-VTag参数)
1.3 vtag.png

那我们就来用工具解密下m3u8


反编译app解密m3u8

把app拉入jadx

搜"X-VTag"

用jadx搜"X-VTag",发现只有一个a.b.i.a.h.a,点进去看看代码
1.4 X-VTag.png
以下是a.b.i.a.h.a截取的部分代码

                        String a5 = tVar.a("X-VTag");/* ①.a5就是X-VTag的值,我测试的视频X-VTag是825497755 */
                        if (a5 == null || (i = a.b.f.o.f.i(a5)) == null) {/* ④.i=a.b.f.o.f.i,那么a.b.f.o.f.i是什么操作呢?我们用jadx跳到声明 */
                            str = null;/* ②.如果a5或i是null的那str=null */
                        } else {
                            str = i.substring(8, 24);/* ③.否则str= 从i的第9位取到第24位,i的长度为16 */
                            i.a((Object) str, "(this as java.lang.Strin…ing(startIndex, endIndex)");
                        }
                        h0 h0Var2 = a2.g;
                        w c = h0Var2 != null ? h0Var2.c() : null;
                        if (!(str == null || c == null)) {
                            h0 a6 = h0.a(c, a.b.j.v3.a.a(CipherClient.decodeKey(), str, a3));
                            g0.a aVar2 = new g0.a(a2);
                            aVar2.g = a6;
                            g0 a7 = aVar2.a();
                            i.a((Object) a7, "response.newBuilder().body(body).build()");
                            return a7;
                        }

a.b.f.o.f.i函数


    public static final String i(String str) {
        if (str != null) {
            try {
                MessageDigest instance = MessageDigest.getInstance(AESEncryptor.HASH_ALGORITHM);/* AESEncryptor.HASH_ALGORITHM跳转后是MD5 */
                byte[] bytes = str.getBytes(z.z.a.f8176a);
                i.a((Object) bytes, "(this as java.lang.String).getBytes(charset)");
                instance.update(bytes);
                byte[] digest = instance.digest();
                StringBuilder sb = new StringBuilder();
                for (byte b : digest) {
                    String hexString = Integer.toHexString(b & 255);
                    while (hexString.length() < 2) {
                        hexString = '0' + hexString;
                    }
                    sb.append(hexString);
                }
                String sb2 = sb.toString();
                i.a((Object) sb2, "hexString.toString()");
                return sb2;
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
                return "";
            }
        } else {
            i.a("$this$toMd5");
            throw null;
        }
    }

看这个操作可以结案了,a.b.f.o.f.i函数就是把str参数md5处理了下
所以可知案例中的部分参数

变量 解析
a5 headers中的X-VTag的值 825497755
i md5(a5) 9807a3e5370512bab61bee56200ee1d6
str i.substring(8, 24) 370512bab61bee56

我们继续往下看a.b.i.a.h.a

h0 a6 = h0.a(c, a.b.j.v3.a.a(CipherClient.decodeKey(), str, a3));

先跳转看这个CipherClient.decodeKey()函数

    public static final String decodeKey() {
        String str = CipherCore.get("aa01bdd83d0f12833ddaea2f2af22865");
        return str;
    }

我们接着看CipherCore.get函数,跳转就跳到了net.idik.lib.cipher.so.CipherCore类中

package net.idik.lib.cipher.so;

public final class CipherCore {
    static {
        System.loadLibrary("cipher-lib");
        init();
    }

    public CipherCore() throws IllegalAccessException {
        throw new IllegalAccessException();
    }

    public static String get(String str) {
        return getString(str);
    }

    public static native String getString(String str);

    public static native void init();
}

我去,这样一看CipherCore.get的方法在cipher-lib.so中??
111.png
这伪代码我也看不懂呀....不过不用怕.这个函数有返回值咱就不怕.
我们尝试用NP管理器的NPPrintFuncSrc打印出CipherClient.decodeKey()和其他函数的值(PS:也可以用Androidkiller的toast或者log,别的方法也均可)
smali代码是这样的:

.method public static final decodeKey()Ljava/lang/String;
    .registers 1

    const-string v0, "解密-decodekey"

    invoke-static {v0}, Lnp/NPLogEncryptString;->NPPrintFuncSrc(Ljava/lang/String;)V  #打印"解密-decodekey"

    const-string v0, "aa01bdd83d0f12833ddaea2f2af22865"

    .line 1
    invoke-static {v0}, Lnet/idik/lib/cipher/so/CipherCore;->get(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v0

    invoke-static {v0}, Lnp/NPLogEncryptString;->NPPrintFuncSrc(Ljava/lang/String;)V  #打印decodeKey返回的字符串

    return-object v0
.end method

java代码是这样的:

    /* 以上省略大部分代码 */
    public static final String decodeKey() {
        NPLogEncryptString.NPPrintFuncSrc("解密-decodekey");
        String str = CipherCore.get("aa01bdd83d0f12833ddaea2f2af22865");
        NPLogEncryptString.NPPrintFuncSrc(str);
        return str;
    }
    /* 以下也省略大部分代码 */

在Androidkiller中显示是这样的
1.5 decodekey.png
按类似的方法成功获取到部分常量如下:

函数 常量 获取到的结果
apiHashKey d708e111b5db90af74ef84ff4d5e647b 666wInteriscommingyoUshouldNotpassmotherfuckeR=
ccToken 810d903a88254b27c643e0bc471d406a
decodeKey aa01bdd83d0f12833ddaea2f2af22865 6e561ccd4aade2fed458d4da61e76770
encodeType e82b6153b4ea2340333e2254c3553d03
everIv c5b287eb7ee64e90ed015bac470f4b6b BakinsodaIgotbakinsoda
everKey 0d7cb519eb483a597549f7f466b189bc iaMiNloveWithtHecoCo
hostIv 6cf9e96524081ac264dc31982d0be319 5e8bf1f958f56644
hostKey 51cdba173d412fdecec3e78572cde731 f332ae8214fcbb0d98f8626f123459b4
imageDecodeIv 9e1add49a87568f90c43e418e7370287 E01EDE6331D37AFCC7BE05597D654D22
imageDecodeKey a8ae2831cbea74111bc5116ba81ec191 B2F3842866F9583D1ECE61C4E055C255
registerKey 951eeb6b19b70177fd25706aa620edcf

我们再继续回去看a.b.i.a.h.a

h0 a6 = h0.a(c, a.b.j.v3.a.a('6e561ccd4aade2fed458d4da61e76770', '370512bab61bee56', a3)); /* decodeKey()的值为6e561ccd4aade2fed458d4da61e76770,这个a3我猜测是密文 */

那么a.b.j.v3.a.a是啥呢,我们继续跳声明

a.b.j.v3.a.a函数

    public static String a(String str, String str2, String str3) throws UnsupportedEncodingException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException, InvalidKeyException {
        return a(new IvParameterSpec(str2.getBytes("UTF-8")), new SecretKeySpec(a(str).getBytes("UTF-8"), "AES"), str3);
    }/* str=6e561ccd4aade2fed458d4da61e76770,str2就是a.b.i.a.h.a中的str=370512bab61bee56 */

又return a(IvParameterSpec, SecretKeySpec(a(str).getBytes("UTF-8"), "AES"), str3) / str3=a3猜测应该是密文,加密方式是AES /
又出现两个未知数,我们一个一个的解

解析a(str)

跳转声明发现这个a函数(a.b.j.v3.a)和a.b.f.o.f.i的函数是一致的,均为md5算法,那么a(str)=key=md5('6e561ccd4aade2fed458d4da61e76770')=ae52f7ffd2dd66ba5743bb180188b991

解析return a(x,x,x)

    public static String a(IvParameterSpec ivParameterSpec, SecretKeySpec secretKeySpec, String str) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
        Cipher instance = Cipher.getInstance(AESEncryptor.AES_MODE);/* AESEncryptor.AES_MODE的值跳转后可得是加解密方法为"AES/CBC/PKCS5Padding" */
        instance.init(2, secretKeySpec, ivParameterSpec);
        return new String(instance.doFinal(Base64.decode(str, 2)));
    }
套入a.b.i.a.h.a中,那么本案例中的iv就是'9807a3e5370512bab61bee56200ee1d6'.substring(8, 24)=370512bab61bee56

尝试用在线aes解密和下载

成功解密m3u8
1.6 成功解密m3u8.png
我们新建一个txt文档,把解密后的明文粘贴进去,保存关闭后,文件重命名为1.m3u8,拖入下载器,成功下载
下载器.png


最后结案

m3u8相关

貌似算法和网页版的几乎一样?
切记获取的时候要协议头要带上version/platform/time/userid/hash   不然会拒绝访问的..
关于hash的加密算法在a.b.a.v.f中,用到了CipherClient.apiHashKey()

和一开始不加密的那种m3u8格式一样,但是现在m3u8是加密的需要解密:
m3u8地址:#域名#/media/#分辨率#/#视频id#.m3u8?token=#token#

加解密模式 key iv
AES/CBC/PKCS5Padding 固定值:ae52f7ffd2dd66ba5743bb180188b991 md5(#X-VTag#).substring(8, 24)

PS:我用易语言的e2ee先Base64解码密文即可解密出明文..在线解密也可以解出的

请求头中hash值的算法

发现在请求m3u8密文的时候会经常提示拒绝访问access denied
看一下请求头中的参数

参数 来源
version 2.3.1 app版本
platform Android 安卓平台
time 1614062660 当前十位时间戳
userid AiwrHWxoYtGd 可能是随机值
hash 625698fd47f50c2c026b9cfe543d56c5 待探索

如果随便改的话也会提示拒绝访问access denied,所以我们去jadx中搜以下这个hash。
用jadx搜"hash"
hash.png
所以i=hash的值,往上翻,找到i的赋值
i.png

String i = a.b.f.o.f.i(a2 + value + valueOf + str + str2);

之前我们已经得出a.b.f.o.f.i是md5的操作。
依次看a2 / value / valueOf / str / str2
a2 = version的值 = APP版本号
value = platform的值 = 平台Android
valueOf = time的值 = 时间戳
str = userId的值 = 从"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"取随机字符
str2 = CipherClient.apiHashKey() = ‘666wInteriscommingyoUshouldNotpassmotherfuckeR=’
所以i = md5(app版本 + 平台Android + 时间戳 + 随机userId + ‘666wInteriscommingyoUshouldNotpassmotherfuckeR=’)
上述案例中 i = md5(2.3.1Android1614062660AiwrHWxoYtGd666wInteriscommingyoUshouldNotpassmotherfuckeR=) = 625698fd47f50c2c026b9cfe543d56c5

hash算法结案

host相关

由于我们以及得到了hostIv和hostkey,所以弯回去看看host_XXXX.txt,在线解密结果:
1.7 host.png

关于倍速播放

正常情况下倍速播放只能是vip才有的功能,那么我们可以通过固定/v1/user/info接口中返回的Expiry的值即可免费使用该功能

.method public final getExpiry()J
    .registers 3

    .line 1
    const-wide v0,0x5af3107a3ff6L #0x5af3107a3ff6L

    return-wide v0
.end method

1.8 倍速.png

免费评分

参与人数 43吾爱币 +40 热心值 +41 收起 理由
panda007 + 1 用心讨论,共获提升!
szr + 1 + 1 用心讨论,共获提升!厉害了我的哥
卖梦人 + 1 + 1 谢谢@Thanks!
xianyucoder + 1 + 1 我很赞同!
j2000yk + 1 + 1 鼓励转贴优秀软件安全工具和文档!
5ud0 + 1 + 1 我很赞同!
boy666 + 1 + 1 用心讨论,共获提升!
砺心缘起 + 1 + 1 谢谢@Thanks!
时光遗旧201211 + 1 谢谢@Thanks!
zhouruiwu + 1 + 1 谢谢@Thanks!
seolinAziz + 1 热心回复!
Culaccino + 2 + 1 我很赞同!
pengjing + 1 我很赞同!
zhuzhuxia111 + 1 + 1 我很赞同!
5omggx + 1 + 1 鼓励转贴优秀软件安全工具和文档!
wdz2018 + 2 + 1 谢谢@Thanks!
朝闻道夕死可矣 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
小橙紫 + 1 + 1 厉害
Saber喵 + 1 用心讨论,共获提升!
zhukun1980 + 1 + 1 谢谢@Thanks!
笙若 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
rox + 1 + 1 谢谢@Thanks!
叽歪 + 1 + 1 热心回复!
aka福建大炮 + 1 + 1 我很赞同!
TickDown + 1 我很赞同!
answer_zhang + 1 + 1 用心讨论,共获提升!
两只老虎 + 1 + 1 谢谢@Thanks!
tocabd + 1 + 1 谢谢@Thanks!
woshicp + 1 + 1 我很赞同!
_小白 + 1 + 1 我很赞同!
nws0507 + 1 + 1 谢谢@Thanks!
testMain + 1 + 1 谢谢@Thanks!
PoisonousCat + 1 + 1 谢谢@Thanks!
WAlitudealiy + 1 + 1 热心回复!
ly123voo + 1 + 1 身体一天不如一天了
cz970817 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Roy_li + 1 + 1 我很赞同!
forfor + 1 + 1 自从看了楼主之前和现在的帖子,赶脚身体持续被掏空
ygg + 1 + 1 厉害呀!
我要学外挂 + 1 + 1 是我太纯洁了吗,看了两个文章了都不清楚啥app
mj2013ly + 1 + 1 谢谢@Thanks!
瓦力伊娃 + 1 + 1 我很赞同!
asq56747277 + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

逍遥一仙 发表于 2021-2-23 17:32
在线正常的话,e2ee应该也正常吧。参数发下我看看?
 楼主| 闷骚小贱男 发表于 2021-2-23 17:58
本帖最后由 闷骚小贱男 于 2021-2-23 20:26 编辑
逍遥一仙 发表于 2021-2-23 17:32
在线正常的话,e2ee应该也正常吧。参数发下我看看?

原密文有接近1M的大小...

e2ee.解密数据 (#算法_AES_128_CBC, “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”, 到字节集 (“ae52f7ffd2dd66ba5743bb180188b991”), 结果2, #填充方式_PKCS7, 到字节集 (“48635eadf71465a3”), #文本内容类型_Base64)
调试输出 (“解密:”, 结果2)

正常是

#EXTM3U
#EXT-X-VERSION:4
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="https://XXX.com/apen/ATID-436/240/key.php?Expires=1614080647&Signature=PJm78J3Pt1i55SwDLCn6Yewhx5BZIyZspnseZqXWPoH2abO0mwqzkuhjEvlWZbJ~C6MM5h0WVrT2~SFXq0f500Sm5zEslIts4MjS8meF4ka9GctJShEt2SUdxgO3LpaTKsKBiKk0SGUwBEYOvfQi0bBfY4nrYettbIaz4nstJKaN0NqyQ-vlIaml6~JKj8llLG9alPC5QKR5p5wHCIzGE8XHwK6fObVGzoAtyizLAOBNmRzEsZtB9EqZnePfGoIJtISdKhvnjtShl5dgi62Wz9ep86ONUSzVfPX6azKF3QYrHCTRQCAYs9-SfKM48eJuOUoPqIjAISuKXOQWAT0N~w__&Key-Pair-Id=APKAJBW3QQCETPXK5WRQ",IV=0x7AC30228D1C5FFA1BF89D18105764606
#EXTINF:6.006000,
https://XXX.com/apen/ATID-436/240/ts/ATID-436-0.ts?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lbmN2LnlzZmx1eC5jb20vYXBlbi9BVElELTQzNi8yNDAvdHMvKi50cyIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxNDA4MDY0N319fV19&Signature=Kvf18Toy2yHPFhILNJCgQSzfeLc74aRJZj0Q8yFsvG9Wi6FkU0U~WCS3W0pwdNB8HBYWtq0GIQCKGQ4Nd2NTwu4RkI7C4Zt3sKXRicfmDSX~W0qU0nGrAkyA8YErokh2-BbW5BuzqffgjVTxGryXMNcyt6DJd9hgO27sR3autYsAgHs2pfS7bG8lLKUbjztNFGwc2TCrX4Lx5RHi9cfI3GljD6TLygHEWfe3UyOUzsXG5QHqCGUpaEuVOGLUi1powsOeWJxIJ4z6~IPMD0~~aaBfbdXbptk5crarngbB9XV2Oh3yN-pYsdRvGHQ61FPIfRtdhHAzVewM20DhHUTtLQ__&Key-Pair-Id=APKAJBW3QQCETPXK5WRQ
#EXTINF:6.006000,
https://XXX.com/apen/ATID-436/240/ts/ATID-436-1.ts?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lbmN2LnlzZmx1eC5jb20vYXBlbi9BVElELTQzNi8yNDAvdHMvKi50cyIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxNDA4MDY0N319fV19&Signature=Kvf18Toy2yHPFhILNJCgQSzfeLc74aRJZj0Q8yFsvG9Wi6FkU0U~WCS3W0pwdNB8HBYWtq0GIQCKGQ4Nd2NTwu4RkI7C4Zt3sKXRicfmDSX~W0qU0nGrAkyA8YErokh2-BbW5BuzqffgjVTxGryXMNcyt6DJd9hgO27sR3autYsAgHs2pfS7bG8lLKUbjztNFGwc2TCrX4Lx5RHi9cfI3GljD6TLygHEWfe3UyOUzsXG5QHqCGUpaEuVOGLUi1powsOeWJxIJ4z6~IPMD0~~aaBfbdXbptk5crarngbB9XV2Oh3yN-pYsdRvGHQ61FPIfRtdhHAzVewM20DhHUTtLQ__&Key-Pair-Id=APKAJBW3QQCETPXK5WRQ
#EXTINF:6.006000,
https://XXX.com/apen/ATID-436/240/ts/ATID-436-2.ts?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lbmN2LnlzZmx1eC5jb20vYXBlbi9BVElELTQzNi8yNDAvdHMvKi50cyIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTYxNDA4MDY0N319fV19&Signature=Kvf18Toy2yHPFhILNJCgQSzfeLc74aRJZj0Q8yFsvG9Wi6FkU0U~WCS3W0pwdNB8HBYWtq0GIQCKGQ4Nd2NTwu4RkI7C4Zt3sKXRicfmDSX~W0qU0nGrAkyA8YErokh2-BbW5BuzqffgjVTxGryXMNcyt6DJd9hgO27sR3autYsAgHs2pfS7bG8lLKUbjztNFGwc2TCrX4Lx5RHi9cfI3GljD6TLygHEWfe3UyOUzsXG5QHqCGUpaEuVOGLUi1powsOeWJxIJ4z6~IPMD0~~aaBfbdXbptk5crarngbB9XV2Oh3yN-pYsdRvGHQ61FPIfRtdhHAzVewM20DhHUTtLQ__&Key-Pair-Id=APKAJBW3QQCETPXK5WRQ
#EXT-X-ENDLIST

易语言用e2ee进行AES/CBC解密,先Base64解码(32位key为#算法_AES_256_CBC)

.版本 2
.支持库 e2ee
.支持库 spec

.子程序 __启动窗口_创建完毕
.局部变量 a, 加解密对象
.局部变量 data, 文本型

a.解密数据 (#算法_AES_256_CBC, Base64解码 (密文, , ), 到字节集 (“ae52f7ffd2dd66ba5743bb180188b991”), data, #填充方式_PKCS7, 到字节集 (“48635eadf71465a3”), #文本内容类型_原始内容)
调试输出 (data)

doomangel 发表于 2021-2-23 13:40
vipwlq 发表于 2021-2-23 13:41
哈哈哈哈,我知道是什么
米饭大师 发表于 2021-2-23 13:42
大佬牛皮
FANGWJ 发表于 2021-2-23 13:43
厉害厉害  学习一下
吐槽大帝 发表于 2021-2-23 13:45
火钳刘明
时光书窝 发表于 2021-2-23 13:54
大佬牛逼,支持一波!
tomcat321 发表于 2021-2-23 13:58
厉害厉害
氓之嗤嗤 发表于 2021-2-23 14:11
挺好的 mark
voipwang 发表于 2021-2-23 14:14
研究一下, 我自己出成品!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 12:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表