吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1710|回复: 13
收起左侧

[Android 原创] 新手分析某住宿APP的登录密码加密算法

  [复制链接]
zhushixu 发表于 2024-7-5 17:16
工具
  • Reqable
  • JADX
  • CyberChef
  • w8DXoQ==


分析过程
抓包
使用Reqable进行抓包,得到抓包结果,手机号是明文,密码是经过加密的:

抓包结果

抓包结果


分析
使用PKID查看加固信息,发现是360加固。我一开始使用的是frIDA-dexdump,结果每次脱都出错,后来使用的funDex成功脱下来
2.png
将dex拖入到JADX中,然后搜索"password"和"mobile"都没有找到符合条件的地方。我想着找到点击登录按钮的方法是不是就好多了?
3.png
我在终端中输入“adb shell dumpsys window | grep -E 'mCurrentFocus|mFocusedApp'”,通过Adb命令获取当前Activity的名字,然后在去JADX中找到相应的页面。
4.png
取得这些信息以后,我在JADX中找到了这个位置
5.png
所幸这些代码不是很多,也比较容易分析,否则让我这小白又得挠破头皮了,在这代码中找到了一个login()的方法,里面又调用了另一个Login(),同时传入了三个参数,分别是账号、密码、区号,这不是跟上图抓包的数据参数一样吗,于是果断跟进去看看
6.png
跟进来以后,可以看到它又调用了一个login的方法,可以看到传密码的参数这里是将明文密码给加密了,我跟进到了加密密码的这个方法encodeLoginPassword中
7.png
可以看到,这个对密码的加密方式是将用户输入的密码加上"11111111"以后再进行的加密,加密方法有两个参数,第一个是加密的内容,第二个是publickey
8.png
先去获取一下publickey,他好像能直接跳转
9.png
获取完publickey以后,再进encryptData方法里看一下,可以看到是RSA/ECB/PKCS1Padding加密的
10.png
到此基本已分析完毕,使用CyberChef计算一下(说实在的,算了和没算一样,没法验证,我没有账号
11.png
使用Python写一下代码(chatGPT生成的,我懒)

[Python] 纯文本查看 复制代码
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.backends import default_backend
import base64

# 加密函数
def rsa_encrypt(data):
    public_key_pem = b"""
    -----BEGIN RSA PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsreEWJXmXH4GmbUkkvKJBE7ileTcEscuPQAGuCCibFKYqW2szVmFOi55ePC58rH89Ohmzf24Xdt2JhmLC4Nvz8qlU3g0p1HpBi96+yq2rlQ2A5iCt08b820i0MIGTPa9PoTl6rSLDNtLUaCGBYXIyzJlX2TXE1gCHcs40BG/2i3xeBYhkGxpIaSwYvSuZt/Jd/qzKKGqXvHy0gneLT8ExXdgU+k/t1lHXfTYD+bGr69p2w8FRLlqBaIoqUF0Oom5Gi5lBCXhzAUnWoE3Uz9PI7mgqr8dhCXdf5DSlp4/PEqOsE88dAQkk3xOeCQoy0QR3kxO+oZrb97YVrz6xpKW3QIDAQAB
    -----END RSA PUBLIC KEY-----
    """
    public_key = serialization.load_pem_public_key(public_key_pem, backend=default_backend())
    ciphertext = public_key.encrypt(
        data,
        padding.PKCS1v15()  # PKCS1v15 对应于 PKCS1Padding
    )
    return base64.b64encode(ciphertext)


if __name__ == '__main__':
    data = b"11111111a123456"
    encrypted_data = rsa_encrypt(data)
    print("加密结果:")
    print(encrypted_data.decode())


这个app使用算法助手分分钟就能搞定了,但是对于一个新手来说,这种简单的app是非常适合练习的。由于我没有这个app的账号,所以根本没法验证我搞的是不是正确的。
新手学习,各位勿喷


免费评分

参与人数 7吾爱币 +13 热心值 +7 收起 理由
junjia215 + 1 + 1 用心讨论,共获提升!
Arcticlyc + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
fsunmoon + 1 + 1 热心回复!
浪里浪里个浪 + 1 热心回复!
正己 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
debug_cat + 2 + 1 用心讨论,共获提升!
Issacclark1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

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

小猫猫 发表于 2024-7-8 12:26
感谢分享。
gqdsc 发表于 2024-7-8 17:01
debug_cat 发表于 2024-7-9 10:03
szba1120 发表于 2024-7-9 18:21
数字加固 也能看到源码?
SR1018 发表于 2024-7-9 18:32
看不懂,还是感觉很牛的
aqwertyuioplkjh 发表于 2024-7-9 19:32
OK。学习一下
DanielChen 发表于 2024-7-9 19:56
感谢分享,学习一下
GHFXX 发表于 2024-7-9 21:20
学到了新思路,可以的
liming7347 发表于 2024-7-9 21:54
谢谢老师分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-21 18:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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