返回列表 发新帖
楼主: 正己 - 

《安卓逆向这档事》二十二、抓包学得好,牢饭吃得饱(下)

  [复制链接]

29

主题

1327

回帖

3841

积分

大学生

Rank: 5Rank: 5

金币
2507
好评
1
信誉
98

考神

发表于 2024-11-18 19:39:53 来自手机  | 显示全部楼层  来自 四川
学习学习
回复

使用道具 举报

91

主题

3807

回帖

2万

积分

博士后

萌新

Rank: 8Rank: 8

金币
10363
好评
335
信誉
278

考神MT论坛帅哥MT论坛最佳新人MT论坛活跃会员

QQ
发表于 2024-11-18 19:40:21 | 显示全部楼层  来自 福建
本帖最后由 正己 于 2024-11-20 09:17 编辑

4.简单加解密协议实战
说一下这里服务端配置需要通过ipconfig获取到真实的ip地址替换,除此之外,还需要对教程demo里的dex进行修改,字符串搜搜192.,然后把对应接口的ip地址换成刚才获取到的ip地址
`服务端代码:`
  1. python
  2. import hashlib  
  3. import json  
  4. import base64  
  5. import time  
  6. from Crypto.Cipher import AES  
  7. from Crypto.Util.Padding import pad  
  8. from cryptography.hazmat.primitives import padding  
  9. from flask import Flask, jsonify, request  
  10.   
  11. app = Flask(__name__)  
  12.   
  13.   
  14. [b]加密函数  [/b]
  15. def aes_encrypt(data: str) -> str:  
  16.     key = b'1234567890abcdefwuaipojie0abcdef'  
  17.     iv = b'1234567wuaipojie'  [b]Initialization Vector  [/b]
  18.     cipher = AES.new(key, AES.MODE_CBC, iv)  
  19.     encrypted_data = cipher.encrypt(pad(data.encode('utf-8'), AES.block_size))  
  20.     return base64.b64encode(encrypted_data).decode('utf-8')  
  21.   
  22. [b]解密函数  [/b]
  23. def aes_decrypt(encrypted_data: str) -> dict:  
  24.     key = b'1234567890abcdefwuaipojie0abcdef'  
  25.     iv = b'1234567wuaipojie'  [b]Initialization Vector  [/b]
  26.     cipher = AES.new(key, AES.MODE_CBC, iv)  
  27.     encrypted_bytes = base64.b64decode(encrypted_data)  
  28.     decrypted_data = cipher.decrypt(encrypted_bytes)  
  29.     unpadder = padding.PKCS7(AES.block_size * 8).unpadder()  
  30.     decrypted_unpadded = unpadder.update(decrypted_data) + unpadder.finalize()  
  31.     decrypted_str = decrypted_unpadded.decode('utf-8')  
  32.     return json.loads(decrypted_str)  
  33.   
  34. [b]读取用户数据  [/b]
  35. with open('user_data.json', 'r') as file:  
  36.     user_data = json.load(file)  
  37.   
  38. [b]写入本地JSON文件  [/b]
  39. def write_json_file(file_path: str, data: dict):  
  40.     with open(file_path, 'w') as file:  
  41.         json.dump(data, file, indent=4)  
  42.   
  43. [b]生成签名函数  [/b]
  44. def generate_signature(user_id: str, coin: int, timestamp: int) -> str:  
  45.     message = f"{user_id}&{coin}&{timestamp}"  
  46.     hash_object = hashlib.md5(message.encode())  
  47.     return hash_object.hexdigest()  
  48.   
  49.   
  50. @app.route('/get_coin', methods=['POST'])  
  51. def get_coin():  
  52.     [b]获取加密的数据  [/b]
  53.     encrypted_data = request.json.get('user_data')  
  54.     if not encrypted_data:  
  55.         return jsonify({"error": "数据有误!"}), 400  
  56.     try:  
  57.         [b]解密数据  [/b]
  58.         decrypted_data = aes_decrypt(encrypted_data)  
  59.         [b]验证签名  [/b]
  60.         timestamp = int(decrypted_data.get('timestamp'))  
  61.         current_time = int(time.time()*1000)  
  62.         print(timestamp)  
  63.         print(abs(current_time - timestamp))  
  64.         if abs(current_time - timestamp) > 5000:  
  65.             return jsonify({"error": "请求过期!"}), 400  
  66.         sign = decrypted_data.get('sign')  
  67.         [b]计算签名  [/b]
  68.         expected_sign = generate_signature(decrypted_data["user_id"], 1, timestamp)  
  69.         if sign != expected_sign:  
  70.             return jsonify({"error": "签名验证失败!"}), 401  
  71.         [b]验证成功后,获取用户的金币数量  [/b]
  72.         user_id = decrypted_data.get('user_id')  
  73.         if user_id in user_data['user_id']:  
  74.             user_data['coin_amount'] += 1  [b]增加金币数量  [/b]
  75.             write_json_file('user_data.json', user_data)  [b]写入文件  [/b]
  76.             return jsonify({"投币成功,当前数量为:": user_data['coin_amount']})  
  77.         else:  
  78.             return jsonify({"error": "用户未找到!"}), 404  
  79.     except Exception as e:  
  80.         return jsonify({"error": f"处理请求时出错: {str(e)}"}), 500  
  81.   
  82. @app.route('/get_user_data', methods=['GET'])  
  83. def get_user_data():  
  84.     [b]将数据转换成字符串形式以便于加密  [/b]
  85.     data_str = json.dumps(user_data)  
  86.     return jsonify({"user_data": data_str})  
  87.   
  88. if __name__ == '__main__':  
  89.     app.run(host='192.168.73.82', port=5000)
复制代码


`协议实现:`
  1. python
  2. import json  
  3. import base64  
  4. import hashlib  
  5. import time  
  6.   
  7. from Crypto.Cipher import AES  
  8. from Crypto.Util.Padding import pad  
  9. from datetime import datetime  
  10. import requests  
  11.   
  12. [b]生成签名函数  [/b]
  13. def generate_signature(user_id: str, coin: int, timestamp: int) -> str:  
  14.     message = f"{user_id}&{coin}&{timestamp}"  
  15.     hash_object = hashlib.md5(message.encode())  
  16.     return hash_object.hexdigest()  
  17.   
  18. [b]加密函数  [/b]
  19. def aes_encrypt(data: str) -> str:  
  20.     key = b'1234567890abcdefwuaipojie0abcdef'  
  21.     iv = b'1234567wuaipojie'  [b]Initialization Vector  [/b]
  22.     cipher = AES.new(key, AES.MODE_CBC, iv)  
  23.     encrypted_data = cipher.encrypt(pad(data.encode('utf-8'), AES.block_size))  
  24.     return base64.b64encode(encrypted_data).decode('utf-8')  
  25.   
  26. [b]模拟用户数据  [/b]
  27. user_data = {  
  28.     "user_id": "zj2595",  
  29.     "timestamp": int(time.time()*1000),  [b]当前时间的时间戳  [/b]
  30.     "sign": "",  [b]这个稍后计算并赋值  [/b]
  31. }  
  32.   
  33. [b]计算签名  [/b]
  34. user_data["sign"] = generate_signature(user_data["user_id"], 1, user_data["timestamp"])  
  35.   
  36. [b]转换为JSON字符串  [/b]
  37. data_str = json.dumps(user_data)  
  38.   
  39. [b]加密数据  [/b]
  40. encrypted_data = aes_encrypt(data_str)  
  41.   
  42. [b]发送POST请求  [/b]
  43. try:  
  44.     response = requests.post(  
  45.         'http://192.168.73.82:5000/get_coin',  
  46.         json={"user_data": encrypted_data},  
  47.   
  48.     )  
  49.     if response.status_code == 200:  
  50.         print("投币成功")  
  51.         print("Response:", response.json())  
  52.     else:  
  53.         print(f"Request failed with status code: {response.status_code}")  
  54. except requests.exceptions.RequestException as e:  
  55.     print(f"请求出现异常: {e}")
复制代码

四、请作者喝杯咖啡


六、视频及课件地址


百度云
阿里云
哔哩哔哩
教程开源地址
PS:解压密码都是52pj,阿里云由于不能分享压缩包,所以下载exe文件,双击自解压

# 八、参考文档
[炒冷饭汇总抓包姿势-上](https://bbs.kanxue.com/thread-278142.htm)
[安卓 App 逆向课程之四 frida 注入 Okhttp 抓包中篇](https://cloud.tencent.com/developer/article/1663828)
回复

使用道具 举报

688

主题

1万

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
3412
好评
164
信誉
119

考神MT论坛新人MT论坛活跃会员MT论坛帅哥MT论坛灌水老大MT论坛侠客MT论坛最佳新人

发表于 2024-11-18 19:42:34 来自手机  | 显示全部楼层  来自 广东
看看隐藏
回复

使用道具 举报

16

主题

549

回帖

2095

积分

大学生

Rank: 5Rank: 5

金币
905
好评
0
信誉
100
发表于 2024-11-18 19:43:15 来自手机  | 显示全部楼层  来自 山东
大佬终于出教程了
回复

使用道具 举报

2

主题

5598

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
2067
好评
6
信誉
88
发表于 2024-11-18 19:43:19 来自手机  | 显示全部楼层  来自 广东
感谢分享
回复

使用道具 举报

24

主题

3301

回帖

7118

积分

硕士生

Rank: 6Rank: 6

金币
4269
好评
0
信誉
104

MT论坛新人考神

发表于 2024-11-18 19:43:50 来自手机  | 显示全部楼层  来自 河南
看看隐藏
回复

使用道具 举报

13

主题

1703

回帖

6557

积分

硕士生

Rank: 6Rank: 6

金币
2033
好评
1
信誉
98
发表于 2024-11-18 19:46:45 来自手机  | 显示全部楼层  来自 浙江
感谢大佬的教程
回复

使用道具 举报

7

主题

233

回帖

2743

积分

大学生

Rank: 5Rank: 5

金币
994
好评
0
信誉
100

MT论坛帅哥考神MT论坛新人

发表于 2024-11-18 19:51:41 来自手机  | 显示全部楼层  来自 浙江
怎么了
回复

使用道具 举报

34

主题

7773

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
4234
好评
24
信誉
143

考神

发表于 2024-11-18 19:57:04 来自手机  | 显示全部楼层  来自 山东
看看隐藏,学习一下。
回复

使用道具 举报

0

主题

624

回帖

2123

积分

大学生

Rank: 5Rank: 5

金币
1520
好评
0
信誉
100
QQ
发表于 2024-11-18 19:57:27 来自手机  | 显示全部楼层  来自 安徽
看看
回复

使用道具 举报

14

主题

1588

回帖

5807

积分

硕士生

Rank: 6Rank: 6

金币
4137
好评
3
信誉
100

MT论坛最佳新人考神

发表于 2024-11-18 19:57:28 来自手机  | 显示全部楼层  来自 江苏
大佬课程,先收藏,后学习
回复

使用道具 举报

23

主题

1845

回帖

5688

积分

硕士生

Rank: 6Rank: 6

金币
3763
好评
1
信誉
101
QQ
发表于 2024-11-18 19:57:35 来自手机  | 显示全部楼层  来自 广西
看看
回复

使用道具 举报

55

主题

2211

回帖

7340

积分

硕士生

Rank: 6Rank: 6

金币
5719
好评
3
信誉
100

考神MT论坛新人MT论坛帅哥

发表于 2024-11-18 19:58:47 来自手机  | 显示全部楼层  来自 四川
学习
回复

使用道具 举报

36

主题

1392

回帖

4564

积分

大学生

app.zes.one

Rank: 5Rank: 5

金币
2164
好评
2
信誉
100

考神MT论坛最佳新人MT论坛新人

发表于 2024-11-18 19:59:24 来自手机  | 显示全部楼层  来自 江苏
看看
回复

使用道具 举报

0

主题

3865

回帖

9223

积分

硕士生

Rank: 6Rank: 6

金币
3537
好评
0
信誉
109

考神

发表于 2024-11-18 19:59:37 来自手机  | 显示全部楼层  来自 河南
学习学习
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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