Skip to content

Commit 89ea035

Browse files
init
0 parents  commit 89ea035

10 files changed

Lines changed: 535 additions & 0 deletions

File tree

.github/images/cover.png

221 KB
Loading

.github/workflows/mobile-build.yml

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
name: Mobile Build (Android & iOS)
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
9+
jobs:
10+
build-mobile:
11+
runs-on: macos-latest
12+
steps:
13+
- name: Checkout code
14+
uses: actions/checkout@v4
15+
16+
- name: Set up Go
17+
uses: actions/setup-go@v5
18+
with:
19+
go-version: "1.24.7"
20+
21+
- name: Install gomobile
22+
run: |
23+
go install golang.org/x/mobile/cmd/gomobile@latest
24+
gomobile init
25+
26+
- name: Make build.sh executable
27+
run: chmod +x build.sh
28+
29+
- name: Build Android and iOS
30+
run: ./build.sh <<< "4"
31+
working-directory: ${{ github.workspace }}
32+
33+
- name: Set up Git user
34+
run: |
35+
git config user.name "github-actions"
36+
git config user.email "github-actions@github.com"
37+
38+
- name: Create Tag
39+
id: create_tag
40+
run: |
41+
git fetch --tags
42+
latest_tag=$(git tag --list 'r*' | sort -V | tail -n1)
43+
if [[ $latest_tag =~ r([0-9]+) ]]; then
44+
next_tag="r$(( ${BASH_REMATCH[1]} + 1 ))"
45+
else
46+
next_tag="r1"
47+
fi
48+
echo "TAG_NAME=$next_tag" >> $GITHUB_ENV
49+
git tag $next_tag
50+
git push origin $next_tag
51+
52+
- name: Zip Android build outputs
53+
run: zip -r build/android/DXcore-android.zip build/android/
54+
working-directory: ${{ github.workspace }}
55+
56+
- name: Zip iOS xcframework
57+
run: zip -r build/ios/IosDXcore.xcframework.zip build/ios/IosDXcore.xcframework
58+
working-directory: ${{ github.workspace }}
59+
60+
- name: Create GitHub Release
61+
uses: softprops/action-gh-release@v1
62+
with:
63+
tag_name: ${{ env.TAG_NAME }}
64+
name: "DXcore v${{ env.TAG_NAME }}"
65+
files: |
66+
build/android/DXcore-android.zip
67+
build/ios/IosDXcore.xcframework.zip
68+
draft: true
69+
env:
70+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
build
2+
*.DS_Store
3+
/test/flowline.json

DXcore/android/android.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package android
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
type ProgressListener interface {
8+
OnProgress(msg string)
9+
}
10+
11+
func StartT2S(tunfd int, bindAddress string) {
12+
err := StartTun2socks(tunfd, bindAddress)
13+
if err != nil {
14+
fmt.Println(err)
15+
}
16+
}
17+
18+
func StopT2S() {
19+
StopTun2socks()
20+
}
21+
22+
func Stop() bool {
23+
fmt.Println("Stop")
24+
return false
25+
}
26+
27+
func MeasurePing() int {
28+
fmt.Println("MeasurePing")
29+
return 0
30+
}
31+
32+
func GetFlag() string {
33+
fmt.Println("GetFlag")
34+
return "xx"
35+
}
36+
37+
func StartVPN(cacheDir, flowLine, pattern string) {
38+
fmt.Println("StartVPN")
39+
}
40+
41+
func StopVPN() bool {
42+
fmt.Println("StopVPN")
43+
return true
44+
}
45+
46+
func SetAsnName() {
47+
fmt.Println("SetAsnName")
48+
}
49+
50+
func SetTimeZone(timeDiff float32) bool {
51+
fmt.Println("SetTimeZone")
52+
return true
53+
}
54+
55+
func GetFlowLine(isTest bool) string {
56+
fmt.Println("GetFlowLine")
57+
return ""
58+
}
59+
60+
func Log(message string) {
61+
fmt.Println(message)
62+
}
63+
64+
func SetProgressListener(l ProgressListener) {
65+
}

DXcore/android/tun2socks.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package android
2+
3+
import "fmt"
4+
5+
func StartTun2socks(tunfd int, bindAddress string) error {
6+
return nil
7+
}
8+
9+
func StopTun2socks() {
10+
fmt.Println("StopTun2socks")
11+
}

DXcore/ios/ios.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package ios
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
type ProgressListener interface {
8+
OnProgress(msg string)
9+
}
10+
11+
func Stop() bool {
12+
fmt.Println("Stop")
13+
return false
14+
}
15+
16+
func MeasurePing() int {
17+
fmt.Println("MeasurePing")
18+
return 0
19+
}
20+
21+
func GetFlag() string {
22+
fmt.Println("GetFlag")
23+
return "xx"
24+
}
25+
26+
func StartVPN(cacheDir, flowLine, pattern string) {
27+
fmt.Println("StartVPN")
28+
}
29+
30+
func StopVPN() bool {
31+
fmt.Println("StopVPN")
32+
return true
33+
}
34+
35+
func SetAsnName() {
36+
fmt.Println("SetAsnName")
37+
}
38+
39+
func SetTimeZone(timeDiff float32) bool {
40+
fmt.Println("SetTimeZone")
41+
return true
42+
}
43+
44+
func GetFlowLine() string {
45+
fmt.Println("GetFlowLine")
46+
return ""
47+
}
48+
49+
func Log(message string) {
50+
fmt.Println(message)
51+
}

README.md

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# DXcore (Proprietary Core)
2+
3+
## Overview
4+
5+
DXcore, a proprietary and closed core designed to protect users from censorship and network restrictions, powers advanced VPN capabilities in [DefyxVPN](https://github.com/UnboundTechCo/defyxVPN), a fully open-source client developed with Flutter.
6+
7+
The decision to keep DXcore closed-source is intentional: it implements advanced and customized censorship-circumvention protocols. Public disclosure of these implementations would make it significantly easier for adversarial systems (e.g., GFW) to analyze, fingerprint, and block them, directly endangering users. This is not secrecy for its own sake — it is an operational security measure in an ongoing struggle to ensure safe, reliable, and unrestricted connectivity.
8+
9+
![Cover](.github/images/cover.png)
10+
11+
---
12+
13+
## What is DXcore
14+
15+
DXcore is a set of engines and protocol adaptations developed to withstand:
16+
17+
- **Traffic analysis**
18+
- **Protocol fingerprinting**
19+
- **Active probing**
20+
21+
These components are the result of targeted engineering for use in hostile network environments. Publicly exposing implementation details would rapidly weaken their effectiveness and reduce user safety.
22+
23+
---
24+
25+
## Why DXcore is Closed
26+
27+
- **Operational security over exposure.** Public code would allow hostile actors to reverse-engineer and design precise countermeasures.
28+
- **Transparency in design, not in sensitive implementation.** We keep designs, API formats, and architectural documentation open while withholding exploitable implementation details.
29+
- **User protection as the priority.** Closed sourcing DXcore is a risk-mitigation step to protect users in repressive network environments.
30+
31+
---
32+
33+
## Our Commitment to Transparency & Independent Review
34+
35+
We balance openness with operational safety through controlled evaluation:
36+
37+
1. **Design transparency.** High-level architecture, APIs, and configuration formats are public.
38+
2. **Independent audits.** DXcore source is made available to accredited security teams under strict legal and technical controls (NDA, secure review environments).
39+
3. **Public summaries.** Post-audit, summary reports and remediation statements are published without leaking sensitive implementation details.
40+
4. **Reproducible builds & signed binaries.** Wherever possible, reproducible builds and signed releases are provided, so integrity can be verified without exposing internals.
41+
5. **Responsible disclosure.** We maintain a formal vulnerability reporting process with coordinated timelines to protect users.
42+
43+
---
44+
45+
## Audit Process (Overview)
46+
47+
When accredited teams request DXcore access for audit:
48+
49+
1. **Legal & procedural agreements.** NDA or audit contracts define scope, reporting format, and non-disclosure of exploitation details.
50+
2. **Controlled access.** Access is provided via private repositories or secure environments, with time limits and monitoring.
51+
3. **Scope definition.** Focus on cryptographic correctness, protocol implementation, dependency hygiene, and network behavior.
52+
4. **Reporting & remediation.** Vulnerabilities are reported privately; fixes are prioritized and coordinated for disclosure.
53+
5. **Public summary.** Once resolved, a high-level summary of findings and fixes is shared publicly.
54+
55+
---
56+
57+
## Responsible Disclosure
58+
59+
If you discover a potential vulnerability:
60+
61+
- **Email:** security@defyxvpn.com
62+
- **Report contents (recommended):** short summary, impact assessment, reproduction steps or limited PoC (please avoid full exploit code), proposed mitigations, and your contact info.
63+
- **Coordination:** For critical issues, we coordinate disclosure timelines with the reporter to ensure user safety.
64+
65+
---
66+
67+
## FAQ
68+
69+
**Q: Does closed-source mean users cannot trust DXcore?**
70+
A: No. Closing the code is not our first choice for transparency, but in censorship-circumvention contexts, open implementations can directly harm users. We offset this by providing open designs, controlled audits, public summaries, and verifiable binaries.
71+
72+
**Q: Can I review DXcore’s real source?**
73+
A: Accredited security organizations and teams can request access under NDA and secure review conditions. Public audit summaries are published afterward.
74+
75+
**Q: How does this protect users?**
76+
A: By withholding sensitive implementation details, adversaries cannot easily adapt to block or fingerprint the system. This increases the durability of user connections in hostile environments.
77+
78+
---
79+
80+
## DXcore Mock / Stub
81+
82+
To support developers building with Flutter, we provide a **DXcore Mock** (stub implementation) in this repository.
83+
84+
**Download from the [DXcore Releases page](https://github.com/UnboundTechCo/DXcore/releases).**
85+
86+
The mock is designed **only** to allow the app to compile and run in development and to enable UI/integration testing without needing the proprietary core.
87+
88+
- The mock calls the same expected DXcore methods.
89+
- It returns predefined/sample responses.
90+
- It **does not** contain any real censorship-circumvention logic, traffic-resistance, or sensitive protocol code.
91+
- It must **not** be used for security or network-behavior testing.
92+
93+
For proper auditing, testing, or analysis, the real DXcore (available only to accredited auditors under NDA) must be used.
94+
95+
---
96+
97+
## Short Summary
98+
99+
DXcore is closed-source not for secrecy but for **user protection** against censorship systems. Designs and APIs remain open; sensitive code is withheld but made available for independent audits under NDA. Mock/stub implementations are available for developers: [DXcore Releases](https://github.com/UnboundTechCo/DXcore/releases).
100+
101+
Contact: **security@defyxvpn.com**
102+
103+
---
104+
105+
## Contact
106+
107+
For audit requests, security reports, or inquiries about controlled DXcore access:
108+
109+
**security@defyxvpn.com**
110+
111+
---
112+
113+
## Third-Party Licenses
114+
115+
This project uses the following third-party components:
116+
117+
- [Warp-Plus](https://github.com/bepass-org/warp-plus): Licensed under terms specified by its authors. Please refer to the official repository for full license details.
118+
- [Outline](https://github.com/Jigsaw-Code/outline-sdk): Licensed under terms specified by its authors. Please refer to the official repository for full license details.
119+
- [Xray](https://github.com/XTLS/Xray-core): Licensed under terms specified by its authors. Please refer to the official repository for full license details.
120+
121+
If you are a copyright holder and believe your license is not properly attributed, please contact us at **info@defyxvpn.com**.
122+
123+
---
124+
125+
## Legal Notice
126+
127+
DXcore is proprietary. It is withheld from public release to protect users against censorship adversaries. Access for audits is provided under NDA to accredited institutions, with public audit summaries published afterward. The DXcore Mock is safe for development/testing only and not a substitute for the real implementation.

0 commit comments

Comments
 (0)