g4m3m4g/Valence
GitHub: g4m3m4g/Valence
基于个人特征信息的定向密码字典生成工具,通过模拟人类密码创建习惯为授权渗透测试生成精准的密码候选列表。
Stars: 0 | Forks: 0
# Valence
一款定向密码字典生成和密码特征分析工具,专为**已授权的**安全意识审计和渗透测试而设计。
通过输入结构化的个人特征信息(姓名、昵称、生日、宠物、伴侣、爱好等),Valence 会自动生成一份经过去重的潜在密码候选列表。其输出结果反映了人类常见的密码创建习惯——大小写变体、leet-speak 替换、前缀/后缀填充、词汇组合、倒序以及常见词混合。
## 安装说明
### Homebrew (macOS 和 Linux)
```
brew tap g4m3m4g/tap
brew install valence
```
### curl 一键安装 (Linux 和 macOS,无需 Go)
```
curl -fsSL https://raw.githubusercontent.com/g4m3m4g/Valence/main/scripts/install.sh | sh
```
下载与你的 OS 和架构相匹配的预编译二进制文件,并将其安装到 `/usr/local/bin`。
### Go 安装
```
go install github.com/g4m3m4g/valence@latest
```
要求 Go 1.22+。
### 从源码编译
```
git clone https://github.com/g4m3m4g/Valence.git
cd Valence
go build -o valence .
```
## 核心功能
- **零外部依赖:** 完全基于 Go 标准库构建——易于审计、可嵌入且无额外开销。
- **模块化架构:** 核心引擎(`pkg/profiler`)与 CLI 完全分离,允许将其导入到 Web 服务、TUI 或 Burp Suite 扩展中。
- **交互模式:** 运行不带任何 flag 的 `valence` 即可进入向导式的特征构建器——无需记忆任何 flag。
- **流式友好:** 默认输出到 `stdout`,同时将元数据推送到 `stderr`。可直接通过管道传递给 `hashcat`、`sort`、`uniq` 等工具。
- **Leet-Speak 变体:** 应用 1、2 和 3 种规则的替换组合(`a→@/4`、`e→3`、`i→1/!`、`o→0`、`s→$/5`、`t→7` …)。
- **逐字符大小写切换:** 为每个 token 生成所有 2ⁿ 种大/小写组合(`jOhN`、`JoHn`、…)。
- **前缀 + 后缀模式:** 生成 `prefix__`、`__suffix` 以及 `prefix__suffix` 形式(`!john123`、`123smith!`)。
- **常见词混合:** 将特征 token 与真实的真实泄露语料库词汇进行配对(`johnlove`、`dragonsmith`、`ilovejohn`)。
- **手机号衍生:** 自动从原始手机号中提取后 4 位、后 6 位、区号和交换机数字。
- **倒序 token:** 生成类姓名字段的倒序拼写(`nhoj`、`htims`)。
- **首字母缩写组合:** 自动衍生 `JSmith` 和 `JohnS` 风格的 token。
- **进度指示器:** 在生成和写入文件期间显示动态终端指示符——在通过管道输出时能够平滑降级。
## 项目结构
```
valence/
├── .github/
│ └── workflows/
│ └── release.yml # Automated release via GoReleaser on v* tag push
├── scripts/
│ └── install.sh # curl one-liner installer
├── .goreleaser.yaml # Cross-platform build and Homebrew tap config
├── go.mod
├── main.go # CLI entrypoint: flags, interactive mode, I/O
├── spinner.go # Terminal progress spinner
├── README.md
└── pkg/
└── profiler/ # Core engine (standard library only)
├── profile.go # Profile, BirthDate, Token types and derivations
├── mutator.go # CaseVariants, LeetVariants, ToggleCaseVariants,
│ # PrependPrefixes, AppendSuffixes, Combine
├── generator.go # Options, DefaultOptions, Generate pipeline
└── generator_test.go
```
## 使用说明
### 交互模式
不带任何 flag 运行——Valence 会引导你填写每个字段,并询问输出文件名:
```
valence
```
```
Valence — interactive profile builder
Leave any field blank to skip it.
First name: John
Last name: Smith
Nickname / alias:
Partner's name:
Pet's name: Max
Child's name:
Favorite (team/band/hobby):
Favorite / lucky number:
Hometown / city:
Username / handle:
Phone number:
Date of birth (YYYY-MM-DD): 1990-05-15
Output file [john_smith.txt]:
```
### Flag 模式
```
valence -first John -last Smith -nick Johnny \
-partner Sarah -pet Max -child Emma \
-phone "555-123-4567" -city Bangkok \
-username j0hn -number 7 \
-birthdate 1990-05-15 \
-o john_smith.txt
```
### 通过管道传递给其他工具
```
# 直接通过管道传入 Hashcat
valence -first John -pet Max | hashcat -a 0 -m 1000 hashes.txt
# 过滤并保存
valence -first John -birthdate 1990-05-15 | sort -u > candidates.txt
```
## 配置 Flags
### 特征字段
| Flag | 描述 |
| ------------- | -------------------------------------------------------- |
| `-first` | 目标的名 |
| `-last` | 目标的姓 |
| `-nick` | 昵称或别名 |
| `-birthdate` | 出生日期 (`YYYY-MM-DD`) |
| `-partner` | 伴侣或配偶的姓名 |
| `-pet` | 宠物名字 |
| `-child` | 孩子或兄弟姐妹的名字 |
| `-favorite` | 最喜欢的运动队、爱好或乐队 |
| `-number` | 最喜欢或幸运的数字(球衣号码、PIN 码种子等) |
| `-city` | 故乡或当前所在城市 |
| `-username` | 社交媒体账号或游戏别名 |
| `-phone` | 电话号码——非数字字符会被自动剥离 |
### 输出
| Flag | 描述 | 默认值 |
| --------------- | ------------------------------------ | -------- |
| `-o`, `-output` | 输出文件路径 | `stdout` |
| `-max` | 限制总候选数量 (`0` 为无限制) | `0` |
| `-minlen` | 最小候选长度 | `4` |
| `-maxlen` | 最大候选长度 | `32` |
### 变体开关
| Flag | 描述 | 默认值 |
| -------------- | ---------------------------------------------------------------- | ------- |
| `-no-pairs` | 禁用成对的 token 组合 | `false` |
| `-no-leet` | 禁用 leet-speak 替换 | `false` |
| `-no-prefixes` | 禁用前缀填充 (`!john`, `123smith`) | `false` |
| `-no-words` | 禁用常见词混合 (`johnlove`, `dragonsmith`) | `false` |
### 自定义列表
| Flag | 描述 | 默认值 |
| -------------- | ----------------------------------------------------- | --------------------- |
| `-suffixes` | 要追加的逗号分隔的后缀 | `,1,12,123,!,@,…` |
| `-prefixes` | 要前置的逗号分隔的前缀 | `!,1,12,123,0,@` |
| `-separators` | 连接 token 对时使用的分隔符 | `,_,.,-` |
| `-words` | 与特征 token 混合的逗号分隔的常见词 | `love,dragon,qwerty,…` |
## 生成机制说明
```
[Profile] → [Tokenize] → [Mutate] → [Prefix/Suffix] → [Pair] → [Word-Mix] → [Deduplicate & Filter] → [Wordlist]
```
1. **Tokenize (分词)** — 每个非空字段都会成为一个带标签的 `Token`。BirthDate 会扩展为多种数字形式(`YYYY`、`YY`、`DDMM`、`MMDD`、…)。电话号码会扩展为后 4 位、后 6 位、区号和完整数字。首字母组合(`JSmith`、`JohnS`)和倒序拼写(`nhoj`)会自动衍生。
2. **Mutate (变体)** — 每个 token 会接收:
- 基础大小写变体:lowercase、UPPERCASE、Title
- 逐字符大小写切换:所有 2ⁿ 种组合(`jOhN`、`JoHn`、…)
- 1、2 和 3 种规则组合的 Leet-speak 替换(`j0hn`、`j@ne`、`$m1th`)
3. **前缀 / 后缀** — 每个变体形式 `cv` 会生成四个候选词:
- `cv`(纯粹形式)
- `cv + suffix` → `john123`、`john!`
- `prefix + cv` → `!john`、`123john`
- `prefix + cv + suffix` → `!john123`
4. **Pair (配对)** — 每对不同的 token 都会以两种排列顺序与每个分隔符连接起来(`john_smith`、`smith_john`),随后进行大小写变体和添加后缀处理。
5. **Word-Mix (词汇混合)** — 每个特征 token 都会与常见词列表中的每一个词配对(`johnlove`、`dragonsmith`),然后应用相同的大小写/后缀/前缀处理管道。词汇之间绝对不会互相配对。
6. **去重与过滤** — 使用 `map[string]struct{}` 在 O(1) 的时间内消除重复项。长度边界(`-minlen`/`-maxlen`)在单一瓶颈点强制执行。结果会经过排序,并根据设置选择性截断。
## 测试
```
go test ./... -v
```
测试套件涵盖了大小写变体、leet 变体、大小写切换组合、电话号码衍生、后缀/前缀处理、组合矩阵、生日提取、常见词混合以及所有核心的边界保护机制。
# ⚖️ 使用规范、免责声明与责任协议
## 1. 仅限用于授权的教育与防御目的
本工具的开发、发布和维护**仅用于授权的安全研究、教育目的和防御性安全审计**。
其设计严格限于协助以下对象:
- **系统管理员与 IAM 团队:** 审计密码强度策略,并验证用户凭据是否不包含容易被猜出的企业或个人标识信息。
- **已授权的渗透测试人员:** 在明确划定范围且具有法律约束力的安全测试项目中,向客户演示相关风险。
- **学术研究人员:** 研究人类凭据生成的行为模式及防御缓解策略。
## 2. 严禁未经授权的活动
**严禁将此工具用于任何未经授权的访问、恶意凭据填充、企业间谍活动、骚扰、跟踪或任何形式的网络攻击。**
除非你已获得资产合法所有者的**明确、书面且具有法律约束力的授权**,否则你**绝不能**收集个人详细信息或针对任何个人或组织生成密码字典。
## 3. 法律合规与管辖权
作为用户,你有责任确保你对本软件的使用符合所有适用的地方、国家及国际法律。未经授权使用此工具可能会违反重大网络犯罪法规,包括但不限于:
- **美国:** 计算机欺诈和滥用法 (CFAA) (18 U.S.C. § 1030)
- **英国:** 滥用计算机法 1990 (Computer Misuse Act 1990)
- **欧盟:** 网络犯罪公约/指令
- **泰国:** 计算机犯罪法 佛历 2550 年 (B.E. 2550)(及其修正案)
## 4. 责任限制与保证免责声明
```
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS, CONTRIBUTORS, OR COPYRIGHT HOLDERS BE LIABLE
FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT, OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
```
编译、下载或执行本软件即意味着你明确同意:**作者和贡献者对你滥用工具或因部署该工具而造成的任何损害、数据泄露、服务中断或法律后果不承担任何绝对责任**。
## 5. 合规 OSINT 数据收集警告
本工具依赖于用户提供的开源情报 (OSINT) 数据。严禁用户在收集特征数据时违反隐私法律、数据保护法规(例如 GDPR、CCPA 或 PDPA)或社交媒体平台的服务条款。未经同意抓取或收集个人详细信息可能会构成独立的违法行为。
标签:EVTX分析, Go语言, 密码字典生成, 文档结构分析, 日志审计, 社工字典, 程序破解