白嫖9999天VIP会员,某APP之AES加解密+一些小分析
本帖最后由 闷骚小贱男 于 2022-2-8 15:14 编辑# 前排提示!!!!!
论坛禁止留联系方式!!
禁止求成品,也没有成品!
禁止求名字,也不会发。。
---
# 写在前面的话
1.这个APP是无法通过fd直接抓包的(不过httpcanary可以,但是不太习惯手机一直粘贴复制),所以要想办法让fd可以抓到包,就用到了Drony
2.但是Drony我在模拟器中测试是无法转发的。。(也可能是我的模拟器版本不太对?或者是不支持?反正操作是一样的。。最后在手机上成功了)
3.当然也可以直接用模拟器一键新机来弄邀请。这个简单。。也不用看下面的一大堆字和图了。。
4.vmos+XP框架+应用变量也能达到免root换机的功能...(PS:市面上还有很多的多开软件均可免root换机)
---
# 本贴用到的工具
1.反编译:jadx+mt管理器(mt管理器/NP管理器/Androidkiller等等别的工具均可)
2.抓包:fiddler+Drony(因为fd抓不到包,所以加个Drony,稍后由简单的说明)
3.加解密网站(由于可能会...所以这里就不贴了)
---
# fiddler+Drony抓包
注意:本方法仅限http,https可能需要证书或者别的操作
## 配置Drony
2.打开APP,右滑到“settings”页面
3.点击“wi-fi”
4.Network list中选择当前wifi
5.配置fd的ip地址和端口后修改“Proxy type”为手动“Manual”
6.代{过}{滤}理格式“Proxy type”默认为“http”
7.“Rules”规则设置
点击Rules,点击右上角的+号
Action选择Local proxy chain
Application选择想要抓包的APP
然后点击右上角的保存
8.返回首页LOG页面点击OFF开启
9.打开APP,你会发现FD有数据包了
---
# 抓包+分析实操
## 打开APP并看fd的包
一看一大堆数字字母就是加密过的密文,所以我们要想办法解密密文。
| 接口 | 分析 | 提交类型| 提交参数|
| :-------------: |:-------------:| :-----:| :-----:|
| app/ping | 类似cmd的ping,查看是否可用 | post | _data=B025A5C8C19162309523E7810179E92C |
| app/info | 应该是获取app的信息 | post | _data=太长。。用XX替换|
## 分析_data
2个接口都有_data字符串,所以我们可以在jadx(或MT/NP等,以下用jadx代替)中搜索"_data
发现两个相关的
~~~java
public static PostRequest a(String str, HashMap<String, String> hashMap) {
String str2;
HttpParams httpParams = new HttpParams();
try {
JSONObject jSONObject = new JSONObject();
for (Map.Entry<String, String> entry : hashMap.entrySet()) {
jSONObject.put(entry.getKey(), entry.getValue());
}
str2 = jSONObject.toString();
} catch (Exception e) {
e.printStackTrace();
str2 = "";
}/* str2的处理方法 */
p.a("request-post==>" + str, str2);
httpParams.put("_data", a.a(str2, a.a, a.b), new boolean);/* 搜到的_data */
return (PostRequest) a(str).params(httpParams);
}
~~~
那么这个a.a应该就是加密的函数,str2应该就是明文,那么我们看看a.a和a.b是什么?
### a.a
右键a.a跳到声明,
~~~java
public class a {
public static final String a = o.a();/* a.a */
public static final String b = o.b();/* a.b */
/* 以下省略老多代码 */
}
~~~
可以看出a.a是由o.a()生成,而a.b是由o.b生成,我们再跳o.a和o.b,发现代码
~~~java
public final class o {
public static final String a() {/* o.a */
byte[] a = com.jpdfh.friendly.http.a.a.a("34656664336636303630653230333332");
c.a((Object) a, "AesEncryptionUtil.hex2byte(UrlGroup.enKEY)");
Charset defaultCharset = Charset.defaultCharset();
c.a((Object) defaultCharset, "Charset.defaultCharset()");
return new String(a, defaultCharset);
}
public static final String b() {/* o.b */
byte[] a = com.jpdfh.friendly.http.a.a.a("35323532303266393134396530363177");
c.a((Object) a, "AesEncryptionUtil.hex2byte(Constants.enIV)");
Charset defaultCharset = Charset.defaultCharset();
c.a((Object) defaultCharset, "Charset.defaultCharset()");
return new String(a, defaultCharset);
}
public static final String c() {/* o.c */
byte[] a = com.jpdfh.friendly.http.a.a.a("35313532303266393134396530363161");
c.a((Object) a, "AesEncryptionUtil.hex2byte(UrlGroup.CHANNEL_KEY)");
Charset defaultCharset = Charset.defaultCharset();
c.a((Object) defaultCharset, "Charset.defaultCharset()");
return new String(a, defaultCharset);
}
}
~~~
o.a可以看出是AES的KEY,o.b是AES的IV偏移。o.c是CHANNEL_KEY暂时先不看他(因为AES解密有key和iv就够了。。)
那么一长串的34656664336636303630653230333332是什么东西呢?我们继续看com.jpdfh.friendly.http.a.a.a这个函数
~~~java
public static byte[] a(String str) {
if (str == null || str.length() < 2) {
return new byte;
}
String lowerCase = str.toLowerCase();
int length = lowerCase.length() / 2;
byte[] bArr = new byte;
for (int i = 0; i < length; i++) {
int i2 = i * 2;
bArr = (byte) (Integer.parseInt(lowerCase.substring(i2, i2 + 2), 16) & 255);
}
return bArr;
}
~~~
因为小弟自学的java也不咋地,只能借用e4a的接口函数调用com.jpdfh.friendly.http.a.a.a了。
~~~e
调试输出 (到文本 (HEX解码 (“34656664336636303630653230333332”))) ' 易语言
字节到文本(十六进制到字节集(“34656664336636303630653230333332”),"utf-8") 'e4a
~~~
### 小小总结下a.a加密函数
a.a(str2, a.a, a.b)
| 参数 | 内容 | 最后结果|备注|
| :------------- :|:-------------:| :-----:|:-----:|
| str2 | 需要加密的明文| | |
| a.a | o.a()=HEX解码('34656664336636303630653230333332') |4efd3f6060e20332|key|
| a.b | o.b()=HEX解码('35323532303266393134396530363177') |525202f9149e061w|iv|
### 解密_data和返回的data
用在线AES解密或者易语言的e2ee成功解密
解密_data:
解密返回的app/info返回的data:
可以看出app/info返回了accessToken/userId/username/expiresIn/ads广告等信息。
## 填写邀请码user/bind
通过抓包我们发现user/bind中的加密参数XXXXXXXX,解密结果为{"code":"XXXXX"}
## 小小的分析一波
输入邀请码的时候只提交了code邀请码,那是怎么判断是哪一个用户提交的邀请码呢?我们看header
| key | Value| 来源|
| :-------------: |:-------------:|:-------------:|
| access-token | 67XXXXXXXXXXXXXe5 | /app/info中解密的来 |
| app-key | ytg548ouyxnaq9 | 反编译APP,值是固定的 |
| device-id | 86XXXXXXXXXX32 | 用户手机的imei |
接下来就可以编写注册+刷邀请的软件咯
---
# 注册+邀请软件
【PS:请自己动手。。】
1.抓包分析提交的参数和网址
2.结合编程工具伪造imei等参数,生成新用户
3.新用户填写邀请码..
我用的是易语言编程....很简单
---
# 体现在APP上是这样的
---
# 下载区
e4a语言_接口函数
之HEX解码源码,密码:52pj 下载: https://wwa.lanzoui.com/iBUWwktcwad
之HEX解码成品,密码:52pj 下载: https://wwa.lanzoui.com/iAimqktf9oh
---
# APP的另外一些小小的分析
## APP中的base64图片处理
这个APP的图片处理稍微有点意思,以前见过的APP都是直接data:image/jpeg;base64
而这个APP的图还出现了$$ ## ^^等字符
我们搜"## 发现
~~~java
public static String a(String str) {
return str.replace("**", "=").replace("$$", "J").replace("##", "H").replace("^^", "A");
}
~~~
替换之后再解码,真正的图片就出现了
---
## 关于m3u8下载
还记得解密data的时候的图吗?
Referer: http://www.qq.com
记得要加Referer来源。。。
---
## 关于APP下载视频
抓包发现会通过dodownload判断是否允许下载视频
通过AutoResponder返回y,例:{"status":"y","data":"","time":"2021-01-25 14:11:47"}
当然也可以反编译,jadx搜dodownload,进行相关的反编译,小弟技术有限
就好比楼主给了把钥匙,但是不知道这要是开那个锁{:1_926:} 闷骚小贱男 发表于 2021-1-26 18:03
但是....我不会JAVA呀...咋hook
链接:https://pan.baidu.com/s/1mOteZEPVlIllH7Wv1gQAZg
提取码:6xfz
复制这段内容后打开百度网盘手机App,操作更方便哦
希望能帮到你,然后你能继续帮助更多人,这个是hook Java层的代码! so层代码要另外一套,暂时不是无密无法分享!有了我会分享。 支持楼主,请看看"5YyF5ZCN5pCc5LqGYmFpZHUsZ29vZ2xl6YO95om+5LiN5YiwYXBw5ZWK77yM57uZ5Liq57q/57Si" xujunfengswxj 发表于 2021-1-26 19:41
链接:https://pan.baidu.com/s/1mOteZEPVlIllH7Wv1gQAZg
提取码:6xfz
复制这段内容后打开百度网盘 ...
{:301_1008:}我以为你会直接给我发一个简单的小demo 我有个朋友。jpg stilllove88 发表于 2021-1-26 19:19
大概率是番 和谐啪 和谐 啪
你说这个搜不到呢,但是看图标剩下的一点,那个字不像是番呢 本帖最后由 闷骚小贱男 于 2021-1-27 10:13 编辑
mscsky 发表于 2021-1-27 10:06
大佬可以讲讲邀请工具怎么写吗
1.抓包分析提交的参数和网址
2.结合编程工具伪造imei等参数,生成新用户
3.新用户填写邀请码..
我用的是易语言编程....很简单
不一定非要写软件..我是为了研究APP的.. 这个有vip好像用处不大,貌似还有付费的🌝 学习学习 学习学习这个APP有点眼熟啊谢谢分享 吾爱学习 刷邀请吗?很不错。不要刷多了不会被封杀吗 学了java,没学和安卓相关的,难受。。。 虽然看不懂,但是感觉很厉害{:1_923:} 楼主每次都不说名称:wwqwq:wwqwq 学习学习