吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7351|回复: 64
收起左侧

[Android 原创] 小白入门,无壳app登录算法还原并实现发包(重发)

  [复制链接]
xaf 发表于 2023-7-1 18:35
本帖最后由 xaf 于 2023-7-1 21:32 编辑

如题本文主要讲某app登录算法还原并实现发包的全过程,此app非常适合小白入门时拿来练手,是一个无壳无混淆的app,软件链接我放在文章最下面,建议先看一下文章后,再去下载上手。
1.jpg
从jadx分析得到上图代码,是手机号加密码的发包位置,其中可见手机号和密码都被传入了login,跟踪进去后,可见的相关代码如下图。
2.jpg
这里login又调用的私有方法doLogin,将手机号和密码传给了UserService里面,我们进行追踪,得到如下图代码。
3.jpg
看到了密码登录参数,手机号和密码被传入了这里,密码被传进了getMD5后,加密后存入了params又传入了getRSAParams,然后传入request,先继续追踪getMD5,
4.jpg
是一个普通的MD5,用python进行一下复现,代码如下。
6.jpg
然后追进getRSAParams里面得到下图代码,写的还挺多,又一层base64加密,还有RSA加密
7.jpg
先用frIDA来对这个对象动刀子,得结果如下

  • getRSAParams is called, params: {password=d8578edf8458ce06fbc5bb76a58c5ca4, os=android, mobile=15536263522, version=2.2.3}
  • getRSAParams ret value is {data=eyJwYXNzd29yZCI6ImQ4NTc4ZWRmODQ1OGNlMDZmYmM1YmI3NmE1OGM1Y2E0Iiwib3MiOiJhbmRyb2lkIiwibW9iaWxlIjoiMTU1MzYyNjM1MjIiLCJ2ZXJzaW9uIjoiMi4yLjMifQ==,
  • sign=DmxjCCvf8aJnZNve4BQkcy6turIGzkE13DkIu9JSnJF7yUDp3ZUxANRnSn6+BCN2nEogZsHFOm0fzzTU/NMnEqijA8lklHoxZspzVOe6Hkp8jYRrzvf0PQIh25lEL2GGWSslgzEK710opNDoQUVHA95ArOv9FQN95HxZuj7ywio=, timestamp=1687264102}


传入之前的密码,和python复现的MD5结果相同,传入getRSAParams后成了后面的三项,data   sign   和   timestamp,然后这些数据和charles抓包得到的login数据相同。

先解决data,进行追踪得到下图代码。Base64加密与解密,
8.jpg
对其进行python复现得到下图代码,运行结果与frida打印信息相同,
9.jpg
接着追踪sign的相关代码,得到下图代码
10.jpg
这里用frida进行hook,得到信息如下,可见这里是data与timestamp的拼接被传入了sign,被privateKey进行了加密,然后得到的sign
  • sign is called, content: data=eyJwYXNzd29yZCI6ImQ4NTc4ZWRmODQ1OGNlMDZmYmM1YmI3NmE1OGM1Y2E0Iiwib3MiOiJhbmRyb2lkIiwibW9iaWxlIjoiMTU1MzYyNjM1MjIiLCJ2ZXJzaW9uIjoiMi4yLjMifQ==×tamp=1687276955,
  • privateKey: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMNGABIfN+iron2hbwB7mLK1Dm05V1qLZBILTDj7dypr+GJzQ9fk0V7gIIchpFG7pDQEXMbb2nj8VkNAIIDBaw7UY1h9n+sCBT+Xzz6BB2UxLBBMQVwOwv55tJkZ2YBcHFQDGz51HjxAonKJdHwGpjIp7bwdx375gybn2ic4qNuFAgMBAAECgYEAmcha7eqgASCKCx5DaMHtc2+bOPFblfcIjB1Rnd6L7mCxb/cOisutB2bCtykLW0LHAiAdYI5r87Ply3iJIF0yjU35I8aieDVmeaQXXQfpisimXLOmz6p4VlBzAkz493oXPEH81cHqbwnFkiFE3VVtHbCNoZqXlFWthIdae2kpjlECQQDyCMl09eyDBNGuzg1r4tAQ4CeZe7aCkEFwK2at76Raqz9NKrynBiZHsKLU3JedRm2eZ7JimUhsuKbbkS/mcxBrAkEAzop7/PyddSXGDFDECyuXtuEKyzzUvdGiyNmOexhSwTmTZ7QdQqe5p382yCQcY8RXxZ6W9CLjuukfa9I6Tcz/zwJAQbjpG318D8fLOHBzbIxWe36iwia51JJfcpoWc7zTIFvIAKhOOfyNgIISdULBWM+7DHyUD/oXlI4/oPe3zhgIqQJAQd3gFJnrDQTy19KZ8oYAaA30h0PrBG3qX+shiRgErCJUY+oIus0KY+Qp8EGz3A0tgJRGx6you17E6nmspksN+QJBAKhaBGeHqs0+Z5wtFcunuqc6hV7WlhBYCe5YSxBNSiaohXDr6nQwjiOY22Q3m8aInp9KS+lDwW0o4C58VARKyo8=
  • sign ret value is Z5dDahgsBp06lh76v1fos8GSqX4HdcB+vJBJgw4qWN6wJ52T2LkX9e/WqtLrb+biSg10J23/f0KIQW57GFLIWEgLwQRWgKaacvJJVMtoeETAXhgMvYU9LWmjFzrtd1EuRLyHLVkWik7IbJM5mySllm+bG/nfcPvohXp6ATRqy7k=

11.jpg
sign的python还原,生成的结果与frida的hook结果相同,sign完成,然后就是将已经实现的python代码进行拼接,并完成发包。

首先实现手机号与密码的输入,传入parems,实现相同的login。
12.jpg
python实现代码如下
13.jpg
接着实现下图代码:
14.jpg
python实现代码如下:
15.jpg
最终实现发包:
16.jpg


最终发包代码:
[Python] 纯文本查看 复制代码
import requests
import json
import time
import hashlib
from Crypto.Hash import SHA
from Crypto.Signature import pkcs1_15
from Crypto.PublicKey import RSA
import base64
pey = 'MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMNGABIfN+iron2hbwB7mLK1Dm05V1qLZBILTDj7dypr+GJzQ9fk0V7gIIchpFG7pDQEXMbb2nj8VkNAIIDBaw7UY1h9n+sCBT+Xzz6BB2UxLBBMQVwOwv55tJkZ2YBcHFQDGz51HjxAonKJdHwGpjIp7bwdx375gybn2ic4qNuFAgMBAAECgYEAmcha7eqgASCKCx5DaMHtc2+bOPFblfcIjB1Rnd6L7mCxb/cOisutB2bCtykLW0LHAiAdYI5r87Ply3iJIF0yjU35I8aieDVmeaQXXQfpisimXLOmz6p4VlBzAkz493oXPEH81cHqbwnFkiFE3VVtHbCNoZqXlFWthIdae2kpjlECQQDyCMl09eyDBNGuzg1r4tAQ4CeZe7aCkEFwK2at76Raqz9NKrynBiZHsKLU3JedRm2eZ7JimUhsuKbbkS/mcxBrAkEAzop7/PyddSXGDFDECyuXtuEKyzzUvdGiyNmOexhSwTmTZ7QdQqe5p382yCQcY8RXxZ6W9CLjuukfa9I6Tcz/zwJAQbjpG318D8fLOHBzbIxWe36iwia51JJfcpoWc7zTIFvIAKhOOfyNgIISdULBWM+7DHyUD/oXlI4/oPe3zhgIqQJAQd3gFJnrDQTy19KZ8oYAaA30h0PrBG3qX+shiRgErCJUY+oIus0KY+Qp8EGz3A0tgJRGx6you17E6nmspksN+QJBAKhaBGeHqs0+Z5wtFcunuqc6hV7WlhBYCe5YSxBNSiaohXDr6nQwjiOY22Q3m8aInp9KS+lDwW0o4C58VARKyo8='
url = 'https://api.langshiyu.com/user/v2/account/login'
def md5(pwd_str):
    md5_obj = hashlib.md5()
    md5_obj.update(pwd_str.encode('utf-8'))
    return md5_obj.hexdigest()
def times():
    return str(int(time.time()))
def sign(content, private_key):
    private_key_value = base64.b64decode(private_key)
    key = RSA.import_key(private_key_value)
    # 计算 SHA-1 哈希值
    hash_value = SHA.new(content.encode('utf-8'))
    # RSA 的密钥长度为 1024 位
    k = 1024
    # 计算最大签名长度,根据 Java 的实现方式计算
    em_len = k // 4
    h_len = 20
    t_len = 3
    s_len = em_len - h_len - t_len - 1
    # 进行签名
    signature_value = pkcs1_15.new(key).sign(hash_value)[:s_len]
    # 返回 Base64 编码的结果
    return base64.b64encode(signature_value).decode()
def login(mobile, param):
    params = {
        "password": md5(param),
        "os": "android",
        "mobile": mobile,
        "version": "2.2.3",
    }
    return params
def jiaparams(params):
    # 将参数转换为 JSON 字符串,并进行 Base64 编码
    params_json = json.dumps(params,separators=(',', ':'))
    print("json转成功:",params_json)
    data = base64.b64encode(params_json.encode('utf-8')).decode('utf-8')
    print("data成功:",data)
    # 对加密后的参数进行签名
    signstr = f"data={data}×tamp={times()}"
    print("时间戳:",times())
    print("拼接成功",signstr)
    signss = sign(signstr, pey)#sign加密的地方
    print("sign成功",signss)
    # 创建一个空字典用于存储加密后的参数
    result = {}
    result['data'] = data
    result['sign'] = signss
    result['timestamp'] = times()
    return result
mobile = input("请输入16位手机号:")
parem = input("请输入密码:")
params = login(mobile,parem)
paramss = jiaparams(params)
print("发包内容:",paramss)
fb= requests.post(url, paramss)
print("结果:",fb.text)bjsdm
#结果:{"code":0,"message":"该账户不存在","reqdata":{"data":0},"reqtime":"0.015238"}



app放在有道云文章里面,想尝试一下的小白可以进去拿一下。
算法还原过程有道云文章链接:https://note.youdao.com/s/Yf9jGzqk



如有违规,请管理及时删帖

免费评分

参与人数 25威望 +2 吾爱币 +125 热心值 +23 收起 理由
junjia215 + 1 + 1 谢谢@Thanks!
stroop + 1 + 1 我很赞同!
cx831174 + 1 + 1 谢谢@Thanks!
EXIA2008 + 1 + 1 谢谢@Thanks!
kkkx + 1 + 1 谢谢@Thanks!
wjy8267 + 1 我很赞同!
Zz4794zZ + 1 + 1 热心回复!
rq9sc8eexqm + 1 + 1 谢谢@Thanks!
小菜鸟一枚 + 1 + 1 用心讨论,共获提升!
gaosld + 1 + 1 热心回复!
心比天傲 + 1 我很赞同!
victos + 1 + 1 谢谢@Thanks!
huawei518 + 1 + 1 谢谢@Thanks!学习了!
Cofei430 + 1 + 1 谢谢@Thanks!
Yangzaipython + 1 + 1 鼓励转贴优秀软件安全工具和文档!
wystudio + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
D3M1 + 1 + 1 谢谢@Thanks!
yunhen + 1 + 1 我很赞同!
苏小柒 + 2 + 1 我很赞同!
allspark + 1 + 1 用心讨论,共获提升!
fengbolee + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
正己 + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
ytfh1131 + 1 + 1 谢谢@Thanks!
youga777 + 1 热心回复!
likewebxcj + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

baopushouzhuo 发表于 2023-7-5 19:30
学习了 谢谢
 楼主| xaf 发表于 2023-7-16 18:10
rq9sc8eexqm 发表于 2023-7-16 11:43
写的很详细 厉害,但我就是不知道用相关软件及使用步骤

这个操作不多,就是把apk拖入jadx,找对应代码,分析逻辑,然后跑去python复现,就这个逻辑,不会写的代码扔给GPT,
llamb 发表于 2023-7-3 08:39
 楼主| xaf 发表于 2023-7-3 12:03
llamb 发表于 2023-7-3 08:39
你好相关工具列表能发一下吗?

jadx
pycharm
代码不懂部分用GPT

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
llamb + 1 + 1 热心回复!

查看全部评分

zhy1992 发表于 2023-7-4 09:19
写的很详细 厉害
xlwllm 发表于 2023-7-4 09:41
很详细 厉害
jingyao066 发表于 2023-7-4 11:09
谢谢,学习了
AuroraAqi 发表于 2023-7-4 18:10

写的很详细 厉害
zk0017 发表于 2023-7-5 20:06
不加壳吧安装报警加了壳吧还报警
ailisi325 发表于 2023-7-5 22:13
这东西想学又看不懂
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-23 15:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表