精易论坛

标题: 触手TV安卓APP sign 加密分析 [打印本页]

作者: 小七先生    时间: 2017-8-27 10:44
标题: 触手TV安卓APP sign 加密分析
本帖最后由 小七烤地瓜 于 2017-8-27 11:50 编辑

                                                                        触手TV安卓APP sign 加密分析



视频版教程版链接在下面............

废话不多少 先上抓包数据:

登录数据:
POST https://api.chushou.tv/api/chushou-login.htm? HTTP/1.1
User-Agent: Android ChushouTV/3.1.2.11628
Content-Type: application/x-www-form-urlencoded
Content-Length: 264
Host: api.chushou.tv
Connection: Keep-Alive
Accept-Encoding: gzip

username=15845454545&password=25f9e794323b453885f5181f1b624d0b&imei=865166021513968&_t=1503798306999&_fromView=1&_fromPos=7&_appSource=209&_appVersion=3.1.2.11628&_identifier=1201806294&_imei=865166021513968&_appkey=CSAndroid&_sign=edbe71fa3258d690fdeacf6f1e697f9b

返回数据:
HTTP/1.1 200 OK
Server: openresty
Date: Sun, 27 Aug 2017 01:45:07 GMT
Content-Type: text/plain;charset=UTF-8
Content-Length: 62
Connection: keep-alive

{"code":1100,"message":"该手机号尚未注册","data":null}


数据分析:
username=15845454545   账号
password=25f9e794323b453885f5181f1b624d0b   密码 加密后的 但是他只是个单纯的密码进行的MD5
imei=865166021513968  设备号
_t=1503798306999   时间戳
_fromView=1   不知道啥东西 经多次抓包为固定值 不用管
_fromPos=7     不知道啥东西 经多次抓包为固定值 不用管
_appSource=209     不知道啥东西 经多次抓包为固定值 不用管
_appVersion=3.1.2.11628    APK版本号
_identifier=1201806294      不知道啥东西 经多次抓包为固定值 不用管
_imei=865166021513968   设备号
_appkey=CSAndroid     知道是啥 但是不知道干嘛用的
_sign=edbe71fa3258d690fdeacf6f1e697f9b  签名校验
我们搞的就是这个sign 他不对你登陆不上的
包知道了  加密参数名知道了  那就开始分析APK
JEB 加载分析  搜索_sign


查看第一个sign 查看代码发现

很幸运 我们第一次 一下就找到关键加密点了 什么?你问我怎么知道这里就是加密的?开玩笑  这么隐秘的事情能告诉你蛮
我们来分析翻译一下这段代码  从头看 PS:普通装逼已经不行了 我要发大招了....
  1.         v2.a("_appSource", com.kascend.chushou.h.b.a(v6));
  2.         v1.a("_appSource", com.kascend.chushou.h.b.a(v6));
  3.         v2.a("_appVersion", tv.chushou.zues.utils.a.c(com.kascend.chushou.b.d));
  4.         v1.a("_appVersion", tv.chushou.zues.utils.a.c(com.kascend.chushou.b.d));
  5.         v2.a("_identifier", com.kascend.chushou.h.d.a().i);
  6.         v1.a("_identifier", com.kascend.chushou.h.d.a().i);
  7.         if(!j.a(ChuShouTVApp.IMEI)) {
  8.             v2.a("_imei", ChuShouTVApp.IMEI);
  9.             v1.a("_imei", ChuShouTVApp.IMEI);
  10.         }

  11.         if(!j.a(this.i)) {
  12.             v2.a("token", this.i);
  13.             v1.a("token", this.i);
  14.         }

  15.         v2.a("_appkey", "CSAndroid");
  16.         v1.a("_appkey", "CSAndroid");
  17.         String v0_1 = v1.a();
  18.         String v1_1 = tv.chushou.zues.a.b("HAL$#%^RTYDFGdktsf_)(*^%[        DISCUZ_CODE_0        ]quot; + v0_1);
  19.         v2.a("_sign", v1_1);
  20.         if((f.a()) && !arg8.contains("chat/get.htm")) {
  21.             f.b("MyHttpMgr", "URL = " + arg8 + v0_1 + "&" + "_sign" + "=" + v1_1);
  22.         }

  23.         return v2.a();
  24.     }
复制代码
为什么说这里是加密的地方呢 不是没有道理的 稍微懂点变成的人都看得懂 这里是他登录包的一个获取 最后经过了拼接
        v2.a("_appSource", com.kascend.chushou.h.b.a(v6));
v1.a("_appSource", com.kascend.chushou.h.b.a(v6));
v2.a("_appVersion", tv.chushou.zues.utils.a.c(com.kascend.chushou.b.d));
v1.a("_appVersion", tv.chushou.zues.utils.a.c(com.kascend.chushou.b.d));
v2.a("_identifier", com.kascend.chushou.h.d.a().i);
v1.a("_identifier", com.kascend.chushou.h.d.a().i);
if(!j.a(ChuShouTVApp.IMEI)) {
v2.a("_imei", ChuShouTVApp.IMEI);
v1.a("_imei", ChuShouTVApp.IMEI);
}

if(!j.a(this.i)) {
v2.a("token", this.i);
v1.a("token", this.i);
}

v2.a("_appkey", "CSAndroid");
v1.a("_appkey", "CSAndroid");
这一整串  都是设置参数名+获取对应的参数值因为都是相同的操作 就不一一介绍了
v1.a  v2.a  这个a方法 就是  正则表达式吧  那么这个里面方法应该就是正则操作

重点我们分析代码为:
String v0_1 = v1.a();
        String v1_1 = tv.chushou.zues.a.b("HAL$#%^RTYDFGdktsf_)(*^%$" + v0_1);
        v2.a("_sign", v1_1);

String v0_1 = v1.a();  一个文本型的 v0_1 被赋值为v1.a();
那么 v1.a(); 是什么他是在哪被赋值的呢?
注意看上面 我贴出的代码 是不是 v1.a  那么这个a 你可以 认为成增加附加数据的意思 然后这个方法里面又利用正则处理完数据 又返回来了
也就是说这个v1.a  之一在增加数据 另一方面我们从他增加的参数名来看 他很有可能是拼接的加密数据的明文
是不是呢 我们继续看下一句代码
String v1_1 = tv.chushou.zues.a.b("HAL$#%^RTYDFGdktsf_)(*^%$" + v0_1);
又声明了个 v1_1 的变量  经过  tv.chushou.zues.a.b  方法执行 赋值给了v1_1  并且传递了一个参数


传递了什么参数?
"HAL$#%^RTYDFGdktsf_)(*^%$" + v0_1        HAL$#%^RTYDFGdktsf_)(*^%$  这个字符串加上 v0_1
然后 v2.a("_sign", v1_1); 又经过a  方法 传递进去一个参数名和参数值 参数值就是  tv.chushou.zues.a.b("HAL$#%^RTYDFGdktsf_)(*^%$" + v0_1);  这一段的执行结果
注意 参数名和我们抓到的包是一样的  那么这时候我们需要知道一点  就是这个 v0_1   最终是什么数据?它拼接后是什么样子呢
等会调试下断电 看看  现在看看 v.chushou.zues.a.b 方法

继续跟踪我们来到了这里
public static String b(String arg1) {
        return a.a(arg1, new String[0]).toString();
    }

一个 为b 的静态方法 传递了一个 arg1参数 又调用 a.a 方法转换成 string类型  然后返回了数据
继续跟踪 来到这里


这里有个MD5  我们从抓包就可以看出来 就是个MD5加密 没什么稀奇的 那么这里就是他的加密核心了
你可以调用jar  从这里获取他的类 包名等  等等!什么? 一个MD5 你就要调用jar?  至于么?  额...... 还真不至于
又跟到加密代码了  没需要继续分析了  这时候我们下段点 来看看这个 v1_1  是个什么东西



下断点 附加模拟器点击登录 端在这里
读取v0 的数据 输出为:


appSource=209&_appVersion=3.1.2.11628&_appkey=CSAndroid&_fromPos=7&_fromView=1&_identifier=1201806294&_imei=865166021513968&_t=1503801131981&imei=865166021513968&password=25f9e794323b453885f5181f1b624d0b&username=15845454545
这一串就是之前v1 一直在拼接的数据 那么他就是我们加密的铭文了么? 是 !  但是还有一个别忘了 HAL$#%^RTYDFGdktsf_)(*^%$
继续单步走 发现


这时候明文 和密文 都出现了  
明文:
HAL$#%^RTYDFGdktsf_)(*^%$&_appSource=209&_appVersion=3.1.2.11628&_appkey=CSAndroid&_fromPos=7&_fromView=1&_identifier=1201806294&_imei=865166021513968&_t=1503801131981&imei=865166021513968&password=25f9e794323b453885f5181f1b624d0b&username=15845454545
密文:
38f8e561f6bb7b23e64b1a6ac6db65b0

我们知道他是MD5  那么我们来试验一下吧


  
经过试验对比我们发现 他们是对应的  进一步确定  我们看登录包的sign


ok  完全一样 那么这个加密我们也就分析完毕了
好了 此次装逼~ 啊不对 是分析结束.......



触手TV安卓APP sign 加密分析【视频版】
http://125.confly.eu.org/forum.php?mod=viewthread&tid=14060992
(出处: 精易论坛)




作者: 明天虫子    时间: 2017-8-27 10:49
这种的好找、就怕那种位运算的
作者: 红颜似水    时间: 2017-8-27 11:04
好帖,相关分析工具也发出来呗!
作者: 小七先生    时间: 2017-8-27 11:55
红颜似水 发表于 2017-8-27 11:04
好帖,相关分析工具也发出来呗!

JEB 百度就有下载
作者: 小七先生    时间: 2017-8-27 11:55
明天虫子 发表于 2017-8-27 10:49
这种的好找、就怕那种位运算的

要翻译代码的吧
作者: Matty    时间: 2017-8-27 12:01
感谢分享,
作者: MY寂寞的夜    时间: 2017-8-27 13:16
很厉害,,我给你满分      
作者: wkf    时间: 2017-8-27 13:39
小七烤地瓜 发表于 2017-8-27 11:55
JEB 百度就有下载

输出:
Downloading jeb2-sp-win32-v3.zip...
Reading 38353245 bytes: 9
然后jeb就自己挂了......
作者: 〞剑舞长空    时间: 2017-8-29 12:58
点个赞 ,这种还算简单。一下就找到关键点。有些麻烦的找不到最麻烦
作者: mzhsohu    时间: 2017-8-29 16:31
感谢分享,很给力!~
作者: 鐵憨憨    时间: 2017-8-29 16:43
想要你的JEB= =百度到的不知道怎么用。!!!
作者: fenxunzhe    时间: 2017-8-29 17:05
想要你的JEB= =百度到的不知道怎么用。!!
作者: 半俗半雅半疯癫    时间: 2017-8-30 01:19
JEB下载的不是闪退 就报错  
作者: pomieanye    时间: 2017-8-31 17:04
好东西大家点
作者: ze6wp2    时间: 2017-8-31 19:01
wkf 发表于 2017-8-27 13:39
输出:
Downloading jeb2-sp-win32-v3.zip...
Reading 38353245 bytes: 9

你需要下那个文件
http://download.csdn.net/download/qqhuxiao/9901871
放到 bin 下,再运行.bat 试下
作者: fjqisba    时间: 2017-8-31 22:07
666,地瓜哥啥时候分析分析bilibili的sign算法呢
作者: fhqvfhpsse    时间: 2017-9-2 10:33
好复杂,但是楼主绝对用心了,辛苦了
作者: 15044140202    时间: 2017-9-3 14:46
看一下 大时代的
作者: bsdestiny    时间: 2017-9-7 16:50
解密完之后呢?怎么做

作者: hanqii    时间: 2017-9-8 20:32
感谢楼主的分享。。。。
作者: 冷眸藐视    时间: 2017-9-11 23:42

签到,拿精币
作者: x1016125    时间: 2017-9-12 10:03
大神给力啊~
作者: leejunjie519    时间: 2017-9-12 11:53
很6  我想学这方面的知识 ,但无从下手!
作者: 追梦传媒    时间: 2017-9-14 23:04
不错啊,,,,,,,大赞一个
作者: 三鱼爱吃鱼    时间: 2017-9-15 15:39

作者: 13615647407    时间: 2017-9-22 20:33
jeb 调试的时候老是来个java.lang.exp。。。。什么的  好像是什么指针泄露  难道是我内存小了?我是4G 去网吧8G也不行 表示蛋疼
作者: 在深圳放牛    时间: 2017-10-30 20:51
这种教程 像我这样的最需要,感谢分享
作者: aaaa1598296    时间: 2017-11-4 15:27
感谢分享!!!

作者: shayxr1314    时间: 2017-11-17 11:48
看懂了,关键是还要断点看一下,才能知道具体原因
作者: li842094    时间: 2017-11-27 17:59

感谢楼主的分享。。。。
作者: a1220116455aa    时间: 2017-12-4 13:41
大发发斯蒂芬都是发送到发送到
作者: 我觉乎到怪好    时间: 2017-12-21 10:19
6666,牛逼
作者: lingang    时间: 2018-6-3 23:44
太高深了。。。。。
作者: 没有忘掉她    时间: 2018-6-26 22:53
最新的APP不知道为啥抓不出包 不知道是不是我的问题
作者: 914594701    时间: 2018-8-17 13:19
提示: 作者被禁止或删除 内容自动屏蔽
作者: 4968459    时间: 2020-4-18 09:07





欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4