reproto 0.0.3__py3-none-any.whl → 0.0.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- .git/HEAD +1 -0
- .git/config +12 -0
- .git/description +1 -0
- .git/hooks/applypatch-msg.sample +15 -0
- .git/hooks/commit-msg.sample +24 -0
- .git/hooks/fsmonitor-watchman.sample +174 -0
- .git/hooks/post-update.sample +8 -0
- .git/hooks/pre-applypatch.sample +14 -0
- .git/hooks/pre-commit.sample +49 -0
- .git/hooks/pre-merge-commit.sample +13 -0
- .git/hooks/pre-push.sample +53 -0
- .git/hooks/pre-rebase.sample +169 -0
- .git/hooks/pre-receive.sample +24 -0
- .git/hooks/prepare-commit-msg.sample +42 -0
- .git/hooks/push-to-checkout.sample +78 -0
- .git/hooks/sendemail-validate.sample +77 -0
- .git/hooks/update.sample +128 -0
- .git/index +0 -0
- .git/info/exclude +6 -0
- .git/logs/HEAD +1 -0
- .git/logs/refs/heads/iyue +1 -0
- .git/logs/refs/remotes/origin/HEAD +1 -0
- .git/objects/pack/pack-55d9855fa45cb686f64bef472f9a7940ef78b8d6.idx +0 -0
- .git/objects/pack/pack-55d9855fa45cb686f64bef472f9a7940ef78b8d6.pack +0 -0
- .git/objects/pack/pack-55d9855fa45cb686f64bef472f9a7940ef78b8d6.rev +0 -0
- .git/packed-refs +2 -0
- .git/refs/heads/iyue +1 -0
- .git/refs/remotes/origin/HEAD +1 -0
- .gitignore +142 -0
- .python-version +1 -0
- ARCHITECTURE.md +266 -0
- README.md +231 -0
- main.py +172 -0
- pyproject.toml +36 -0
- {reproto-0.0.3.dist-info → reproto-0.0.4.dist-info}/METADATA +1 -1
- reproto-0.0.4.dist-info/RECORD +53 -0
- requirements.txt +3 -0
- reproto-0.0.3.dist-info/RECORD +0 -18
- {reproto-0.0.3.dist-info → reproto-0.0.4.dist-info}/WHEEL +0 -0
- {reproto-0.0.3.dist-info → reproto-0.0.4.dist-info}/entry_points.txt +0 -0
README.md
ADDED
@@ -0,0 +1,231 @@
|
|
1
|
+
# Protobuf Reconstructor
|
2
|
+
|
3
|
+
🔧 **从JADX反编译的Java源码自动重构Protobuf .proto文件**
|
4
|
+
|
5
|
+
一个强大的逆向工程工具,能够从任何使用Google Protobuf Lite的Android应用中自动重构出完整的.proto文件结构。
|
6
|
+
|
7
|
+
## ✨ 特性
|
8
|
+
|
9
|
+
- 🎯 **精准解析**: 基于Google Protobuf Lite字节码的逆向工程
|
10
|
+
- 🔄 **递归依赖**: 自动发现和处理所有依赖的消息和枚举类型
|
11
|
+
- 📦 **完整支持**: 支持oneof、repeated、map、枚举等所有Protobuf特性
|
12
|
+
- 🌐 **通用性**: 适用于任何Android应用,无需硬编码映射
|
13
|
+
- 🚀 **高效处理**: 智能队列管理,避免重复处理
|
14
|
+
- 🧠 **智能推断**: 从Java源码直接读取类型信息,确保100%准确性
|
15
|
+
- 📝 **标准输出**: 严格遵循Google Proto Style Guide
|
16
|
+
- 📊 **结构化日志**: 基于loguru的专业日志系统
|
17
|
+
|
18
|
+
## 🛠️ 安装
|
19
|
+
|
20
|
+
### 方法1:直接运行
|
21
|
+
```bash
|
22
|
+
# 克隆项目
|
23
|
+
git clone git@github.com:ys1231/reproto.git
|
24
|
+
cd reproto
|
25
|
+
|
26
|
+
# 安装依赖
|
27
|
+
pip install -r requirements.txt
|
28
|
+
|
29
|
+
# 运行
|
30
|
+
python main.py <java_sources_dir> <root_class> <output_dir>
|
31
|
+
```
|
32
|
+
|
33
|
+
### 方法2:安装为包
|
34
|
+
```bash
|
35
|
+
# 安装到系统
|
36
|
+
pip install -e .
|
37
|
+
|
38
|
+
# 使用命令行工具
|
39
|
+
proto-reconstructor <java_sources_dir> <root_class> <output_dir>
|
40
|
+
```
|
41
|
+
|
42
|
+
## 📖 使用方法
|
43
|
+
|
44
|
+
### 基本用法
|
45
|
+
```bash
|
46
|
+
python main.py ./out_jadx/sources com.example.Model ./protos_generated
|
47
|
+
```
|
48
|
+
|
49
|
+
### 完整参数
|
50
|
+
```bash
|
51
|
+
python main.py <java_sources_dir> <root_class> <output_dir> [--log-dir LOG_DIR] [--help]
|
52
|
+
```
|
53
|
+
|
54
|
+
### 参数说明
|
55
|
+
- `java_sources_dir`: JADX反编译的Java源码目录路径
|
56
|
+
- `root_class`: 要重构的根类完整类名(如:com.example.Model)
|
57
|
+
- `output_dir`: 生成的proto文件输出目录路径
|
58
|
+
- `--log-dir`: 日志文件输出目录(默认:./logs)
|
59
|
+
- `--help`: 显示帮助信息
|
60
|
+
|
61
|
+
### 示例
|
62
|
+
```bash
|
63
|
+
# 重构示例消息应用的数据模型
|
64
|
+
python main.py ./out_jadx/sources com.example.messaging.v1.models.MessageData ./protos_generated
|
65
|
+
|
66
|
+
# 指定日志目录
|
67
|
+
python main.py ./out_jadx/sources com.example.Model ./output --log-dir ./my_logs
|
68
|
+
|
69
|
+
# 重构其他应用的模型
|
70
|
+
python main.py /path/to/jadx/sources com.myapp.data.UserProfile ./output
|
71
|
+
```
|
72
|
+
|
73
|
+
## 🔍 工作原理
|
74
|
+
|
75
|
+
### 核心技术
|
76
|
+
1. **字节码解析**: 逆向工程Google Protobuf Lite的`newMessageInfo`调用
|
77
|
+
2. **依赖发现**: 递归分析Java文件中的类型引用
|
78
|
+
3. **智能推断**: 基于字段名和对象数组推断枚举和消息类型
|
79
|
+
4. **源码分析**: 直接从Java源码读取真实的字段类型声明
|
80
|
+
5. **标准生成**: 生成符合Protobuf规范的.proto文件
|
81
|
+
|
82
|
+
### 解析流程
|
83
|
+
```
|
84
|
+
Java源码 → 字节码提取 → 类型解码 → 依赖发现 → 源码验证 → Proto生成
|
85
|
+
```
|
86
|
+
|
87
|
+
## 📁 项目结构
|
88
|
+
|
89
|
+
```
|
90
|
+
proto_reconstructor/
|
91
|
+
├── main.py # 主程序入口
|
92
|
+
├── core/ # 核心组件
|
93
|
+
│ ├── reconstructor.py # 主协调器
|
94
|
+
│ └── info_decoder.py # 字节码解码器
|
95
|
+
├── parsing/ # 解析模块
|
96
|
+
│ ├── java_parser.py # Java文件解析器
|
97
|
+
│ └── java_source_analyzer.py # Java源码分析器
|
98
|
+
├── generation/ # 生成模块
|
99
|
+
│ └── proto_generator.py # Proto文件生成器
|
100
|
+
├── models/ # 数据模型
|
101
|
+
|
102
|
+
```
|
103
|
+
|
104
|
+
## 工作流程
|
105
|
+
|
106
|
+
1. 使用JADX反编译Android应用
|
107
|
+
2. 运行ReProto指定根Protobuf类
|
108
|
+
3. 自动解析所有相关类和依赖
|
109
|
+
4. 生成完整的.proto文件结构
|
110
|
+
|
111
|
+
## 输出示例
|
112
|
+
|
113
|
+
### 输入:Java源码
|
114
|
+
|
115
|
+
```java
|
116
|
+
public final class MessageData extends GeneratedMessageLite {
|
117
|
+
private int dataCase_;
|
118
|
+
private Object data_;
|
119
|
+
|
120
|
+
public enum DataCase {
|
121
|
+
TEXT_MESSAGE(1),
|
122
|
+
MEDIA_MESSAGE(2),
|
123
|
+
DATA_NOT_SET(0);
|
124
|
+
|
125
|
+
private final int value;
|
126
|
+
|
127
|
+
private DataCase(int value) {
|
128
|
+
this.value = value;
|
129
|
+
}
|
130
|
+
}
|
131
|
+
|
132
|
+
// 其他方法...
|
133
|
+
}
|
134
|
+
```
|
135
|
+
|
136
|
+
### 输出:Proto文件
|
137
|
+
|
138
|
+
```protobuf
|
139
|
+
syntax = "proto3";
|
140
|
+
|
141
|
+
package com.example.messaging.v1.models;
|
142
|
+
|
143
|
+
import "com/example/messaging/v1/models/message_data.proto";
|
144
|
+
import "com/example/messaging/v1/models/conversation_data.proto";
|
145
|
+
|
146
|
+
option java_package = "com.example.messaging.v1.models";
|
147
|
+
option java_multiple_files = true;
|
148
|
+
|
149
|
+
message MessageData {
|
150
|
+
oneof data {
|
151
|
+
TextMessage text_message = 1;
|
152
|
+
MediaMessage media_message = 2;
|
153
|
+
}
|
154
|
+
}
|
155
|
+
```
|
156
|
+
|
157
|
+
## 开发环境设置
|
158
|
+
|
159
|
+
### 使用Poetry
|
160
|
+
|
161
|
+
```bash
|
162
|
+
# 安装Poetry
|
163
|
+
curl -sSL https://install.python-poetry.org | python3 -
|
164
|
+
|
165
|
+
# 安装项目依赖
|
166
|
+
poetry install
|
167
|
+
|
168
|
+
# 进入虚拟环境
|
169
|
+
poetry shell
|
170
|
+
```
|
171
|
+
|
172
|
+
## 项目结构
|
173
|
+
|
174
|
+
```
|
175
|
+
reproto/
|
176
|
+
├── core/ # 核心重构逻辑
|
177
|
+
├── parsing/ # Java源码解析
|
178
|
+
├── generation/ # Proto文件生成
|
179
|
+
├── models/ # 数据模型定义
|
180
|
+
├── utils/ # 工具函数
|
181
|
+
└── main.py # 入口点
|
182
|
+
```
|
183
|
+
|
184
|
+
## 🔧 配置选项
|
185
|
+
|
186
|
+
### 日志配置
|
187
|
+
```bash
|
188
|
+
# 指定日志目录
|
189
|
+
python main.py sources/ com.example.Model output/ --log-dir ./my_logs
|
190
|
+
|
191
|
+
# 日志文件格式: proto_reconstructor-YYYY-MM-DD-HH-MM-SS.log
|
192
|
+
# 例如: proto_reconstructor-2024-01-15-14-30-25.log
|
193
|
+
```
|
194
|
+
|
195
|
+
### 输出格式
|
196
|
+
生成的proto文件遵循Google Protobuf Style Guide:
|
197
|
+
- 文件名使用`snake_case.proto`格式
|
198
|
+
- 字段名使用`snake_case`
|
199
|
+
- 消息名使用`PascalCase`
|
200
|
+
- 枚举值使用`UPPER_SNAKE_CASE`
|
201
|
+
- 正确的包结构和导入语句
|
202
|
+
|
203
|
+
## 🏗️ 架构设计
|
204
|
+
|
205
|
+
本项目采用模块化设计,详细的架构说明请参考 [ARCHITECTURE.md](./ARCHITECTURE.md)。
|
206
|
+
|
207
|
+
核心模块:
|
208
|
+
- **Core Layer**: 主协调器 + 字节码解码器
|
209
|
+
- **Parsing Layer**: Java解析器 + 源码分析器
|
210
|
+
- **Generation Layer**: Proto文件生成器
|
211
|
+
- **Model Layer**: 数据定义模型
|
212
|
+
- **Utility Layer**: 日志系统 + 文件工具
|
213
|
+
|
214
|
+
|
215
|
+
## 🤝 贡献
|
216
|
+
|
217
|
+
欢迎提交Issue和Pull Request!
|
218
|
+
|
219
|
+
### 代码规范
|
220
|
+
- 遵循PEP 8代码风格
|
221
|
+
- 使用类型注解
|
222
|
+
- 编写单元测试
|
223
|
+
- 更新文档
|
224
|
+
|
225
|
+
## 🙏 致谢
|
226
|
+
|
227
|
+
- Google Protobuf团队提供的优秀框架
|
228
|
+
- JADX项目提供的反编译工具
|
229
|
+
- 逆向工程社区的技术支持
|
230
|
+
|
231
|
+
---
|
main.py
ADDED
@@ -0,0 +1,172 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
"""
|
3
|
+
Protobuf重构器 - 命令行入口
|
4
|
+
|
5
|
+
从JADX反编译的Java源码自动重构Protobuf .proto文件
|
6
|
+
支持任意Android应用,完全基于Java字节码推断
|
7
|
+
|
8
|
+
Usage:
|
9
|
+
python -m proto_reconstructor.main <java_sources_dir> <root_class> <output_dir> [--log-dir LOG_DIR]
|
10
|
+
|
11
|
+
Example:
|
12
|
+
python -m proto_reconstructor.main ./out_jadx/sources com.example.Model ./protos_generated --log-dir ./logs
|
13
|
+
|
14
|
+
Author: AI Assistant
|
15
|
+
"""
|
16
|
+
|
17
|
+
import sys
|
18
|
+
import argparse
|
19
|
+
from pathlib import Path
|
20
|
+
|
21
|
+
# 导入项目模块
|
22
|
+
import os
|
23
|
+
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
24
|
+
from core.reconstructor import ProtoReconstructor
|
25
|
+
from utils.logger import setup_logger, get_logger
|
26
|
+
|
27
|
+
|
28
|
+
def parse_arguments():
|
29
|
+
"""解析命令行参数"""
|
30
|
+
parser = argparse.ArgumentParser(
|
31
|
+
description='从JADX反编译的Java源码重构Protobuf .proto文件',
|
32
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
33
|
+
epilog="""
|
34
|
+
示例:
|
35
|
+
%(prog)s ./out_jadx/sources com.example.Model ./protos_generated
|
36
|
+
%(prog)s ./out_jadx/sources com.example.Model ./output --log-dir ./my_logs
|
37
|
+
%(prog)s /path/to/jadx/sources com.example.messaging.v1.models.MessageData ./output
|
38
|
+
"""
|
39
|
+
)
|
40
|
+
|
41
|
+
parser.add_argument(
|
42
|
+
'sources_dir',
|
43
|
+
type=str,
|
44
|
+
help='JADX反编译的Java源码目录路径'
|
45
|
+
)
|
46
|
+
|
47
|
+
parser.add_argument(
|
48
|
+
'root_class',
|
49
|
+
type=str,
|
50
|
+
help='要重构的根类完整类名 (如: com.example.Model)'
|
51
|
+
)
|
52
|
+
|
53
|
+
parser.add_argument(
|
54
|
+
'output_dir',
|
55
|
+
type=str,
|
56
|
+
help='生成的proto文件输出目录路径'
|
57
|
+
)
|
58
|
+
|
59
|
+
parser.add_argument(
|
60
|
+
'--log-dir',
|
61
|
+
type=str,
|
62
|
+
default='./logs',
|
63
|
+
help='日志文件输出目录 (默认: ./logs)'
|
64
|
+
)
|
65
|
+
|
66
|
+
parser.add_argument(
|
67
|
+
'--verbose', '-v',
|
68
|
+
action='store_true',
|
69
|
+
help='显示详细的处理信息'
|
70
|
+
)
|
71
|
+
|
72
|
+
return parser.parse_args()
|
73
|
+
|
74
|
+
|
75
|
+
def validate_arguments(args):
|
76
|
+
"""验证命令行参数"""
|
77
|
+
logger = get_logger("main")
|
78
|
+
|
79
|
+
# 验证源码目录
|
80
|
+
sources_path = Path(args.sources_dir)
|
81
|
+
if not sources_path.exists():
|
82
|
+
logger.error(f"源码目录不存在: {sources_path}")
|
83
|
+
sys.exit(1)
|
84
|
+
|
85
|
+
if not sources_path.is_dir():
|
86
|
+
logger.error(f"源码路径不是目录: {sources_path}")
|
87
|
+
sys.exit(1)
|
88
|
+
|
89
|
+
# 验证根类名格式
|
90
|
+
if not args.root_class or '.' not in args.root_class:
|
91
|
+
logger.error(f"根类名格式无效: {args.root_class}")
|
92
|
+
logger.error("应该是完整的类名,如: com.example.Model")
|
93
|
+
sys.exit(1)
|
94
|
+
|
95
|
+
# 输出目录可以不存在,会自动创建
|
96
|
+
output_path = Path(args.output_dir)
|
97
|
+
if output_path.exists() and not output_path.is_dir():
|
98
|
+
logger.error(f"输出路径存在但不是目录: {output_path}")
|
99
|
+
sys.exit(1)
|
100
|
+
|
101
|
+
# 验证日志目录
|
102
|
+
log_path = Path(args.log_dir)
|
103
|
+
try:
|
104
|
+
log_path.mkdir(parents=True, exist_ok=True)
|
105
|
+
except Exception as e:
|
106
|
+
logger.error(f"无法创建日志目录 {log_path}: {e}")
|
107
|
+
sys.exit(1)
|
108
|
+
|
109
|
+
return sources_path.resolve(), args.root_class, output_path.resolve()
|
110
|
+
|
111
|
+
|
112
|
+
def main():
|
113
|
+
"""主函数"""
|
114
|
+
args = None
|
115
|
+
try:
|
116
|
+
# 解析参数
|
117
|
+
args = parse_arguments()
|
118
|
+
|
119
|
+
# 初始化日志系统
|
120
|
+
setup_logger(args.log_dir)
|
121
|
+
logger = get_logger("main")
|
122
|
+
|
123
|
+
# 验证参数
|
124
|
+
sources_dir, root_class, output_dir = validate_arguments(args)
|
125
|
+
|
126
|
+
# 显示启动信息
|
127
|
+
logger.info("🚀 开始Proto重构任务")
|
128
|
+
logger.info(f"📁 源码目录: {sources_dir}")
|
129
|
+
logger.info(f"📁 输出目录: {output_dir}")
|
130
|
+
logger.info(f"📁 日志目录: {args.log_dir}")
|
131
|
+
logger.info(f"🎯 根类: {root_class}")
|
132
|
+
|
133
|
+
# 创建重构器并执行
|
134
|
+
reconstructor = ProtoReconstructor(sources_dir, output_dir)
|
135
|
+
results = reconstructor.reconstruct_from_root(root_class)
|
136
|
+
|
137
|
+
# 输出结果统计
|
138
|
+
if results:
|
139
|
+
logger.success("✅ 重构完成!")
|
140
|
+
logger.info(f"📊 处理统计: 共处理 {len(results)} 个类型")
|
141
|
+
|
142
|
+
message_count = sum(1 for r in results.values() if hasattr(r, 'fields'))
|
143
|
+
enum_count = sum(1 for r in results.values() if hasattr(r, 'values'))
|
144
|
+
|
145
|
+
logger.info(f" - 消息类型: {message_count} 个")
|
146
|
+
logger.info(f" - 枚举类型: {enum_count} 个")
|
147
|
+
else:
|
148
|
+
logger.warning("⚠️ 没有生成任何proto文件")
|
149
|
+
|
150
|
+
except KeyboardInterrupt:
|
151
|
+
if args:
|
152
|
+
logger = get_logger("main")
|
153
|
+
logger.warning("⚠️ 操作被用户中断")
|
154
|
+
else:
|
155
|
+
print("\n⚠️ 操作被用户中断")
|
156
|
+
sys.exit(1)
|
157
|
+
except Exception as e:
|
158
|
+
if args:
|
159
|
+
logger = get_logger("main")
|
160
|
+
logger.error(f"❌ 重构失败: {e}")
|
161
|
+
if args.verbose:
|
162
|
+
logger.exception("详细错误信息:")
|
163
|
+
else:
|
164
|
+
print(f"\n❌ 重构失败: {e}")
|
165
|
+
if hasattr(args, 'verbose') and args.verbose:
|
166
|
+
import traceback
|
167
|
+
traceback.print_exc()
|
168
|
+
sys.exit(1)
|
169
|
+
|
170
|
+
|
171
|
+
if __name__ == "__main__":
|
172
|
+
main()
|
pyproject.toml
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
[build-system]
|
2
|
+
requires = ["poetry-core>=1.0.0"]
|
3
|
+
build-backend = "poetry.core.masonry.api"
|
4
|
+
|
5
|
+
[tool.poetry]
|
6
|
+
name = "reproto"
|
7
|
+
version = "0.0.4"
|
8
|
+
description = "一个强大的逆向工程工具, 能够从任何使用Google Protobuf Lite的Android应用中自动重构出完整的.proto文件结构."
|
9
|
+
readme = "README.md"
|
10
|
+
license = "MIT"
|
11
|
+
authors = ["iyue <ys1231@126.com>"]
|
12
|
+
# 从当前目录自动包含所有包
|
13
|
+
packages = [
|
14
|
+
{include = "*", from = "."}
|
15
|
+
]
|
16
|
+
# 手动指定包
|
17
|
+
# packages = [
|
18
|
+
# {include = "main.py"},
|
19
|
+
# {include = "core"},
|
20
|
+
# {include = "generation"},
|
21
|
+
# {include = "models"},
|
22
|
+
# {include = "parsing"},
|
23
|
+
# {include = "utils"}
|
24
|
+
# ]
|
25
|
+
|
26
|
+
[tool.poetry.dependencies]
|
27
|
+
python = ">=3.12,<4.0"
|
28
|
+
loguru = ">=0.7.3"
|
29
|
+
|
30
|
+
[tool.poetry.scripts]
|
31
|
+
reproto = "main:main"
|
32
|
+
|
33
|
+
[[tool.poetry.source]]
|
34
|
+
name = "mirrors"
|
35
|
+
url = "https://mirrors.cernet.edu.cn/pypi/web/simple/"
|
36
|
+
priority = "supplemental"
|
@@ -0,0 +1,53 @@
|
|
1
|
+
.git/HEAD,sha256=ly8yuQLWQE8njkYAapHLPJ1xVg6_fMgQjCoHqKvFIdw,21
|
2
|
+
.git/config,sha256=6mE3z55UjVFEIsUWmiN6Bw_IJPK92slDZMSanpih0ok,287
|
3
|
+
.git/description,sha256=hatsFj1DoX6pz3eIMIvKFGbxsKjRzJLibpv2PaQGKu4,73
|
4
|
+
.git/hooks/applypatch-msg.sample,sha256=AiNJeguLAzqlijpSG4YphpOGz3qw4vEBlj0yiqYhk_c,478
|
5
|
+
.git/hooks/commit-msg.sample,sha256=H3TV6SkpebVz69WXQdRsuT_zkazdCD00C5Q3B1PZJDc,896
|
6
|
+
.git/hooks/fsmonitor-watchman.sample,sha256=4FSZZOk4l7UZvY4zPAN-Uf_w-IuhPghqMxWSv4AfodA,4726
|
7
|
+
.git/hooks/post-update.sample,sha256=gXZa8trvMjBh3LxeYfwWSBy3SzusmtihdLGGUjWG9sU,189
|
8
|
+
.git/hooks/pre-applypatch.sample,sha256=4VxbRp6j4KaVvqbyyCvPjmKCEHSTnd2Ft34AB_8WVHU,424
|
9
|
+
.git/hooks/pre-commit.sample,sha256=Vxhbe58FI516tS2wRfW4nrMTSNeyF36rIU9euHLhlxs,1649
|
10
|
+
.git/hooks/pre-merge-commit.sample,sha256=04JacDN5QOu9ClwHKYThMkWSDN-ImL0iXI0npt_Jy1M,416
|
11
|
+
.git/hooks/pre-push.sample,sha256=7M6cfgTT9d2ditqBdT3R1UmpY0smdwBCtY3aACF9CGo,1374
|
12
|
+
.git/hooks/pre-rebase.sample,sha256=T-vOhneQBSM4B29OZsxH77FIedGAl9HWHIJhhZ6qp7M,4898
|
13
|
+
.git/hooks/pre-receive.sample,sha256=pMPSuce7P9jRRBwxvU7nGlldZrRPz0ndsxAlIyAWmYk,544
|
14
|
+
.git/hooks/prepare-commit-msg.sample,sha256=6d3KpBif3dJe2X_Ix4nsp7bKFjkLI5KuMnbwyOGqRhk,1492
|
15
|
+
.git/hooks/push-to-checkout.sample,sha256=pT0HQXmLKHxt16-mSu5HPzBeZdP0lGO7nXQI7DsSv18,2783
|
16
|
+
.git/hooks/sendemail-validate.sample,sha256=ROv8kj3FRmvACWAvDs8Ge5xlRZq_6IaN3Em3jmztepI,2308
|
17
|
+
.git/hooks/update.sample,sha256=jV8vqD4QPPCLV-qmdSHfkZT0XL28s32lKtWGCXoU0QY,3650
|
18
|
+
.git/index,sha256=uNpkl4Ngnok-FuwXpx-733gwa0mDR3EJQHNSWlKGVY4,1991
|
19
|
+
.git/info/exclude,sha256=ZnH-g7egfIky7okWTR8nk7IxgFjri5jcXAbuClo7DsE,240
|
20
|
+
.git/logs/HEAD,sha256=8inae4CFVxR4Psim5jd6PmrnSmipVxT3rS8zFAe0Cnc,163
|
21
|
+
.git/logs/refs/heads/iyue,sha256=8inae4CFVxR4Psim5jd6PmrnSmipVxT3rS8zFAe0Cnc,163
|
22
|
+
.git/logs/refs/remotes/origin/HEAD,sha256=8inae4CFVxR4Psim5jd6PmrnSmipVxT3rS8zFAe0Cnc,163
|
23
|
+
.git/objects/pack/pack-55d9855fa45cb686f64bef472f9a7940ef78b8d6.idx,sha256=dM0mT5EXOaEswaA71NFzz6Fh3B9iF9IN1SXVxeD80aw,2304
|
24
|
+
.git/objects/pack/pack-55d9855fa45cb686f64bef472f9a7940ef78b8d6.pack,sha256=RkehkvasbBDavK-cSTnrVcGGYGUiWgUxZVhjsDbYrT4,41437
|
25
|
+
.git/objects/pack/pack-55d9855fa45cb686f64bef472f9a7940ef78b8d6.rev,sha256=rIyIFQiRY9AcV_xf0UA4im0PAeyvHtrkew59RQ5QaFU,228
|
26
|
+
.git/packed-refs,sha256=NZVl-0AkdTQlT4H1r599fFDdUKwCjFwzQYxAYwUrSvg,112
|
27
|
+
.git/refs/heads/iyue,sha256=G3DrpPS-kI_DVAakJCukrkaQcp3JNpkozc-HEtV7qEI,41
|
28
|
+
.git/refs/remotes/origin/HEAD,sha256=G8pFPTbCqnJ2IkCzz9J-STqOXWU6TrlXfpt1wx5bUWE,30
|
29
|
+
.gitignore,sha256=ThRUL1E38Z_Q4Lww0xYYl9ziFaPUvvwwqxbmp2cuwco,2068
|
30
|
+
.python-version,sha256=NxOs_9lT1XG8y-FjlRru-YinX5RcBJt_ulPwgDESZ_o,7
|
31
|
+
ARCHITECTURE.md,sha256=JALnUdREwdLRAmcUit5CGAPLpeZ6UfoYpAQkxil3NJc,8322
|
32
|
+
README.md,sha256=P71PU1DNUaLUAR15ja18AdZL0gobBh7xrUJeVZdlCbc,6067
|
33
|
+
core/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
|
34
|
+
core/bytecode_parser.py,sha256=87ZGhnyBNGP-gRjIyRUcGfWS2HR1YA_e1OBKafLEEDc,11532
|
35
|
+
core/info_decoder.py,sha256=n_U7c4syhDkfez5WXOxXi-CVQ3AMUISpGqixcHqzHHA,19214
|
36
|
+
core/reconstructor.py,sha256=9mNV_6YRLNjlSGxzrS4lU3yE8bzu-mwCD3zmw973nIk,25666
|
37
|
+
generation/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
|
38
|
+
generation/proto_generator.py,sha256=en-BAgikOzkDH7gdagX97iNIb5pTBN0ieVt5MnuL_BI,14535
|
39
|
+
main.py,sha256=3hQ-_YmW5Weq14h040V48_W5DSb-xTXpMMb6vRjCbF8,5296
|
40
|
+
models/__init__.py,sha256=WScv63rvEl65y5CWjpb6__hvjNvjpCkl6lz1Z2u0IYc,811
|
41
|
+
models/message_definition.py,sha256=AszUZnNPSBn9SMXne5ORDBiGZz1W2pcYmU8ftGC3Mks,4873
|
42
|
+
parsing/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
|
43
|
+
parsing/enum_parser.py,sha256=tBflR9bjC8LRe4cWw19i_ibCedWWB7ICQtbOQdpiWVc,6149
|
44
|
+
parsing/java_parser.py,sha256=Rk5_S02rqlqNU3OF7BMK57NynFAoxIHINyhnA6rUuhI,7897
|
45
|
+
pyproject.toml,sha256=Rw3OlS4oKb05Fas7SFxlmZRSttTWoQELZ2U0jgN8PQg,901
|
46
|
+
requirements.txt,sha256=cQGj3IS6Kj88jbwj_jeKkokMnG-fEezWve91mfW4CJs,96
|
47
|
+
utils/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
|
48
|
+
utils/file_utils.py,sha256=N1Ei7hmyeOkIyZJFEXyNbtTrfeVF2hP-U8evXAVW2MA,4085
|
49
|
+
utils/logger.py,sha256=TaDXUHq5BQAsolswwHDeFUbXAfgL_fhXgxAcs901xmQ,2471
|
50
|
+
reproto-0.0.4.dist-info/METADATA,sha256=h0ISgdD0h4xYwQ6zGoX_DsEnEmS6NyKg8oKdjh2VEjk,6625
|
51
|
+
reproto-0.0.4.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
52
|
+
reproto-0.0.4.dist-info/entry_points.txt,sha256=6Oro9lK_2DXDgHiB3andNuIE78wxfooqacqp8yY1C-g,37
|
53
|
+
reproto-0.0.4.dist-info/RECORD,,
|
requirements.txt
ADDED
reproto-0.0.3.dist-info/RECORD
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
core/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
|
2
|
-
core/bytecode_parser.py,sha256=87ZGhnyBNGP-gRjIyRUcGfWS2HR1YA_e1OBKafLEEDc,11532
|
3
|
-
core/info_decoder.py,sha256=n_U7c4syhDkfez5WXOxXi-CVQ3AMUISpGqixcHqzHHA,19214
|
4
|
-
core/reconstructor.py,sha256=9mNV_6YRLNjlSGxzrS4lU3yE8bzu-mwCD3zmw973nIk,25666
|
5
|
-
generation/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
|
6
|
-
generation/proto_generator.py,sha256=en-BAgikOzkDH7gdagX97iNIb5pTBN0ieVt5MnuL_BI,14535
|
7
|
-
models/__init__.py,sha256=WScv63rvEl65y5CWjpb6__hvjNvjpCkl6lz1Z2u0IYc,811
|
8
|
-
models/message_definition.py,sha256=AszUZnNPSBn9SMXne5ORDBiGZz1W2pcYmU8ftGC3Mks,4873
|
9
|
-
parsing/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
|
10
|
-
parsing/enum_parser.py,sha256=tBflR9bjC8LRe4cWw19i_ibCedWWB7ICQtbOQdpiWVc,6149
|
11
|
-
parsing/java_parser.py,sha256=Rk5_S02rqlqNU3OF7BMK57NynFAoxIHINyhnA6rUuhI,7897
|
12
|
-
utils/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
|
13
|
-
utils/file_utils.py,sha256=N1Ei7hmyeOkIyZJFEXyNbtTrfeVF2hP-U8evXAVW2MA,4085
|
14
|
-
utils/logger.py,sha256=TaDXUHq5BQAsolswwHDeFUbXAfgL_fhXgxAcs901xmQ,2471
|
15
|
-
reproto-0.0.3.dist-info/METADATA,sha256=gMKobujRFan-lqWGzhNmGARmWnzeBQxG2Jzsj6uK8XM,6625
|
16
|
-
reproto-0.0.3.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
17
|
-
reproto-0.0.3.dist-info/entry_points.txt,sha256=6Oro9lK_2DXDgHiB3andNuIE78wxfooqacqp8yY1C-g,37
|
18
|
-
reproto-0.0.3.dist-info/RECORD,,
|
File without changes
|
File without changes
|