soul 分析 part1

针对soulapp的协议分析 part01

嗯。。搞soul的协议,毫无利益关系,单纯为了爬妹子联系方式(逃)

话不多说,首先抓包,
image_1d5bnrpr6du01u8u155855p19j4p.png-146.2kB
可以看到字段有如下

GET https://apia.soulapp.cn/v3/post/recommended HTTP/1.1
api-sign: 18C77C3B232CCA6614B98535DDF5B2B441947297
os: android
X-Auth-Token: xiWhJuofEspPG0d1lUSqtJvcXW+1Syec
api-sign-version: v5
device-id: XHqGfqt5UGYDAFeEXrFWpcKD
request-nonce: f5fad4323d58480da2cb994d5357b7d9
Connection: close
app-id: 10000003
app-version: 3.1.4
app-time: 1551950445856
Language: zh-cn
User-Agent: TDBJRm0zWTkySEVvSVpEc3lIS2dSYnRqY1YxUU8wNnlTU1R2S1VjYk84eUZEYS9LUGlmNXovUjZEcUFZd0VsM3dEeWRZYVZRWlluMTZnS0UvZlFlWFE9PQ==
app-info: [100]
Host: apia.soulapp.cn
Accept-Encoding: gzip
3-07 17:20:45.857: I/Xposed(2159): last xposed UUID :f5fad4323d58480da2cb994d5357b7d9
/v3/post/recommended XHqGfqt5UGYDAFeEXrFWpcKD 10000003 wh@^&android 201903071720 f5fad4323d58480da2cb994d5357b7d9 314

那我们这回分析的重点就api-sign这个字段啦,首先拆包()
image_1d5bo0hi11ajv115cvpt1h931c3o39.png-52.9kB
可以看到有四个dex,用jadx打开第一个dex(需要调至单线程,否则会卡死),搜索api-sign,可以发现两处引用
image_1d5bo26jpbmj5hd1ohn12h91kep3m.png-42.7kB
真正调用的是第一处(其实之前吃了瘪,我一直分析的是第二处的,主要是根据第二处调用跟到了jniSign这个lib,当时下意识的决定签名方法肯定在这个so里),ok,去看下第一处的调用,
image_1d5bo5vrbhag1dvodgf11ofcah43.png-44kB
可以看到虽说是反编译失败的,但是我们依旧可以分析出大概的方法,api-sign这个字段的内容,是根据cn.soulapp.android.api.b.d.a这个方法产生的,我们去看下这个方法的三个参数,一个是okhttp的request类,第二个是一个string,可以看到是之前调用UUID方法产生了随机字符串,并且消除了”-“,这样就得到了第二个参数,第三个参数则是long类型,这个long是哪里来的呢,跟进看一下,是调用了这个方法
image_1d5bp5jfs1b51e8kbgm1o971eus60.png-4.1kB
这个w.d方法,我们全局搜索下cn.soulapp.lib.basic.utils.w这个类,去看下里面的a方法
image_1d5bpcscd1l481tusabe9bl8dc6d.png-23.4kB
大概就是去soul_share这个xml里读取ApiConstants_timeDiff这个对应的数值,都是时间的,这个不重要,我们去hook出来就ok,然后这时我们需要的东西就全了,先跑一次,看下hook的结果

image_1d5bpiqj7fbf1v5k95c3re1fqq7q.png-96.8kB

ok,这里只是观察下传入的参数,想要得到具体的算法,还得往里根 cn.soulapp.android.api.b.d.a(r7, r3, r1);这个方法,进入看下,这里错误太严重了,我们换个工具试试
image_1d5bpng0ihpps569aq1ht9kai87.png-44.8kB
大概就是做了一下解码与判断后,传入了以下这个native方法

image_1d5bqhuu8ina175h1jl9t161istcl.png-7.3kB

可以看到这个函数有五个参数。。不管多少,都hook出来看下是什么玩意儿
image_1d5bpr94agcbrpu1klc1b411peg9h.png-69.5kB
image_1d5bptnigrprhdn79s2nmdv9u.png-161.6kB
从log出可以看书,第一项位请求url的路径/v3/post/recommended,第二项deviceId,XHqGfqt5UGYDAFeEXrFWpcKD这个值是不会变化的,第三个参数就是之前计算出的那个由两个time相减得到的长整型,第四个就是当前app的版本号,目前我这个版本是最新版的也就是3.1.4,最后一个参数,则是之前去除-的随机字符串UUID,其实也就是包中的request-nonce项,ok,现在就去so中分析下
image_1d5bq7ct01ml75c0u9818qrk0ab.png-87.1kB
image_1d5bq887jlav1tf7c9cr4f1j7oao.png-59.6kB
大概可以看出使用的签名方法是sha1,并且还有一些别的字符串参与了签名,比如app_id和auth_key,所以我打算进行动调调试看下到底进行了哪些操作,但是!!!我的调试小手机,上学期被我一个同学拿走了,我和他借了,他并没有理睬我。。。我昨晚买了个新的,还没到货,打算等到货后,再调试吧。所以分成了part1和part2.