PS:APP 提供来源
app 下载 地址:
http://sj.qq.com/myapp/detail.htm?apkName=com.wodi.who
app 提供来源:
https://bbs.125.la/forum.php?mod=viewthread&tid=14219509&highlight=APP
第一步 抓登陆抓包:
- POST /v3/account/register HTTP/1.1
- User-Agent: sswdOnline/Android 80907 (oppo a59m; 5.1.1; 540*960; 3)
- Content-Type: application/x-www-form-urlencoded
- Content-Length: 666
- Host: api.wodidashi.com
- Connection: Keep-Alive
- Accept-Encoding: gzip
- p_=GloQxKW7Gx3kOpVkPQu4gy30FaFUaadmyEe%2BDsxIMWGZZhEuLUCv4TqgOD6QWVcx%2FJU1BLFl0SLzyj0aeDu9VuNs2R84EZR%2F4n4cJRkLu4dzXLMA6idNrAn4yqw9GwC%2F93Vi8u%2B8ATeLI5i0h13qkbfrS4rMcALsKhpU3401ztoVqno2P6OGJweqGtK0LY0o9GBwFCysAUkX1HMsVQCWmsk2yRH5SAK%2BDbSAWxrscqPbmn2VXtAg1tWGakdkGC89bm4ANhpGAfTX3wM2Wi1Ysrx7MIz6M9RV3H9B6cF46hqcUb%2FuIfIU05lBCTNKjBXtNgvS5c3Y5xvQ7xEWfWkjmfp8fFZlMrPDqssu6ICZ1ddDGP%2BXi3esPmDxu0eALxm76Z8lQFj%2BIMrid7b%2F1obgvu23lOPL42OznKZGuElHaiJ2TX4Ht6pV1wWnc3Wt4%2FbVaXtaLFkoW53sVz84w5E3jkSWOFwyPE%2BXjDXTNC0%2BWMhElQ4632vUYqOU6Lt7ruH7DNeV08PXIwEi3N%2BdSymHtX2CySlFd2T2p2omcFOZccepzM%2F6KKAqV0V6g1x%2BmSbekG2FFEpOrc4JFs3%2BoGPz5vYRe3EFib7I8ovJipXEgYw%3D&__z_=2
复制代码
第二步 分析加密主要参数: 1 p_=GloQxKW7Gx3kOpVkPQu4gy30FaFUaadmyEe%2BDsxIMWGZZhEuLUCv4TqgOD6QWVcx%2FJU1BLFl0SLzyj0aeDu9VuNs2R84EZR%2F4n4cJRkLu4dzXLMA6idNrAn4yqw9GwC%2F93Vi8u%2B8ATeLI5i0h13qkbfrS4rMcALsKhpU3401ztoVqno2P6OGJweqGtK0LY0o9GBwFCysAUkX1HMsVQCWmsk2yRH5SAK%2BDbSAWxrscqPbmn2VXtAg1tWGakdkGC89bm4ANhpGAfTX3wM2Wi1Ysrx7MIz6M9RV3H9B6cF46hqcUb%2FuIfIU05lBCTNKjBXtNgvS5c3Y5xvQ7xEWfWkjmfp8fFZlMrPDqssu6ICZ1ddDGP%2BXi3esPmDxu0eALxm76Z8lQFj%2BIMrid7b%2F1obgvu23lOPL42OznKZGuElHaiJ2TX4Ht6pV1wWnc3Wt4%2FbVaXtaLFkoW53sVz84w5E3jkSWOFwyPE%2BXjDXTNC0%2BWMhElQ4632vUYqOU6Lt7ruH7DNeV08PXIwEi3N%2BdSymHtX2CySlFd2T2p2omcFOZccepzM%2F6KKAqV0V6g1x%2BmSbekG2FFEpOrc4JFs3%2BoGPz5vYRe3EFib7I8ovJipXEgYw%3D
第三步 逆向找到其主要算法
- ------------------------------------------------------------------------------------------------------------------------
- package com.wodi.protocol.network.interceptor;
- public class BasicInterceptor implements Interceptor {
- public Response intercept(Interceptor$Chain arg6) throws IOException {
- Request v0 = arg6.a();
- Request$Builder v1 = v0.f();
- RequestBody v2 = v0.d();
- v1.b("User-Agent", AppRuntimeManager.a().p());
- return arg6.a(v1.a(new FormBody$Builder().a("p_", this.a(v0.a().toString(), BasicInterceptor.a(v2))).a("__z_", "2").a()).d());
- }
- ---------------------------------------------------------------------------------------------------------------------------------------------------------------
- package com.wodi.protocol.network.interceptor;
- public class BasicInterceptor implements Interceptor {
- private String a(String arg7, String arg8) {
- String v0;
- Map v1 = this.a(arg8);
- v1.put("__v_", "1.0");
- v1.put("__appid_", "10002");
- v1.put("__callid_", String.valueOf(System.currentTimeMillis()) + String.valueOf(new Random().nextInt(BasicInterceptor.a) % (BasicInterceptor.a - BasicInterceptor.b + 1) + BasicInterceptor.b));
- v1.put("__appVersion_", AppRuntimeManager.a().q());
- v1.put("__appVersionName_", "8.9.7");
- v1.put("__deviceId_", AppRuntimeManager.a().d());
- v1.put("__channelId_", ChannelUtils.f());
- v1.put("__deviceInfo_", AppRuntimeManager.a().g());
- v1.put("__imei_", App.getIMEI());
- if(this.b(arg7)) {
- if(arg7.contains("checkOnline")) {
- v1.put("__t_", UserInfoSPManager.a().J());
- }
- v0 = Tool.a(v1, Tool.d(), "", false);
- }
- else {
- v1.put("__t_", UserInfoSPManager.a().J());
- v0 = Tool.a(v1, Tool.c(), App.timestamp, true);
- }
- v1.put("__sig_", v0);
- v0 = this.c.toJson(v1);
- return this.b(arg7) ? Tool.a(v0, Tool.e()) : Tool.a(v0, Tool.b());
- }
- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- package com.huacai;
- public class Tool {
- public static String a(String arg4, String arg5) {
- try {
- SecretKeySpec v0_6 = new SecretKeySpec(arg5.getBytes("utf-8"), "AES");
- Cipher v1 = Cipher.getInstance("AES/ECB/PKCS5Padding");
- byte[] v2 = arg4.getBytes("utf-8");
- v1.init(1, ((Key)v0_6));
- String v0_7 = Base64.a(v1.doFinal(v2));
- return v0_7;
- }
- catch(BadPaddingException v0) {
- v0.printStackTrace();
- }
- catch(IllegalBlockSizeException v0_1) {
- v0_1.printStackTrace();
- }
- catch(UnsupportedEncodingException v0_2) {
- v0_2.printStackTrace();
- }
- catch(InvalidKeyException v0_3) {
- v0_3.printStackTrace();
- }
- catch(NoSuchPaddingException v0_4) {
- v0_4.printStackTrace();
- }
- catch(NoSuchAlgorithmException v0_5) {
- v0_5.printStackTrace();
- }
- return null;
- }
复制代码
第四步 总结
p_= AES/ECB/PKCS5Padding("{"__imei_":"358640473966373","__callid_":"15347738611578366","phoneNumber":"+8613888888888","__deviceId_":"4f1b22e8-d3b5-46b8-a40b-2e0d62cebc95","__appid_":"10002","__v_":"1.0","spds":"201807242353235148fcec88d81155d295e68028072f7b01b837179a0802f4","smsCode":"147258","__sig_":"69370c6ec810a1e80f23af4b3603c5fe","__appVersionName_":"8.9.7","__appVersion_":"80907","__deviceInfo_":"oppo a59m(540*960)","bundleName":"com.wodi.who","__channelId_":"3","type":"celln"}");
其中 key = ,;*q12NV>PO)/'](
|