闷骚小贱男 发表于 2021-1-25 16:37

白嫖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,进行相关的反编译,小弟技术有限




光辉夜色 发表于 2021-1-25 23:15

就好比楼主给了把钥匙,但是不知道这要是开那个锁{:1_926:}

xujunfengswxj 发表于 2021-1-26 19:41

闷骚小贱男 发表于 2021-1-26 18:03
但是....我不会JAVA呀...咋hook

链接:https://pan.baidu.com/s/1mOteZEPVlIllH7Wv1gQAZg
提取码:6xfz
复制这段内容后打开百度网盘手机App,操作更方便哦


希望能帮到你,然后你能继续帮助更多人,这个是hook Java层的代码! so层代码要另外一套,暂时不是无密无法分享!有了我会分享。

Mr.ByQ 发表于 2021-1-26 14:04

支持楼主,请看看"5YyF5ZCN5pCc5LqGYmFpZHUsZ29vZ2xl6YO95om+5LiN5YiwYXBw5ZWK77yM57uZ5Liq57q/57Si"

闷骚小贱男 发表于 2021-1-26 20:50

xujunfengswxj 发表于 2021-1-26 19:41
链接:https://pan.baidu.com/s/1mOteZEPVlIllH7Wv1gQAZg
提取码:6xfz
复制这段内容后打开百度网盘 ...

{:301_1008:}我以为你会直接给我发一个简单的小demo

紫苏丶 发表于 2021-1-25 20:35

我有个朋友。jpg

xlose13720 发表于 2021-1-27 13:43

stilllove88 发表于 2021-1-26 19:19
大概率是番   和谐啪    和谐 啪

你说这个搜不到呢,但是看图标剩下的一点,那个字不像是番呢

闷骚小贱男 发表于 2021-1-27 10:10

本帖最后由 闷骚小贱男 于 2021-1-27 10:13 编辑

mscsky 发表于 2021-1-27 10:06
大佬可以讲讲邀请工具怎么写吗
1.抓包分析提交的参数和网址
2.结合编程工具伪造imei等参数,生成新用户
3.新用户填写邀请码..

我用的是易语言编程....很简单


不一定非要写软件..我是为了研究APP的..

ma147258 发表于 2021-1-26 20:50

这个有vip好像用处不大,貌似还有付费的&#127773;

木有海鲜 发表于 2021-1-25 19:12

学习学习

stilllove88 发表于 2021-1-25 19:42

学习学习这个APP有点眼熟啊谢谢分享

ALBERTLEE 发表于 2021-1-25 19:47

吾爱学习

xiaohuaisu 发表于 2021-1-25 19:47

刷邀请吗?很不错。不要刷多了不会被封杀吗

QingYi. 发表于 2021-1-25 19:52

学了java,没学和安卓相关的,难受。。。

vemdaixu 发表于 2021-1-25 20:31

虽然看不懂,但是感觉很厉害{:1_923:}

梦里无念 发表于 2021-1-25 20:32

楼主每次都不说名称:wwqwq:wwqwq

努力的笨蛋 发表于 2021-1-25 20:48

学习学习
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 白嫖9999天VIP会员,某APP之AES加解密+一些小分析