324 Commits

Author SHA1 Message Date
CherretGit
b038b6c977 Merge pull request #15 from egor-white/main
Update update's.json and changelog
2026-01-20 23:34:00 +07:00
CherretGit
9fe7810374 Update update's.json and changelog 2026-01-20 16:24:09 +00:00
CherretGit
93763862ad Merge pull request #14 from egor-white/main
Update print statement from 'Hello' to 'Goodbye'
2026-01-20 23:17:00 +07:00
CherretGit
84389db3a0 Update print statement from 'Hello' to 'Goodbye' 2026-01-20 23:15:59 +07:00
CherretGit
fde07bae80 Merge pull request #13 from egor-white/main
fix zaprett-hosts
2026-01-20 22:07:52 +07:00
CherretGit
349e55a968 fix zaprett-hosts 2026-01-20 22:06:43 +07:00
CherretGit
0b339eb2f9 fix bindgen 2026-01-20 21:48:17 +07:00
CherretGit
86defa0cb3 fix workflow 2026-01-20 21:31:22 +07:00
CherretGit
54e0e421ec try to fix justfile №3 2026-01-20 21:27:53 +07:00
CherretGit
a473e5c64b try to fix justfile №2 2026-01-20 21:21:10 +07:00
CherretGit
d503b4229a try to fix justfile 2026-01-20 21:09:35 +07:00
CherretGit
a89008497f remove luajit from cargo.toml, add libnfqws2 2026-01-20 21:00:31 +07:00
CherretGit
979c100259 add luajit to justfile 2026-01-20 20:53:05 +07:00
CherretGit
725510bafb remove return 2026-01-20 20:17:01 +07:00
egor-white
32b1bc9de9 Merge branch 'main' into hybrid 2026-01-19 16:27:18 +03:00
egor-white
0dabe2f4e7 migrate tv version to default package 2026-01-19 16:15:10 +03:00
egor-white
634f9245b2 Revert "migrate tv version to default package"
This reverts commit 4526c6d313.
2026-01-19 16:13:03 +03:00
egor-white
4526c6d313 migrate tv version to default package 2026-01-19 16:08:59 +03:00
egor-white
cceed3a1d7 add luajit 2026-01-19 16:04:01 +03:00
egor-white
60f112656a add zapret2 as submodule, configure zapret2 crate compiling 2026-01-19 16:01:51 +03:00
CherretGit
389e350746 Update update's.json and changelog 2026-01-18 18:46:36 +00:00
CherretGit
5d714e3591 Update workflow_without_post.yml 2026-01-19 01:41:25 +07:00
CherretGit
8e399bc791 Update workflow to include new directories for lists 2026-01-19 01:41:22 +07:00
CherretGit
c38dff2ada Fix paths for copying lists in workflow 2026-01-19 01:33:05 +07:00
CherretGit
d6ec35d1e2 Update workflow.yml 2026-01-19 01:33:01 +07:00
CherretGit
f873420b6a fix workflow again 2026-01-19 01:26:06 +07:00
CherretGit
e04c349383 fix workflow 2026-01-19 01:15:48 +07:00
CherretGit
b3828babe7 fix workflow 2026-01-19 01:09:10 +07:00
CherretGit
dabdd9adb1 add -q to unzip 2026-01-19 01:01:35 +07:00
CherretGit
4230027933 remove system from src and add .bin 2026-01-19 00:54:49 +07:00
CherretGit
48672aa0c3 temporarily remove version command 2026-01-18 23:38:59 +07:00
CherretGit
91a2990eb6 update zapret 2025-12-21 20:57:24 +07:00
CherretGit
b12b6e1bb2 Update update's.json and changelog 2025-12-08 16:41:32 +00:00
CherretGit
4cbda8bc52 edit customize.sh 2025-12-08 22:52:17 +07:00
egor-white
5ddea2675f Update hosts 2025-12-05 12:14:57 +03:00
white
6b35a0673a fix non-expected error in stop_service() 2025-12-04 16:25:16 +03:00
CherretGit
59e7970bf2 Update changelog.md 2025-11-17 21:49:28 +07:00
CherretGit
18e1ad9ebd Update changelog.md 2025-11-17 21:49:08 +07:00
CherretGit
85a3f9321c Update update's.json and changelog 2025-11-17 14:46:06 +00:00
CherretGit
f29ed9de63 change path 2025-11-17 21:32:48 +07:00
CherretGit
d58792fbfc fix set-autostart command 2025-11-17 21:27:52 +07:00
white
860dc21272 fix args joining 2025-11-11 19:13:47 +03:00
CherretGit
277f6756bd add args command and optimize binary 2025-11-11 20:48:21 +07:00
CherretGit
ac35be8e57 Update hosts file with new services and date
Updated the last modification date and added new entries for Linear.app and Windsurf services.
2025-11-11 13:00:18 +07:00
CherretGit
82de796d25 Update update's.json and changelog 2025-11-08 06:48:44 +00:00
CherretGit
4e5c3e3847 remove existing config.json 2025-11-08 13:39:07 +07:00
CherretGit
c500997d74 create json on zaprett start and fix module 2025-11-05 23:34:39 +07:00
egor-white
f94acaa830 Revise module versions and usage recommendations
Updated module versions and recommendations in README.
2025-11-04 11:20:25 +03:00
egor-white
b5fa8e0abf Update version and zip URL in update-tv.json 2025-11-04 11:18:31 +03:00
egor-white
85e3c5ce0f Update update's.json and changelog 2025-11-03 19:39:19 +00:00
egor-white
cf98c42995 Update workflow.yml 2025-11-03 22:30:52 +03:00
CherretGit
942578b5c5 optimize release binary 2025-11-03 23:47:45 +07:00
egor-white
6215a36eb6 Update customize.sh 2025-11-03 18:00:42 +03:00
CherretGit
5e64628d7f Update workflow.yml 2025-11-03 21:43:02 +07:00
CherretGit
8b0945352a Update workflow_without_post.yml 2025-11-03 21:41:47 +07:00
CherretGit
ca65e0c6f1 remove iptables crate, fix service_status 2025-11-03 21:16:14 +07:00
egor-white
234e9e5824 Merge pull request #7 from sqlerrorthing/refactor/rust/autostart
refactor: autostart
2025-11-03 16:28:23 +03:00
egor-white
aedf249712 Merge branch 'main' into refactor/rust/autostart 2025-11-03 16:28:13 +03:00
egor-white
526bf7ded2 Merge pull request #6 from sqlerrorthing/fix/right-library
fix: right library functions
2025-11-03 16:26:06 +03:00
sqlerrorthing
2c8721e42b right library api 2025-11-03 05:42:28 +08:00
sqlerrorthing
d59340a5c9 refactor autostart 2025-11-03 05:35:33 +08:00
egor-white
fc5cc814d6 edit workflow name 2025-11-03 00:31:35 +03:00
egor-white
924b6d20e8 fix workflow 2025-11-03 00:30:20 +03:00
egor-white
dedab3386a Update workflow_without_post.yml 2025-11-03 00:28:58 +03:00
egor-white
44deef4aef Merge pull request #5 from sqlerrorthing/fix/rust
fix: rust codebase
2025-11-03 00:27:08 +03:00
sqlerrorthing
eaf0e6c756 unnecessary dereference 2025-11-03 05:15:53 +08:00
sqlerrorthing
d1e56df7fc move module 2025-11-03 05:15:40 +08:00
sqlerrorthing
574bbbd8cc dereference in wrong place 2025-11-03 05:13:58 +08:00
sqlerrorthing
b5e37044e2 right use format macro 2025-11-03 05:13:34 +08:00
sqlerrorthing
aa1788386a fix shitcode 2025-11-03 05:10:52 +08:00
sqlerrorthing
8a1d336e4b good struct 2025-11-03 05:04:05 +08:00
sqlerrorthing
16ba9bedfc unnecessary .unwrap 2025-11-03 05:02:51 +08:00
white
6343e67cd9 change iptables lib to selfowned repo 2025-11-03 00:00:43 +03:00
white
2d9463e507 add service stop message 2025-11-02 23:54:51 +03:00
CherretGit
91d08d3df4 fix 2025-11-03 02:32:47 +07:00
egor-white
3e4f7bad3a Update customize.sh 2025-11-02 22:10:46 +03:00
egor-white
2c1594b13c Update workflow.yml 2025-11-02 22:05:30 +03:00
egor-white
ab7c49864c Update workflow.yml 2025-11-02 22:03:03 +03:00
egor-white
9dfb0b6d67 Update workflow_without_post.yml 2025-11-02 22:02:32 +03:00
CherretGit
46bff39782 fix stop service 2025-11-03 01:23:19 +07:00
CherretGit
0c932ff69c fix nfqws, add default json values 2025-11-03 01:03:47 +07:00
CherretGit
689488ba3f fix working dir 2025-11-01 23:01:44 +07:00
CherretGit
d63cb7c6e6 add saving logs from nfqws to files 2025-11-01 22:08:35 +07:00
CherretGit
90c7a55ab2 try to fix nfqws 2025-11-01 21:45:00 +07:00
CherretGit
dd80ffcd5f add --uid and --qnum to nfqws args 2025-11-01 21:08:10 +07:00
CherretGit
a581e02ccd Update workflow_without_post.yml 2025-11-01 20:20:01 +07:00
CherretGit
2e7b943712 fix customize.sh 2025-11-01 20:16:02 +07:00
CherretGit
4f6a80a8ee fix service status 2025-11-01 19:56:08 +07:00
CherretGit
8caa7ff696 fix 2025-11-01 18:51:57 +07:00
CherretGit
ef58166767 Update workflow_without_post.yml 2025-11-01 18:37:05 +07:00
CherretGit
89ecb5e7fe Update workflow_without_post.yml 2025-11-01 18:32:32 +07:00
CherretGit
26cb5ca046 Update update's.json and changelog 2025-11-01 10:57:14 +00:00
CherretGit
4370ff8867 Update workflow_without_post.yml 2025-11-01 17:51:14 +07:00
CherretGit
eafb226036 Delete src/system/bin directory 2025-11-01 17:40:45 +07:00
CherretGit
0316a4b004 Update file copy commands in workflow YAML 2025-11-01 17:39:43 +07:00
CherretGit
3d78a3d0a4 Update workflow_without_post.yml 2025-11-01 16:57:01 +07:00
CherretGit
d11eb93be6 change sh to bash 2025-11-01 16:43:40 +07:00
CherretGit
490c8fa685 Update workflow_without_post.yml 2025-11-01 16:27:08 +07:00
CherretGit
1128168924 create temp dir to save ndk 2025-11-01 16:25:00 +07:00
CherretGit
1b7448afa3 Test 2025-11-01 16:15:14 +07:00
CherretGit
636cd47ffa use println instead info 2025-11-01 15:51:11 +07:00
sqlerrorthing
ceb27e1ee8 refaktor 2025-11-01 13:00:19 +08:00
sqlerrorthing
fc431f8e88 refactor 2025-11-01 10:57:28 +08:00
sqlerrorthing
8a3df7b253 ... 2025-11-01 07:31:35 +08:00
sqlerrorthing
bb1fe1bc32 refactor 2025-11-01 07:27:14 +08:00
sqlerrorthing
f5cee6df60 build all 3 android targets 2025-11-01 07:27:04 +08:00
sqlerrorthing
930eaf48d2 remove useless 2025-11-01 03:39:48 +08:00
sqlerrorthing
515c946f13 fixess 2025-11-01 03:39:22 +08:00
sqlerrorthing
bf76e162ee fixes 2025-11-01 03:05:55 +08:00
sqlerrorthing
2790c8ed62 feat: build anrdoid (#1) 2025-11-01 02:55:42 +08:00
sqlerrorthing
2e9e08fb96 Merge branch 'rust' into feat/build-anrdoid 2025-11-01 02:54:44 +08:00
white
8542d33af2 create patch for workflow 2025-10-31 13:01:12 +03:00
white
1d9a8a641f removing procfs, adding iptables crate as submodule 2025-10-31 12:45:41 +03:00
sqlerrorthing
17d5e7a8f0 working 2025-10-31 17:38:31 +08:00
sqlerrorthing
aecde98d0d first working 2025-10-31 17:04:32 +08:00
sqlerrorthing
d5267997a3 code stolen from zapret 2025-10-31 16:13:01 +08:00
sqlerrorthing
57382991ad wtf 2025-10-31 15:25:14 +08:00
sqlerrorthing
12ceb7a7d1 build required libraries 2025-10-31 14:41:13 +08:00
sqlerrorthing
f37c14ef0a install android ndk 2025-10-31 12:47:47 +08:00
CherretGit
bfdd7a0a76 fix service status 2025-10-31 02:38:47 +07:00
CherretGit
47f314cd19 Add zapret binary version 2025-10-30 22:47:05 +07:00
white
10fdf4c227 remove bin-ver, add root checks on start and stop 2025-10-30 17:20:54 +03:00
CherretGit
784a248c11 stop_service command, fix 2025-10-30 18:41:47 +07:00
CherretGit
192d846a12 await 2025-10-30 04:09:37 +07:00
CherretGit
87a6b72aee move paths to constants (again) 2025-10-30 03:32:52 +07:00
sqlerrorthing
7ea4a516be daemonize 2025-10-29 23:12:53 +03:00
CherretGit
4b9e60336b Revert "move paths to constants"
This reverts commit 51af644b5f.
2025-10-30 03:08:03 +07:00
CherretGit
51af644b5f move paths to constants 2025-10-30 02:57:22 +07:00
sqlerrorthing
0f5492a29a move zapret from libs/ 2025-10-29 07:50:10 +08:00
sqlerrorthing
a16796a699 recode 2025-10-29 07:46:08 +08:00
sqlerrorthing
19a8ccd384 generate bindings 2025-10-29 07:26:32 +08:00
sqlerrorthing
58d0fdbab3 add rerun 2025-10-29 07:00:49 +08:00
sqlerrorthing
3c0488f629 working! 2025-10-29 06:58:55 +08:00
sqlerrorthing
3e009479c8 idk rename main 2025-10-29 06:08:28 +08:00
sqlerrorthing
3b66cc8136 suppress fucking C warnings 2025-10-29 05:26:09 +08:00
sqlerrorthing
db724d8667 Merge remote-tracking branch 'upstream/rust' into fix/shitcode
# Conflicts:
#	rust/src/main.rs
2025-10-29 05:20:04 +08:00
sqlerrorthing
a1a2961628 fire and forget 2025-10-29 05:05:44 +08:00
sqlerrorthing
e91cb00eec spawn blocking 2025-10-29 05:00:27 +08:00
sqlerrorthing
227db9b7fd right linking 2025-10-29 04:52:48 +08:00
white
c9b4a722c1 i give up 2025-10-28 23:25:34 +03:00
white
021fc6f53e trying to implement rust 2025-10-28 22:21:24 +03:00
egor-white
5f6663a067 Update README.md 2025-10-27 18:46:46 +03:00
egor-white
0e51fb14fd Update README.md 2025-10-27 17:56:10 +03:00
egor-white
31c2c08cf0 Update README.md 2025-10-27 17:54:43 +03:00
egor-white
bb389dff34 Update README.md 2025-10-27 16:47:25 +03:00
egor-white
3882924d60 Update README.md 2025-10-21 14:13:49 +03:00
egor-white
2f47b3c63d Update README.md 2025-10-21 14:13:31 +03:00
egor-white
2e4c484ffb Update README.md 2025-10-21 14:12:44 +03:00
CherretGit
55fd437762 Update changelog.md 2025-10-20 10:28:03 +07:00
CherretGit
d6bc7f17d7 Rename update_tv.json to update-tv.json 2025-10-20 10:26:27 +07:00
CherretGit
5136f3901b Rename update_hosts.json to update-hosts.json 2025-10-20 10:25:33 +07:00
CherretGit
ec072d4ae8 Update workflow.yml 2025-10-20 10:24:55 +07:00
CherretGit
e7b2075d1e Update update's.json and changelog 2025-10-20 03:18:25 +00:00
CherretGit
c7271b2825 update hosts 2025-10-19 14:47:19 +07:00
CherretGit
71e918bd13 Revert "Update service.sh"
This reverts commit 3a7c40f167.
2025-10-19 14:46:19 +07:00
egor-white
d3dbf4ddc5 Update update's.json and changelog 2025-10-16 13:28:26 +00:00
egor-white
0213c239fc Update workflow.yml 2025-10-16 16:27:40 +03:00
egor-white
2d90aea5ca Update workflow.yml 2025-10-16 16:25:56 +03:00
egor-white
e62336e253 Update workflow.yml 2025-10-16 16:22:15 +03:00
CherretGit
dd78b59a68 Update customize.sh 2025-10-12 14:16:55 +07:00
CherretGit
0a0c3fd80b Update customize.sh 2025-10-12 14:12:46 +07:00
CherretGit
3a7c40f167 Update service.sh 2025-10-12 14:10:05 +07:00
CherretGit
9ef7c70f78 ipsets 2025-09-30 22:27:19 +07:00
CherretGit
534f3a733a fix autostart 2025-09-30 22:24:49 +07:00
egor-white
ccaac37b52 Update README.md 2025-09-18 18:50:36 +03:00
egor-white
c2db7fbdac Update README.md 2025-09-18 18:49:37 +03:00
CherretGit
ea92b6cf6f Update workflow_without_post.yml 2025-08-21 17:52:15 +07:00
CherretGit
0fbcd24088 Update workflow.yml 2025-08-21 17:51:40 +07:00
CherretGit
45017d35b2 Update changelog.md 2025-08-21 17:47:01 +07:00
CherretGit
718ed43ef8 Update update's.json and changelog 2025-08-21 10:43:50 +00:00
CherretGit
6318977857 Add files via upload 2025-08-21 17:43:01 +07:00
CherretGit
e3effc3292 Update update's.json and changelog 2025-08-21 10:41:45 +00:00
egor-white
c92b3a1b19 Update customize.sh 2025-08-21 13:08:15 +03:00
white
afed7b1122 update customize.sh structure and bring back zaprettdir 2025-08-21 13:06:54 +03:00
CherretGit
1fa0e306ac Add files via upload 2025-08-21 16:53:40 +07:00
egor-white
fece7149e3 Update workflow.yml 2025-08-20 18:54:15 +03:00
egor-white
751788feb8 Update README.md 2025-07-15 16:42:12 +03:00
egor-white
cc3500635f Update README.md 2025-07-15 16:40:53 +03:00
egor-white
b01c5dc95f Update workflow.yml 2025-07-11 13:39:07 +03:00
CherretGit
bf69249e12 Update update's.json and changelog 2025-07-11 10:31:41 +00:00
CherretGit
63c45d8a2a Update workflow.yml 2025-07-11 17:31:17 +07:00
CherretGit
26325b79f1 Update customize.sh 2025-07-11 17:24:53 +07:00
egor-white
2cee0712c3 Merge branch 'main' of github.com:egor-white/zaprett 2025-07-11 13:23:09 +03:00
egor-white
79b63ec5e9 update customize 2025-07-11 13:21:12 +03:00
CherretGit
c230f4876c Update update's.json and changelog 2025-07-09 11:12:25 +00:00
egor-white
531c403ce2 Update update's.json and changelog 2025-06-22 08:16:59 +00:00
egor-white
70d3b3e28d fix bin-ver 2025-06-22 11:15:55 +03:00
CherretGit
cf507f059b Update update_extended.json 2025-06-21 23:12:36 +07:00
CherretGit
bf81100acb Update update's.json and changelog 2025-06-21 16:08:40 +00:00
CherretGit
5ac9234ca2 Update workflow.yml 2025-06-21 23:02:08 +07:00
CherretGit
156cedb080 Update update's.json and changelog 2025-06-21 16:01:03 +00:00
CherretGit
f59ec45e9f Update workflow_without_post.yml 2025-06-21 23:00:19 +07:00
CherretGit
45b25dd1ee Update workflow_without_post.yml 2025-06-21 22:58:35 +07:00
CherretGit
e967dc12d7 Rename src/system/etc/hosts to hosts/hosts 2025-06-21 22:44:47 +07:00
CherretGit
6e1b3f12d9 Update update's.json and changelog 2025-06-20 12:51:03 +00:00
CherretGit
6f395b1df9 Update workflow_without_post.yml 2025-06-20 19:50:04 +07:00
CherretGit
638c45b243 Update workflow.yml 2025-06-20 19:49:21 +07:00
CherretGit
78af1977fd Update workflow_without_post.yml 2025-06-20 19:48:40 +07:00
CherretGit
97f495a56a Update update's.json and changelog 2025-06-20 12:47:16 +00:00
egor-white
63b279114e Update workflow_without_post.yml 2025-06-20 15:46:11 +03:00
egor-white
f1d3ec0b5e Update workflow.yml 2025-06-20 15:45:29 +03:00
CherretGit
ffb296744b Update update_tv.json 2025-06-20 19:43:25 +07:00
CherretGit
7966bbaebf Update update_extended.json 2025-06-20 19:43:07 +07:00
CherretGit
f162004b56 Update update.json 2025-06-20 19:42:52 +07:00
CherretGit
71a5df5356 Update update's.json and changelog 2025-06-20 12:14:54 +00:00
CherretGit
bcf0aa2b50 Update service.sh 2025-06-20 19:08:35 +07:00
CherretGit
8248d43f67 Update zaprett 2025-06-20 19:05:47 +07:00
CherretGit
f3d26d5677 Create workflow_without_post.yml 2025-06-18 21:43:59 +07:00
CherretGit
2ef9ac91be Update zaprett 2025-06-18 21:40:46 +07:00
CherretGit
b16b9e4d7a Update zaprett 2025-06-18 21:20:13 +07:00
CherretGit
aa3dd6cce5 Update update's.json and changelog 2025-06-18 13:51:50 +00:00
CherretGit
092cc65bbe Update zaprett 2025-06-18 20:48:04 +07:00
CherretGit
6679a9c71a Update zaprett 2025-06-18 20:45:45 +07:00
egor-white
ac815f62a0 update readme.md 2025-06-18 09:18:24 +03:00
egor-white
a71baaa98b удаление notmalware из списка авторов в customize.sh 2025-06-18 09:08:50 +03:00
CherretGit
db69426185 Update README.md 2025-06-18 13:08:23 +07:00
CherretGit
6f7eb991a7 Update README.md 2025-06-18 13:07:00 +07:00
CherretGit
65ff8f0661 Update update's.json and changelog 2025-06-14 16:57:12 +00:00
CherretGit
c843494c8a Update workflow.yml 2025-06-14 23:56:32 +07:00
egor-white
1acb992344 Update workflow.yml 2025-06-14 19:51:47 +03:00
CherretGit
ca10ed0a7a Update workflow.yml 2025-06-14 23:50:03 +07:00
CherretGit
c4d1724ace Update workflow.yml 2025-06-14 23:47:57 +07:00
CherretGit
89a457da84 Update update's.json and changelog 2025-06-14 16:46:05 +00:00
CherretGit
8069ae43fc Update workflow.yml 2025-06-14 23:45:14 +07:00
CherretGit
02d3d2fb1c Update workflow.yml 2025-06-14 23:37:58 +07:00
CherretGit
0ad93a2c94 Update service.sh 2025-06-14 23:30:27 +07:00
egor-white
a1a3db7a94 update workflow 2025-06-14 18:05:28 +03:00
egor-white
80bea7d472 update workflow 2025-06-14 18:01:23 +03:00
egor-white
27192c15a3 update workflow 2025-06-14 18:00:03 +03:00
egor-white
2ccf9e909b update workflow 2025-06-14 17:57:20 +03:00
egor-white
428392033d update workflow 2025-06-14 17:53:50 +03:00
egor-white
baf209317d update workflow 2025-06-14 17:52:02 +03:00
egor-white
114dc16ffd update workflow 2025-06-14 17:50:23 +03:00
egor-white
57b0b820f7 update workflow 2025-06-14 17:48:03 +03:00
egor-white
c3117c24e1 Update update's.json and changelog 2025-06-14 14:42:48 +00:00
egor-white
3ba0b39464 update workflow 2025-06-14 17:41:59 +03:00
egor-white
08e6f1a588 Update update's.json and changelog 2025-06-14 14:40:05 +00:00
egor-white
cb4d956929 update workflow 2025-06-14 17:39:12 +03:00
egor-white
94ae3dfa5c update workflow 2025-06-14 17:37:27 +03:00
egor-white
044bc08601 Update update's.json and changelog 2025-06-14 14:33:27 +00:00
egor-white
a9b6beb58b update workflow 2025-06-14 17:32:01 +03:00
CherretGit
df43ad221a Update update's.json and changelog 2025-06-14 14:29:29 +00:00
CherretGit
e547dcb01f Update workflow.yml 2025-06-14 21:27:05 +07:00
GitHub Action
66e1243c87 update update.json and changelog 2025-06-14 14:26:41 +00:00
egor-white
2dabb61c27 update workflow 2025-06-14 17:25:40 +03:00
egor-white
43e8da1a6f update workflow 2025-06-14 17:23:45 +03:00
egor-white
7a31d2d71c update customize 2025-06-14 16:57:32 +03:00
egor-white
ba03ad017f update customize 2025-06-14 16:50:31 +03:00
GitHub Action
230241eccc update update.json and changelog 2025-06-14 13:33:09 +00:00
egor-white
b9e2915c11 update customize 2025-06-14 16:31:47 +03:00
GitHub Action
a9433ab7eb update update.json and changelog 2025-06-14 13:20:29 +00:00
egor-white
c98eef39a5 update zaprett 2025-06-14 16:16:45 +03:00
GitHub Action
b102a95b06 update update.json and changelog 2025-06-14 13:00:36 +00:00
egor-white
1992f0a0d7 update customize.sh 2025-06-14 15:59:12 +03:00
GitHub Action
af95cc36b2 update update.json and changelog 2025-06-14 12:48:30 +00:00
egor-white
703137c3dd update customize.sh 2025-06-14 15:47:17 +03:00
egor-white
7788a61a2b update action 2025-06-14 15:40:08 +03:00
egor-white
e2231dafba update action 2025-06-14 15:37:49 +03:00
egor-white
ac9b39c95c update action 2025-06-14 15:37:49 +03:00
GitHub Action
93ad791dc6 update update.json and changelog 2025-06-14 12:30:12 +00:00
egor-white
7ef462f6e9 add meta-inf and update action 2025-06-14 15:29:17 +03:00
GitHub Action
9d968fcea5 update update.json and changelog 2025-06-14 12:21:28 +00:00
egor-white
046afedd65 update actions 2025-06-14 15:20:40 +03:00
egor-white
d2dcdebe5b update workflow 2025-06-14 15:03:30 +03:00
egor-white
2f9658f7c0 refactoring 2025-06-14 13:53:10 +03:00
egor-white
f452f250ed refactoring 2025-06-14 13:50:13 +03:00
egor-white
063db1c312 refactoring 2025-06-14 13:47:26 +03:00
egor-white
e06921d4e2 refactoring 2025-06-14 13:47:20 +03:00
egor-white
d44922fa5c refactoring 2025-06-14 13:42:11 +03:00
egor-white
54371df71d refactoring 2025-06-14 13:38:54 +03:00
egor-white
f18842fd05 Update workflow.yml 2025-06-14 13:37:00 +03:00
egor-white
f7291945b3 Update workflow.yml 2025-06-14 13:24:37 +03:00
egor-white
218d5a835d Update workflow.yml 2025-06-14 13:23:42 +03:00
egor-white
b08109d91a refactoring 2025-06-14 13:05:46 +03:00
egor-white
7279be91c3 Update workflow.yml 2025-06-14 13:01:34 +03:00
egor-white
f757c20d63 Update workflow.yml 2025-06-14 12:57:23 +03:00
egor-white
1312bd04d6 Update workflow.yml 2025-06-14 12:55:38 +03:00
egor-white
93f1975629 refactoring 2025-06-14 12:51:53 +03:00
egor-white
0558b4b619 restructuring 2025-06-14 12:49:46 +03:00
egor-white
8b137cd210 Update workflow.yml 2025-06-14 12:47:53 +03:00
egor-white
84b2817842 Update workflow.yml 2025-06-14 12:43:59 +03:00
egor-white
79f9c8ab43 Update workflow.yml 2025-06-14 12:43:00 +03:00
egor-white
1116899c74 Update workflow.yml 2025-06-14 12:41:05 +03:00
egor-white
895412e6dd add files 2025-06-14 12:39:42 +03:00
egor-white
152002bb34 Update workflow.yml 2025-06-14 12:38:54 +03:00
egor-white
ed0197ce43 Update workflow.yml 2025-06-14 12:32:03 +03:00
egor-white
9a416e7ba5 Update workflow.yml 2025-06-14 12:31:53 +03:00
egor-white
98f96103bd Update workflow.yml 2025-06-14 12:29:54 +03:00
egor-white
755a5c3862 Update workflow.yml 2025-06-14 12:28:28 +03:00
egor-white
27e57c0b8f Update workflow.yml 2025-06-14 12:25:19 +03:00
egor-white
66f36d7c56 Update workflow.yml 2025-06-14 12:24:39 +03:00
egor-white
5f18c82a93 Update workflow.yml 2025-06-14 12:24:08 +03:00
egor-white
b696e93d19 Update workflow.yml 2025-06-14 12:17:42 +03:00
egor-white
4451d78913 move files 2025-06-14 12:15:56 +03:00
egor-white
0d8148d781 Update workflow.yml 2025-06-14 12:14:01 +03:00
egor-white
1f3fd3b2f6 Update workflow.yml 2025-06-14 12:08:48 +03:00
egor-white
1d59e6ae9a inital 2025-06-14 11:08:41 +03:00
egor-white
aed27e80d0 Update workflow.yml 2025-06-14 10:36:54 +03:00
egor-white
ab4f590358 Update workflow.yml 2025-06-14 10:05:56 +03:00
egor-white
7b80a5881b Update workflow.yml 2025-06-14 09:59:14 +03:00
egor-white
7b87215460 Update workflow.yml 2025-06-14 09:57:11 +03:00
egor-white
bd41635291 Update workflow.yml 2025-06-14 09:50:04 +03:00
CherretGit
8931550f83 Update workflow.yml 2025-06-14 13:33:00 +07:00
CherretGit
a138572257 Update workflow.yml 2025-06-14 13:30:21 +07:00
CherretGit
f27049ec55 Update and rename blank.yml to workflow.yml 2025-06-14 13:27:13 +07:00
CherretGit
e6be2ea05e Create workflow.yml 2025-06-14 13:15:21 +07:00
egor-white
426269a66a Update changelog.md 2025-06-13 20:22:32 +03:00
egor-white
20c01d55f8 Update update_tv.json 2025-06-13 20:22:05 +03:00
egor-white
8244d750a8 Update update_extended.json 2025-06-13 20:21:50 +03:00
egor-white
beb1be3b13 Update update.json 2025-06-13 20:21:30 +03:00
egor-white
d9fe9a25b4 Update update.json 2025-06-13 20:21:22 +03:00
egor-white
f3fd0477cd Update update_tv.json 2025-05-31 14:16:49 +03:00
egor-white
f61679a20e Update update_extended.json 2025-05-31 14:16:37 +03:00
egor-white
1068fa8d98 Update update.json 2025-05-31 14:16:19 +03:00
egor-white
6535922576 Update changelog.md 2025-05-31 14:16:00 +03:00
egor-white
3fc4e388bc Update changelog.md 2025-05-31 14:15:48 +03:00
CherretGit
64f3ec397c Update update_tv.json 2025-05-26 02:19:19 +07:00
CherretGit
ea1b82a483 Update update_extended.json 2025-05-26 02:18:21 +07:00
CherretGit
24731284f4 Update update.json 2025-05-26 02:17:07 +07:00
CherretGit
52a2287c00 Update changelog.md 2025-05-26 02:16:21 +07:00
egor-white
fa8b798943 Update update_tv.json 2025-05-18 10:35:19 +00:00
egor-white
f3c918de80 Update update_extended.json 2025-05-18 10:34:58 +00:00
egor-white
e55df9bf31 Update update.json 2025-05-18 10:34:36 +00:00
egor-white
885aa16736 Update changelog.md 2025-05-18 10:34:15 +00:00
43 changed files with 6127 additions and 18 deletions

180
.github/workflows/workflow.yml vendored Normal file
View File

@@ -0,0 +1,180 @@
name: Build module
on:
workflow_dispatch:
inputs:
create_release:
description: 'Create GitHub release?'
required: false
default: 'false'
tag:
description: "Tag for the release (x.x.x)"
required: true
type: string
zapret-version:
description: "Zapret version (x.x)"
required: true
type: string
version:
description: "Module version (x.x)"
required: true
type: string
version_code:
description: "Module version code (xx)"
required: true
type: string
release_name:
description: "Release Name"
required: true
type: string
release_changes:
description: "Release Changes"
required: true
type: string
jobs:
build:
runs-on: ubuntu-latest
env:
ZAPRET_VERSION: ${{ inputs.zapret-version }}
steps:
- uses: actions/checkout@v4
- name: Setup Git submodules
run: git submodule update --init --recursive
- name: Install dependencies
run: |
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y build-essential pkg-config just unzip libc6-dev-i386 gcc-multilib
- name: Build zaprett
run: just -f rust/justfile build-android --release
- name: Make build dirs
run: |
mkdir -p zaprett/system/bin
mkdir -p zaprett/zaprett/bin
mkdir -p zaprett/zaprett/lists/include
mkdir -p zaprett-hosts/system/bin
mkdir -p zaprett-hosts/system/etc
mkdir -p zaprett-hosts/zaprett/bin
mkdir -p zaprett-hosts/zaprett/lists/include
mkdir -p out lists
- name: Copy files to dirs
run: |
cp rust/target/armv7-linux-androideabi/release/zaprett zaprett/system/bin/zaprett-armv7
cp rust/target/aarch64-linux-android/release/zaprett zaprett/system/bin/zaprett-aarch64
cp rust/target/x86_64-linux-android/release/zaprett zaprett/system/bin/zaprett-x86_64
cp -a src/* zaprett/
cp -r zaprett/* zaprett-hosts/
- name: Download and copy actual lists
run: |
wget https://raw.githubusercontent.com/CherretGit/zaprett-repo/refs/heads/main/lists/include/list-youtube.txt -O lists/list-youtube.txt
wget https://raw.githubusercontent.com/CherretGit/zaprett-repo/refs/heads/main/lists/include/list-discord.txt -O lists/list-discord.txt
cp lists/* zaprett/zaprett/lists/include
cp lists/* zaprett-hosts/zaprett/lists/include
cp hosts/hosts zaprett-hosts/system/etc
- name: Create module.prop
run: |
cat > zaprett/module.prop <<EOF
id=zaprett
name=zaprett
version=${{ inputs.version }}
versionCode=${{ inputs.version_code }}
author=egor-white, Cherret
description=Ускорение CDN серверов Google. ТГК: https://t.me/zaprett_module
updateJson=https://raw.githubusercontent.com/egor-white/zaprett/refs/heads/main/update.json
EOF
cat > zaprett-hosts/module.prop <<EOF
id=zaprett
name=zaprett-hosts
version=${{ inputs.version }}
versionCode=${{ inputs.version_code }}
author=egor-white, Cherret
description=Ускорение CDN серверов Google. ТГК: https://t.me/zaprett_module
updateJson=https://raw.githubusercontent.com/egor-white/zaprett/refs/heads/main/update-hosts.json
EOF
- name: Create archives
run: |
cd zaprett && zip -r ../zaprett.zip ./* && cd ..
cd zaprett-hosts && zip -r ../zaprett-hosts.zip ./* && cd ..
mv zaprett.zip out/
mv zaprett-hosts.zip out/
- name: Create release
if: ${{ inputs.create_release == 'true' }}
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ inputs.tag }}
name: ${{ inputs.release_name }}
body: ${{ inputs.release_changes }}
files: out/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload artifact
if: ${{ inputs.create_release != 'true' }}
uses: actions/upload-artifact@v5.0.0
with:
name: zaprett
path: out/*
- name: Update changelog
if: ${{ inputs.create_release == 'true' }}
run: echo "${{ inputs.release_changes }}" > changelog.md
- name: Update update.json
if: ${{ inputs.create_release == 'true' }}
run: |
cat > update.json <<EOF
{
"version": "${{ inputs.version }}",
"versionCode": ${{ inputs.version_code }},
"zipUrl": "https://github.com/${{ github.repository }}/releases/download/${{ inputs.tag }}/zaprett.zip",
"changelog": "https://raw.githubusercontent.com/${{ github.repository }}/refs/heads/main/changelog.md"
}
EOF
cat > update-hosts.json <<EOF
{
"version": "${{ inputs.version }}",
"versionCode": ${{ inputs.version_code }},
"zipUrl": "https://github.com/${{ github.repository }}/releases/download/${{ inputs.tag }}/zaprett-hosts.zip",
"changelog": "https://raw.githubusercontent.com/${{ github.repository }}/refs/heads/main/changelog.md"
}
EOF
- name: Commit jsons and changelog
if: ${{ inputs.create_release == 'true' }}
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "Update update's.json and changelog"
file_pattern: "update.json update-hosts.json changelog.md"
- name: Send bot post
env:
MESSAGE_TEXT: |
🔄 <b>Обновление модуля</b> ${{ inputs.version }}
📋 Изменения: ${{ inputs.release_changes }}
⬇️ <a href='https://github.com/egor-white/zaprett/releases/tag/${{ inputs.tag }}'>Скачать</a>
@zaprett_module <a href='mailru.pro'>[web]</a>
run: |
curl -X POST "https://api.telegram.org/bot${{ secrets.BOT_TOKEN }}/sendMessage" \
-d chat_id=-1002531270265 \
-d parse_mode=HTML \
-d disable_web_page_preview=true \
--data-urlencode "text=$MESSAGE_TEXT"

View File

@@ -0,0 +1,167 @@
name: Build module (without post)
on:
workflow_dispatch:
inputs:
create_release:
description: 'Create GitHub release?'
required: false
default: 'false'
tag:
description: "Tag for the release (x.x.x)"
required: true
type: string
zapret-version:
description: "Zapret version (x.x)"
required: true
type: string
version:
description: "Module version (x.x)"
required: true
type: string
version_code:
description: "Module version code (xx)"
required: true
type: string
release_name:
description: "Release Name"
required: true
type: string
release_changes:
description: "Release Changes"
required: true
type: string
jobs:
build:
runs-on: ubuntu-latest
env:
ZAPRET_VERSION: ${{ inputs.zapret-version }}
steps:
- uses: actions/checkout@v4
- name: Setup Git submodules
run: git submodule update --init --recursive
- name: Install dependencies
run: |
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install -y build-essential pkg-config just unzip libc6-dev-i386 gcc-multilib
- name: Build zaprett
run: just -f rust/justfile build-android --release
- name: Make build dirs
run: |
mkdir -p zaprett/system/bin
mkdir -p zaprett/zaprett/bin
mkdir -p zaprett/zaprett/lists/include
mkdir -p zaprett-hosts/system/bin
mkdir -p zaprett-hosts/system/etc
mkdir -p zaprett-hosts/zaprett/bin
mkdir -p zaprett-hosts/zaprett/lists/include
mkdir -p out lists
- name: Copy files to dirs
run: |
#copy nfqws and zaprett
cp rust/target/armv7-linux-androideabi/release/zaprett zaprett/system/bin/zaprett-armv7
cp rust/target/aarch64-linux-android/release/zaprett zaprett/system/bin/zaprett-aarch64
cp rust/target/x86_64-linux-android/release/zaprett zaprett/system/bin/zaprett-x86_64
cp -a src/* zaprett/
cp -r zaprett/* zaprett-hosts/
- name: Download and copy actual lists
run: |
wget https://raw.githubusercontent.com/CherretGit/zaprett-repo/refs/heads/main/lists/include/list-youtube.txt -O lists/list-youtube.txt
wget https://raw.githubusercontent.com/CherretGit/zaprett-repo/refs/heads/main/lists/include/list-discord.txt -O lists/list-discord.txt
cp lists/* zaprett/zaprett/lists/include/
cp lists/* zaprett-hosts/zaprett/lists/include/
cp hosts/hosts zaprett-hosts/system/etc
- name: Create module.prop
run: |
cat > zaprett/module.prop <<EOF
id=zaprett
name=zaprett
version=${{ inputs.version }}
versionCode=${{ inputs.version_code }}
author=egor-white, Cherret
description=Ускорение CDN серверов Google. ТГК: https://t.me/zaprett_module
updateJson=https://raw.githubusercontent.com/egor-white/zaprett/refs/heads/main/update.json
EOF
cat > zaprett-hosts/module.prop <<EOF
id=zaprett
name=zaprett-hosts
version=${{ inputs.version }}
versionCode=${{ inputs.version_code }}
author=egor-white, Cherret
description=Ускорение CDN серверов Google. ТГК: https://t.me/zaprett_module
updateJson=https://raw.githubusercontent.com/egor-white/zaprett/refs/heads/main/update-hosts.json
EOF
- name: Create archives
run: |
cd zaprett && zip -r ../zaprett.zip ./* && cd ..
cd zaprett-hosts && zip -r ../zaprett-hosts.zip ./* && cd ..
mv zaprett.zip out/
mv zaprett-hosts.zip out/
- name: Create release
if: ${{ inputs.create_release == 'true' }}
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ inputs.tag }}
name: ${{ inputs.release_name }}
body: ${{ inputs.release_changes }}
files: out/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload artifact
if: ${{ inputs.create_release != 'true' }}
uses: actions/upload-artifact@v5.0.0
with:
name: zaprett
path: out/*
- name: Update changelog
if: ${{ inputs.create_release == 'true' }}
run: echo "${{ inputs.release_changes }}" > changelog.md
- name: Update update.json
if: ${{ inputs.create_release == 'true' }}
run: |
cat > update.json <<EOF
{
"version": "${{ inputs.version }}",
"versionCode": ${{ inputs.version_code }},
"zipUrl": "https://github.com/${{ github.repository }}/releases/download/${{ inputs.tag }}/zaprett.zip",
"changelog": "https://raw.githubusercontent.com/${{ github.repository }}/refs/heads/main/changelog.md"
}
EOF
cat > update_hosts.json <<EOF
{
"version": "${{ inputs.version }}",
"versionCode": ${{ inputs.version_code }},
"zipUrl": "https://github.com/${{ github.repository }}/releases/download/${{ inputs.tag }}/zaprett-hosts.zip",
"changelog": "https://raw.githubusercontent.com/${{ github.repository }}/refs/heads/main/changelog.md"
}
EOF
- name: Commit jsons and changelog
if: ${{ inputs.create_release == 'true' }}
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "Update update's.json and changelog"
file_pattern: "update.json update_hosts.json changelog.md"

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
target

6
.gitmodules vendored Normal file
View File

@@ -0,0 +1,6 @@
[submodule "rust/crates/libnfqws/zapret"]
path = rust/crates/libnfqws/zapret
url = https://github.com/bol-van/zapret.git
[submodule "rust/crates/libnfqws2/zapret2"]
path = rust/crates/libnfqws2/zapret2
url = https://github.com/bol-van/zapret2

View File

@@ -1,15 +1,34 @@
# zaprett
### [Официальный Telegram-канал модуля](https://t.me/zaprett_module)
![GitHub Downloads (all assets, all releases)](https://img.shields.io/github/downloads/egor-white/zaprett/total)
![GitHub Downloads (all assets, latest release)](https://img.shields.io/github/downloads/egor-white/zaprett/latest/total)
![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/egor-white/zaprett/workflow.yml)
### [📣 Официальный Telegram-канал модуля](https://t.me/zaprett_module)
## О модуле
Представляет собой портированную версию [zapret](https://github.com/bol-van/zapret/) от [bol-van](https://github.com/bol-van/) для Android устройств.
Требования:
* Magisk 24.1+
* Прямые руки
* Termux или другой эмулятор терминала **И/ИЛИ** [приложение zaprett](https://github.com/egor-white/zaprett-app) **ИЛИ** [ремейк приложения zaprett от cherret](https://github.com/CherretGit/zaprett-app)
* Termux или другой эмулятор терминала **И/ИЛИ** [ремейк приложения zaprett от cherret](https://github.com/CherretGit/zaprett-app) ("оригинал" устарел и не обновляется, вместо этого мы вдвоём занимаемся версией на Kotlin!)
На данный момент модуль умеет:
+ Включать, выключать и перезапускать nfqws
+ Работать с листами, айписетами, стратегиями
+ Предлагать обновления через Magisk/KSU/KSU Next/APatch
Оригинальный автор - [notmalware](https://t.me/notmalware). Отредактировано - [egor-white](https://t.me/cheesedroid), [MT6833](https://t.me/MT6833), [Mineralka](https://t.me/Program_dayn), [Cherret](https://t.me/Cherret).
## Какую версию модуля выбрать?
В актуальных релизах есть 2 версии модуля, а именно:
- zaprett.zip
- zaprett-hosts.zip (с /etc/hosts)
## Что такое /etc/hosts?
Говоря грубо, это файл, который влияет на работу нейросетей и других недоступных сервисов, перенаправляя ваш траффик на сторонние сервера.
Если вы используете модули, которые подменяют этот файл (например, всевозможные блокировщики рекламы и разблокировщики нейросетей), выбирайте версию <big>**без hosts**</big>, иначе модули будут конфликтовать друг с другом.
⚠️ Сервера, используемые в качестве прокси и указанные в файле hosts нам неподконтрольны, мы не несём за них отвественность, используйте с осторожностью

View File

@@ -1 +1 @@
Исправление обновлений
1. Исправление hosts версии 2. Обновление hosts файла

3566
hosts/hosts Normal file

File diff suppressed because it is too large Load Diff

1137
rust/Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

33
rust/Cargo.toml Normal file
View File

@@ -0,0 +1,33 @@
[workspace.package]
version = "0.0.1"
edition = "2024"
repository = "https://github.com/egor-white/zaprett"
[workspace]
members = ["crates/*"]
resolver = "3"
[workspace.dependencies]
anyhow = "1.0.100"
clap = { version = "4.5.50", features = ["derive"] }
libc = "0.2.177"
regex = "1.12.2"
rust-ini = "0.21.3"
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.145"
sysctl = "0.7.1"
tokio = { version = "1.48.0", features = ["full"] }
once_cell = "1.21.3"
daemonize = "0.5.0"
log = "0.4.28"
pretty_env_logger = "0.5.0"
nix = { version = "0.30.1", features = ["signal"] }
getset = "0.1.6"
sysinfo = "0.37.2"
[profile.release]
panic = "abort"
opt-level = "z"
lto = true
strip = true
codegen-units = 1

View File

@@ -0,0 +1,11 @@
[package]
name = "libnfqws"
version.workspace = true
edition.workspace = true
repository.workspace = true
[build-dependencies]
cc = "1.2.43"
once_cell = "1.21.3"
glob = "0.3.3"
bindgen = "0.72.1"

View File

@@ -0,0 +1,68 @@
use once_cell::sync::Lazy;
use std::env;
use std::path::{Path, PathBuf};
macro_rules! rel_manifest_path {
($name:ident, $path:expr) => {
static $name: Lazy<PathBuf> = Lazy::new(|| {
let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
Path::new(&manifest_dir).join($path)
});
};
}
rel_manifest_path!(NFQ, "zapret/nfq");
rel_manifest_path!(NFQ_CRYPTO, "zapret/nfq/crypto");
fn main() {
cc::Build::new()
.files(
glob::glob(&format!("{}/*.c", NFQ.display()))
.unwrap()
.filter_map(Result::ok),
)
.files(
glob::glob(&format!("{}/*.c", NFQ_CRYPTO.display()))
.unwrap()
.filter_map(Result::ok),
)
.include(&*NFQ)
.include(&*NFQ_CRYPTO)
.flag("-w")
.define("main", "nfqws_main")
.compile("libnfqws.a");
println!("cargo:rustc-link-lib=z");
println!("cargo:rustc-link-lib=netfilter_queue");
println!("cargo:rustc-link-lib=nfnetlink");
println!("cargo:rustc-link-lib=mnl");
let _ = env::var("NETFILTER_LIBS")
.map(|libs| println!("cargo:rustc-link-search=native={libs}/lib"));
println!("cargo:rustc-link-lib=static=nfqws");
println!("cargo:rerun-if-changed={}", NFQ.display());
println!("cargo:rerun-if-changed={}", NFQ_CRYPTO.display());
println!("cargo:rerun-if-changed=build.rs");
let mut builder = bindgen::Builder::default();
for header in glob::glob(&format!("{}/*.h", NFQ.display()))
.unwrap()
.filter_map(Result::ok)
{
builder = builder.header(header.to_string_lossy());
}
builder = builder.clang_arg("-Dmain=nfqws_main");
let bindings = builder
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
.generate()
.expect("Unable to generate libnfqws");
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
bindings
.write_to_file(out_path.join("libnfqws.rs"))
.expect("Couldn't write libnfqws");
}

View File

@@ -0,0 +1,2 @@
#![allow(warnings)]
include!(concat!(env!("OUT_DIR"), "/libnfqws.rs"));

View File

@@ -0,0 +1,11 @@
[package]
name = "libnfqws2"
version.workspace = true
edition.workspace = true
repository.workspace = true
[build-dependencies]
cc = "1.2.43"
once_cell = "1.21.3"
glob = "0.3.3"
bindgen = "0.72.1"

View File

@@ -0,0 +1,71 @@
use once_cell::sync::Lazy;
use std::env;
use std::path::{Path, PathBuf};
macro_rules! rel_manifest_path {
($name:ident, $path:expr) => {
static $name: Lazy<PathBuf> = Lazy::new(|| {
let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
Path::new(&manifest_dir).join($path)
});
};
}
rel_manifest_path!(NFQ, "zapret2/nfq2");
rel_manifest_path!(NFQ_CRYPTO, "zapret2/nfq2/crypto");
fn main() {
cc::Build::new()
.files(
glob::glob(&format!("{}/*.c", NFQ.display()))
.unwrap()
.filter_map(Result::ok),
)
.files(
glob::glob(&format!("{}/*.c", NFQ_CRYPTO.display()))
.unwrap()
.filter_map(Result::ok),
)
.include(&*NFQ)
.include(&*NFQ_CRYPTO)
.flag("-w")
.define("main", "nfqws2_main")
.compile("libnfqws2.a");
println!("cargo:rustc-link-lib=z");
println!("cargo:rustc-link-lib=netfilter_queue");
println!("cargo:rustc-link-lib=nfnetlink");
println!("cargo:rustc-link-lib=mnl");
let _ = env::var("NETFILTER_LIBS")
.map(|libs| println!("cargo:rustc-link-search=native={libs}/lib"));
println!("cargo:rustc-link-lib=static=nfqws2");
println!("cargo:rerun-if-changed={}", NFQ.display());
println!("cargo:rerun-if-changed={}", NFQ_CRYPTO.display());
println!("cargo:rerun-if-changed=build.rs");
let mut builder = bindgen::Builder::default();
for header in glob::glob(&format!("{}/*.h", NFQ.display()))
.unwrap()
.filter_map(Result::ok)
{
builder = builder.header(header.to_string_lossy());
}
if let Ok(luajit) = env::var("LUAJIT") {
builder = builder
.clang_arg(format!("-I{}", luajit))
.clang_arg("-Dmain=nfqws2_main");
}
let bindings = builder
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
.generate()
.expect("Unable to generate libnfqws2");
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
bindings
.write_to_file(out_path.join("libnfqws2.rs"))
.expect("Couldn't write libnfqws2");
}

View File

@@ -0,0 +1,2 @@
#![allow(warnings)]
include!(concat!(env!("OUT_DIR"), "/libnfqws2.rs"));

View File

@@ -0,0 +1,24 @@
[package]
name = "zaprett"
version.workspace = true
edition.workspace = true
repository.workspace = true
[dependencies]
anyhow = { workspace = true }
clap = { workspace = true }
libc = { workspace = true }
regex = { workspace = true }
rust-ini = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
sysctl ={ workspace = true }
tokio = { workspace = true }
libnfqws = { path = "../libnfqws" }
libnfqws2 = { path = "../libnfqws2" }
daemonize = { workspace = true }
pretty_env_logger = { workspace = true }
log = { workspace = true }
nix = { workspace = true, features = ["user"] }
getset = { workspace = true }
sysinfo = { workspace = true }

View File

@@ -0,0 +1,5 @@
use std::env;
fn main() {
let zapret_version = env::var("ZAPRET_VERSION").unwrap_or("unknown".to_string());
println!("cargo:rustc-env=ZAPRET_VERSION={}", zapret_version);
}

View File

@@ -0,0 +1,21 @@
use crate::MODULE_PATH;
use tokio::fs;
use tokio::fs::File;
pub async fn set_autostart() -> Result<(), anyhow::Error> {
let autostart_path = MODULE_PATH.join("autostart");
if !get_autostart() {
File::create(autostart_path).await?;
} else {
fs::remove_file(autostart_path).await?;
}
println!("{}", get_autostart());
Ok(())
}
pub fn get_autostart() -> bool {
return MODULE_PATH.join("autostart").exists();
}

View File

@@ -0,0 +1,13 @@
pub mod commands;
use clap::Parser;
use commands::Command;
use getset::Getters;
#[derive(Parser, Getters)]
// #[command(version)]
#[getset(get = "pub")]
pub struct CliApp {
#[command(subcommand)]
cmd: Option<Command>,
}

View File

@@ -0,0 +1,64 @@
use crate::autostart::{get_autostart, set_autostart};
use crate::service::{restart_service, service_status, start_service, stop_service};
use crate::{bin_version, module_version, run_nfqws};
use clap::Subcommand;
#[derive(Subcommand)]
pub enum Command {
/// Start the service
Start,
/// Stop the service
Stop,
/// Restart the service
Restart,
/// Show the current service status
Status,
/// Enable or disable automatic restart
SetAutostart,
/// Show whether autostart is enabled
GetAutostart,
/// Show the module version
ModuleVersion,
/// Show the nfqws binary version
BinaryVersion,
/// Run nfqws
Args {
#[arg(allow_hyphen_values=true, trailing_var_arg = true, num_args = 0..)]
args: Vec<String>,
},
}
impl Command {
pub async fn exec(&self) -> anyhow::Result<()> {
match self {
Command::Start => start_service().await?,
Command::Stop => stop_service().await?,
Command::Restart => restart_service().await?,
Command::Status => {
println!(
"zaprett is {}",
if service_status().await? {
"working"
} else {
"stopped"
}
);
}
Command::SetAutostart => set_autostart().await?,
Command::GetAutostart => println!("{}", get_autostart()),
Command::ModuleVersion => println!("{}", module_version().await?),
Command::BinaryVersion => println!("{}", bin_version()),
Command::Args { args } => run_nfqws(&args.join(" "))?,
}
Ok(())
}
}

View File

@@ -0,0 +1,63 @@
use crate::{MODULE_PATH, merge_files};
use getset::Getters;
use serde::{Deserialize, Serialize};
#[derive(Default, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum ListType {
#[default]
Whitelist,
Blacklist,
}
#[derive(Default, Serialize, Deserialize, Getters)]
#[getset(get = "pub")]
#[serde(default)]
pub struct Config {
active_lists: Vec<String>,
active_ipsets: Vec<String>,
active_exclude_lists: Vec<String>,
active_exclude_ipsets: Vec<String>,
list_type: ListType,
strategy: String,
app_list: String,
whitelist: Vec<String>,
blacklist: Vec<String>,
}
impl ListType {
/// # Returns
///
/// (hostlist arg, ipset arg)
pub async fn merge(&self, config: &Config) -> (String, String) {
let module_path_str = MODULE_PATH.to_str().unwrap();
let (host_files, ipset_files, host_suffix, ipset_suffix, exclude_flag) = match self {
ListType::Whitelist => (
&config.active_lists,
&config.active_ipsets,
"hostlist",
"ipset",
"",
),
ListType::Blacklist => (
&config.active_exclude_lists,
&config.active_exclude_ipsets,
"hostlist-exclude",
"ipset-exclude",
"-exclude",
),
};
let host_path = MODULE_PATH.join(format!("tmp/{host_suffix}"));
let ipset_path = MODULE_PATH.join(format!("tmp/{ipset_suffix}"));
merge_files(host_files, host_path).await.unwrap();
merge_files(ipset_files, ipset_path).await.unwrap();
(
format!("--hostlist{exclude_flag}={module_path_str}/tmp/{host_suffix}"),
format!("--ipset{exclude_flag}={module_path_str}/tmp/{ipset_suffix}"),
)
}
}

View File

@@ -0,0 +1,26 @@
use crate::{MODULE_PATH, run_nfqws};
use daemonize::Daemonize;
use log::{error, info};
use std::fs::File;
pub async fn daemonize_nfqws(args: &str) {
info!("Starting nfqws as a daemon");
let stdout = File::create(MODULE_PATH.join("tmp/nfqws.out")).unwrap();
let stderr = File::create(MODULE_PATH.join("tmp/nfqws.err")).unwrap();
let daemonize = Daemonize::new()
.pid_file(MODULE_PATH.join("tmp/pid.lock").as_path())
.working_directory(MODULE_PATH.join("tmp"))
.stdout(stdout)
.stderr(stderr)
.privileged_action(|| "Executed before drop privileges");
match daemonize.start() {
Ok(_) => {
info!("Success, daemonized");
run_nfqws(args).unwrap()
}
Err(e) => error!("Error while starting nfqws daemon: {e}"),
}
}

View File

@@ -0,0 +1,88 @@
use std::error;
use std::process::Command;
pub fn setup_iptables_rules() -> Result<(), Box<dyn error::Error>> {
Command::new("iptables")
.arg("-t")
.arg("mangle")
.arg("-I")
.arg("POSTROUTING")
.arg("-j")
.arg("NFQUEUE")
.arg("--queue-num")
.arg("200")
.arg("--queue-bypass")
.status()
.expect("failed to add iptables rules");
Command::new("iptables")
.arg("-t")
.arg("mangle")
.arg("-I")
.arg("PREROUTING")
.arg("-j")
.arg("NFQUEUE")
.arg("--queue-num")
.arg("200")
.arg("--queue-bypass")
.status()
.expect("failed to add iptables rules");
Command::new("iptables")
.arg("-t")
.arg("filter")
.arg("-A")
.arg("FORWARD")
.arg("-j")
.arg("NFQUEUE")
.arg("--queue-num")
.arg("200")
.arg("--queue-bypass")
.status()
.expect("failed to add iptables rules");
Ok(())
}
pub fn clear_iptables_rules() -> Result<(), Box<dyn error::Error>> {
Command::new("iptables")
.arg("-t")
.arg("mangle")
.arg("-D")
.arg("POSTROUTING")
.arg("-j")
.arg("NFQUEUE")
.arg("--queue-num")
.arg("200")
.arg("--queue-bypass")
.status()
.expect("failed to remove iptables rules");
Command::new("iptables")
.arg("-t")
.arg("mangle")
.arg("-D")
.arg("PREROUTING")
.arg("-j")
.arg("NFQUEUE")
.arg("--queue-num")
.arg("200")
.arg("--queue-bypass")
.status()
.expect("failed to remove iptables rules");
Command::new("iptables")
.arg("-t")
.arg("filter")
.arg("-D")
.arg("FORWARD")
.arg("-j")
.arg("NFQUEUE")
.arg("--queue-num")
.arg("200")
.arg("--queue-bypass")
.status()
.expect("failed to remove iptables rules");
Ok(())
}

View File

@@ -0,0 +1,103 @@
pub mod cli;
pub mod config;
mod daemon;
pub mod iptables_rust;
mod service;
mod autostart;
use ini::Ini;
use libnfqws::nfqws_main;
use std::error;
use std::ffi::CString;
use std::os::raw::c_char;
use std::path::Path;
use std::sync::LazyLock;
use anyhow::bail;
use tokio::fs::File;
use tokio::io::{copy, AsyncWriteExt};
use tokio::task::spawn_blocking;
pub static MODULE_PATH: LazyLock<&Path> =
LazyLock::new(|| Path::new("/data/adb/modules/zaprett"));
pub static ZAPRETT_DIR_PATH: LazyLock<&Path> =
LazyLock::new(|| Path::new("/storage/emulated/0/zaprett"));
pub static DEFAULT_START: &str = "
--filter-tcp=80 --dpi-desync=fake,split2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig,badsum $hostlist --new
--filter-tcp=443 $hostlist --dpi-desync=fake,split2 --dpi-desync-repeats=6 --dpi-desync-fooling=md5sig,badsum --dpi-desync-fake-tls=${zaprettdir}/bin/tls_clienthello_www_google_com.bin --new
--filter-tcp=80,443 --dpi-desync=fake,disorder2 --dpi-desync-repeats=6 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig,badsum $hostlist --new
--filter-udp=50000-50100 --dpi-desync=fake --dpi-desync-any-protocol --dpi-desync-fake-quic=0xC30000000108 --new
--filter-udp=443 $hostlist --dpi-desync=fake --dpi-desync-repeats=6 --dpi-desync-fake-quic=${zaprettdir}/bin/quic_initial_www_google_com.bin --new
--filter-udp=443 --dpi-desync=fake --dpi-desync-repeats=6 $hostlist
";
async fn module_version() -> anyhow::Result<String> {
let prop = spawn_blocking(|| Ini::load_from_file(MODULE_PATH.join("module.prop")))
.await??;
if let Some(props) = prop.section::<String>(None)
&& let Some(version) = props.get("version")
{
return Ok(version.into());
}
bail!("Failed to get version, prop not found")
}
fn bin_version() -> &'static str {
env!("ZAPRET_VERSION")
}
pub async fn merge_files(
input_paths: &[impl AsRef<Path>],
output_path: impl AsRef<Path>,
) -> Result<(), Box<dyn error::Error>> {
let output_path = output_path.as_ref();
let mut output_file = File::create(output_path).await?;
for input in input_paths {
let input = input.as_ref();
let mut input_file = File::open(input)
.await
.map_err(|e| format!("Failed to open {}: {e}", input.display()))?;
copy(&mut input_file, &mut output_file).await.map_err(|e| {
format!(
"Failed to write contents of {}: {e}",
input.display()
)
})?;
}
output_file.flush().await?;
Ok(())
}
fn run_nfqws(args_str: &str) -> anyhow::Result<()> {
let mut args = vec![
"nfqws".to_string(),
"--uid=0:0".to_string(),
"--qnum=200".to_string(),
];
if args_str.trim().is_empty() {
args.push("-v".to_string());
} else {
args.extend(args_str.split_whitespace().map(String::from));
}
let c_args: Vec<CString> = args
.into_iter()
.map(|arg| CString::new(arg).unwrap())
.collect();
let mut ptrs: Vec<*const c_char> = c_args.iter().map(|arg| arg.as_ptr()).collect();
unsafe {
nfqws_main(c_args.len() as libc::c_int, ptrs.as_mut_ptr() as *mut _);
}
Ok(())
}

View File

@@ -0,0 +1,15 @@
use clap::Parser;
use zaprett::cli::CliApp;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
pretty_env_logger::init();
let cli = CliApp::parse();
match cli.cmd() {
Some(cmd) => cmd.exec().await?,
None => println!("zaprett installed. Join us: t.me/zaprett_module"),
}
Ok(())
}

View File

@@ -0,0 +1,138 @@
use crate::config::Config;
use crate::daemon::daemonize_nfqws;
use crate::iptables_rust::{clear_iptables_rules, setup_iptables_rules};
use crate::{DEFAULT_START, MODULE_PATH, ZAPRETT_DIR_PATH};
use anyhow::bail;
use log::info;
use nix::sys::signal::{Signal, kill};
use nix::unistd::{Pid, Uid};
use regex::Regex;
use std::borrow::Cow;
use std::io::ErrorKind;
use std::path::Path;
use sysctl::{Ctl, CtlValue, Sysctl};
use sysinfo::{Pid as SysPid, System};
use tokio::fs;
use tokio::io::AsyncReadExt;
pub async fn start_service() -> anyhow::Result<()> {
if !Uid::effective().is_root() {
bail!("Running not from root, exiting");
};
if service_status().await? {
bail!("zaprett already started")
}
println!("Starting zaprett service...");
let tmp_dir = MODULE_PATH.join("tmp");
if tmp_dir.exists() {
fs::remove_dir_all(&tmp_dir).await?;
fs::create_dir_all(&tmp_dir).await?;
}
let config_path = ZAPRETT_DIR_PATH.join("config.json");
let mut config_contents = String::new();
match fs::File::open(&config_path).await {
Ok(mut file) => {
file.read_to_string(&mut config_contents).await?;
}
Err(e) if e.kind() == ErrorKind::NotFound => {
let default_config = Config::default();
let json = serde_json::to_string_pretty(&default_config)?;
if let Some(parent) = config_path.parent() {
fs::create_dir_all(parent).await?;
}
fs::write(&config_path, &json).await?;
config_contents = json;
}
Err(e) => return Err(e.into()),
}
let config: Config = serde_json::from_str(&config_contents)?;
let start = fs::read_to_string(config.strategy())
.await
.map(Cow::Owned)
.unwrap_or(Cow::Borrowed(DEFAULT_START));
let regex_hostlist = Regex::new(r"\$hostlist")?;
let regex_ipsets = Regex::new(r"\$ipset")?;
let regex_zaprettdir = Regex::new(r"\$\{?zaprettdir}?")?;
let mut strat_modified;
let (hosts, ipsets) = config.list_type().merge(&config).await;
strat_modified = regex_hostlist.replace_all(&start, &hosts).into_owned();
strat_modified = regex_ipsets
.replace_all(&strat_modified, &ipsets)
.into_owned();
strat_modified = regex_zaprettdir
.replace_all(&strat_modified, ZAPRETT_DIR_PATH.to_str().unwrap())
.into_owned();
let ctl = Ctl::new("net.netfilter.nf_conntrack_tcp_be_liberal")?;
ctl.set_value(CtlValue::String("1".into()))?;
setup_iptables_rules().expect("setup iptables rules");
daemonize_nfqws(&strat_modified).await;
println!("zaprett service started!");
Ok(())
}
pub async fn stop_service() -> anyhow::Result<()> {
if !Uid::effective().is_root() {
bail!("Running not from root, exiting");
};
if !service_status().await? {
info!("zaprett service already stopped");
return Ok(())
}
clear_iptables_rules().expect("clear iptables rules");
let pid_str = fs::read_to_string(MODULE_PATH.join("tmp/pid.lock")).await?;
let pid = pid_str.trim().parse::<i32>()?;
kill(Pid::from_raw(pid), Signal::SIGKILL)?;
println!("zaprett service stopped");
Ok(())
}
pub async fn restart_service() -> anyhow::Result<()> {
if !Uid::effective().is_root() {
bail!("Running not from root, exiting");
};
stop_service().await?;
start_service().await?;
info!("zaprett service restarted!");
Ok(())
}
pub async fn service_status() -> anyhow::Result<bool> {
if !Uid::effective().is_root() {
bail!("Running not from root, exiting");
};
let pid_i32 = match fs::read_to_string(Path::new(*MODULE_PATH).join("tmp/pid.lock")).await {
Ok(s) => match s.trim().parse::<i32>() {
Ok(pid) => pid,
Err(_) => return Ok(false),
},
Err(_) => return Ok(false),
};
let pid = SysPid::from(pid_i32 as usize);
let system = System::new_all();
if let Some(process) = system.process(pid) {
if process.name() == "zaprett" {
return Ok(true);
}
}
Ok(false)
}

139
rust/justfile Normal file
View File

@@ -0,0 +1,139 @@
set shell := ["bash", "-eu", "-c"]
export ANDROID_API := "21"
export ANDROID_NDK_VERSION := "r27d-linux"
TARGET := `pwd` + "/target"
export NETFILTER_LIBS := TARGET + "/netfilter"
export NDK_HOME := TARGET + "/android-ndk-" + ANDROID_NDK_VERSION
_download_android_ndk:
#!/usr/bin/env bash
if [ ! -d "{{NDK_HOME}}" ]; then
echo "Downloading ndk {{ANDROID_NDK_VERSION}} to {{NDK_HOME}}"
TMPFILE="{{NDK_HOME}}.tmp"
TMPDIR="{{NDK_HOME}}.extracted.tmp"
mkdir -p "$(dirname "$TMPFILE")"
curl -L -C - -o "$TMPFILE" "https://dl.google.com/android/repository/android-ndk-{{ANDROID_NDK_VERSION}}.zip"
unzip -q "$TMPFILE" -d "$TMPDIR"
inner_folder=$(find "$TMPDIR" -mindepth 1 -maxdepth 1 -type d | head -n 1)
mv -T "$inner_folder" "$NDK_HOME"
rm -rf "$TMPFILE" "$TMPDIR"
echo "Android ndk {{ANDROID_NDK_VERSION}} successfully installed in {{NDK_HOME}}"
else
echo "Android ndk {{ANDROID_NDK_VERSION}} already installed in {{NDK_HOME}}"
fi
_build_netfilter_libs target_arch:
#!/usr/bin/env bash
if [ ! -d "{{NETFILTER_LIBS}}-{{target_arch}}" ]; then
export PATCH="$(pwd)/libnetfilter_queue-android.patch"
cd "{{TARGET}}"
export TOOLCHAIN=$NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64
export CC="$TOOLCHAIN/bin/clang --target={{target_arch}}$ANDROID_API"
export AR=$TOOLCHAIN/bin/llvm-ar
export AS=$CC
export LD=$TOOLCHAIN/bin/ld
export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
export STRIP=$TOOLCHAIN/bin/llvm-strip
export PKG_CONFIG_PATH=$NETFILTER_LIBS-{{target_arch}}/lib/pkgconfig
if [ ! -d "libnfnetlink-1.0.2" ]; then
wget -O- https://www.netfilter.org/pub/libnfnetlink/libnfnetlink-1.0.2.tar.bz2 | tar -xj
fi
if [ ! -d "libmnl-1.0.5" ]; then
wget -O- https://www.netfilter.org/pub/libmnl/libmnl-1.0.5.tar.bz2 | tar -xj
fi
if [ ! -d "libnetfilter_queue-1.0.5" ]; then
wget -O- https://www.netfilter.org/pub/libnetfilter_queue/libnetfilter_queue-1.0.5.tar.bz2 | tar -xj
patch -p1 -d libnetfilter_queue-* -i $PATCH
fi
if [ ! -d "luajit2-*" ]; then
wget -qO- https://github.com/openresty/luajit2/archive/refs/tags/v2.1-20250826.tar.gz | tar -xz
fi
case "{{target_arch}}" in
*64*)
HOSTCC="cc"
;;
*)
HOSTCC="cc -m32"
esac
(
cd luajit2-*
make BUILDMODE=static XCFLAGS=-DLUAJIT_DISABLE_FFI \
HOST_CC="$HOSTCC" CROSS= CC="$CC" \
TARGET_AR="$AR rcus" TARGET_STRIP=$STRIP \
CFLAGS="-Os -flto=auto $CFLAGS" -j$(nproc)
make install PREFIX= DESTDIR=$NETFILTER_LIBS-{{target_arch}}
)
LJIT=1
LCFLAGS="-I${NETFILTER_LIBS-{{target_arch}}}/include/luajit-2.1"
LLIB="-L${NETFILTER_LIBS-{{target_arch}}}/lib -lluajit-2.1"
for i in libmnl libnfnetlink libnetfilter_queue ; do
(
cd $i-*
make clean
CFLAGS="-Os -flto=auto -Wno-implicit-function-declaration" \
./configure --prefix= --host={{target_arch}} --enable-static --disable-shared --disable-dependency-tracking
make -j$(nproc)
make install DESTDIR=$NETFILTER_LIBS-{{target_arch}}
)
sed -i "s|^prefix=.*|prefix=$NETFILTER_LIBS-{{target_arch}}|g" $NETFILTER_LIBS-{{target_arch}}/lib/pkgconfig/$i.pc
done
else
echo "Netfilter libs for {{target_arch}} already built"
fi
_instal_rust_target target:
#!/usr/bin/env bash
if ! rustup target list --installed | grep -q "{{target}}"; then
echo "Installing missing target: {{target}}"
rustup target add "{{target}}"
else
echo "Target already installed: {{target}}"
fi
prepare-android: _download_android_ndk
#!/usr/bin/env bash
cargo install cargo-ndk
build-android *args: prepare-android
#!/usr/bin/env bash
targets=("armv7-linux-androideabi" "aarch64-linux-android" "x86_64-linux-android")
for i in "${!targets[@]}"; do
t=${targets[$i]}
(
echo "Building target $t"
export CFLAGS="-I$NETFILTER_LIBS-$t/include -I$NETFILTER_LIBS-$t/include/luajit-2.1"
export LUAJIT="$NETFILTER_LIBS-$t/include/luajit-2.1"
export LDFLAGS="-L$NETFILTER_LIBS-$t/lib"
export CXXFLAGS="$CFLAGS"
export LJIT=1
export LCFLAGS="-I$NETFILTER_LIBS-$t/include -I$NETFILTER_LIBS-$t/include/luajit-2.1"
export LLIB="-L$NETFILTER_LIBS-$t/lib -lluajit-2.1"
just _build_netfilter_libs $t
just _instal_rust_target $t
NETFILTER_LIBS=$NETFILTER_LIBS-$t cargo ndk -t $t --platform $ANDROID_API build {{args}}
)
done

View File

@@ -0,0 +1,41 @@
--- a/src/extra/pktbuff.c
+++ b/src/extra/pktbuff.c
@@ -14,7 +14,7 @@
#include <string.h> /* for memcpy */
#include <stdbool.h>
-#include <netinet/if_ether.h>
+#include <linux/if_ether.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
--- a/src/nlmsg.c
+++ b/src/nlmsg.c
@@ -21,7 +21,7 @@
#include <linux/netfilter/nfnetlink_queue.h>
-#include <libnetfilter_queue/libnetfilter_queue.h>
+// #include <libnetfilter_queue/libnetfilter_queue.h>
#include "internal.h"
--- a/src/extra/tcp.c
+++ b/src/extra/tcp.c
@@ -139,12 +139,16 @@ void nfq_tcp_compute_checksum_ipv6(struc
* (union is compatible to any of its members)
* This means this part of the code is -fstrict-aliasing safe now.
*/
+#ifndef __ANDROID__
union tcp_word_hdr {
struct tcphdr hdr;
uint32_t words[5];
};
+#endif
+#ifndef tcp_flag_word
#define tcp_flag_word(tp) ( ((union tcp_word_hdr *)(tp))->words[3])
+#endif
/**
* nfq_pkt_snprintf_tcp_hdr - print tcp header into one buffer in a humnan

View File

@@ -0,0 +1,33 @@
#!/sbin/sh
#################
# Initialization
#################
umask 022
# echo before loading util_functions
ui_print() { echo "$1"; }
require_new_magisk() {
ui_print "*******************************"
ui_print " Please install Magisk v20.4+! "
ui_print "*******************************"
exit 1
}
#########################
# Load util_functions.sh
#########################
OUTFD=$2
ZIPFILE=$3
mount /data 2>/dev/null
[ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk
. /data/adb/magisk/util_functions.sh
[ $MAGISK_VER_CODE -lt 20400 ] && require_new_magisk
install_module
exit 0

View File

@@ -0,0 +1 @@
#MAGISK

44
src/customize.sh Normal file
View File

@@ -0,0 +1,44 @@
ui_print " _ _ "
ui_print " | | | | "
ui_print " ______ _ _ __ _ __ ___| |_| |_ "
ui_print " |_ / _' | '_ \| '__/ _ \ __| __|"
ui_print " / / (_| | |_) | | | __/ |_| |_ "
ui_print " /___\__,_| .__/|_| \\___|\__|\__|"
ui_print " | | "
ui_print " |_| "
ui_print "(!) To download app, use Telegram channel"
ui_print "Module by: egor-white, Cherret"
ui_print "App by: egor-white, Cherret"
ui_print "####################"
ui_print "Creating zaprett directory..."
mkdir /sdcard/zaprett; mkdir /sdcard/zaprett/lists; mkdir /sdcard/zaprett/bin; mkdir /sdcard/zaprett/strategies;
ui_print "Copying lists and binaries to /sdcard/zaprett..."
cp -r $MODPATH/zaprett/. /sdcard/zaprett/
ui_print "Copying files to /bin"
arch=$(uname -m)
case "$arch" in
"x86_64")
zaprett_bin="zaprett-x86_64"
;;
"armv7l"|"arm")
zaprett_bin="zaprett-armv7"
;;
"aarch64"|"armv8l")
zaprett_bin="zaprett-aarch64"
;;
*)
ui_print "Unknown arch: $arch"
abort
;;
esac
mv $MODPATH/system/bin/$zaprett_bin $MODPATH/system/bin/zaprett
rm $MODPATH/system/bin/zaprett-*
mkdir $MODPATH/tmp
ui_print "Cleaning temp files..."
rm -rf $MODPATH/zaprett
ui_print "Installation done. Join us in Telegram: https://t.me/zaprett_module"

9
src/service.sh Normal file
View File

@@ -0,0 +1,9 @@
#!/system/bin/sh
while [ -z "$(getprop sys.boot_completed)" ]; do sleep 2; done
if [ -f "/data/adb/modules/zaprett/autostart" ]; then
su -c "zaprett start"
while true; do
sleep 3600
su -c "zaprett restart"
done
fi

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

6
update-hosts.json Normal file
View File

@@ -0,0 +1,6 @@
{
"version": "6.5",
"versionCode": 65,
"zipUrl": "https://github.com/egor-white/zaprett/releases/download/6.5.0/zaprett-hosts.zip",
"changelog": "https://raw.githubusercontent.com/egor-white/zaprett/refs/heads/main/changelog.md"
}

6
update-tv.json Normal file
View File

@@ -0,0 +1,6 @@
{
"version": "6.4",
"versionCode": 100,
"zipUrl": "https://github.com/egor-white/zaprett/releases/download/6.4.0/zaprett.zip",
"changelog": "https://raw.githubusercontent.com/egor-white/zaprett/refs/heads/main/changelog.md"
}

View File

@@ -1,6 +1,6 @@
{
"version": "3.8",
"versionCode": 38,
"zipUrl": "https://github.com/egor-white/zaprett/releases/download/3.8.0/zaprett.zip",
"changelog": "https://raw.githubusercontent.com/egor-white/zaprett/refs/heads/main/changelog.md"
"version": "6.5",
"versionCode": 65,
"zipUrl": "https://github.com/egor-white/zaprett/releases/download/6.5.0/zaprett.zip",
"changelog": "https://raw.githubusercontent.com/egor-white/zaprett/refs/heads/main/changelog.md"
}

View File

@@ -1,6 +1,6 @@
{
"version": "3.8",
"versionCode": 389,
"zipUrl": "https://github.com/egor-white/zaprett/releases/download/3.8.0/zaprett-extended.zip",
"changelog": "https://raw.githubusercontent.com/egor-white/zaprett/refs/heads/main/changelog.md"
"version": "100",
"versionCode": 100,
"zipUrl": "https://github.com/egor-white/zaprett/releases/download/4.7.0/zaprett-hosts.zip",
"changelog": "https://raw.githubusercontent.com/egor-white/zaprett/refs/heads/main/changelog.md"
}

View File

@@ -1,6 +0,0 @@
{
"version": "3.8",
"versionCode": 38,
"zipUrl": "https://github.com/egor-white/zaprett/releases/download/3.8.0/zaprett-tv.zip",
"changelog": "https://raw.githubusercontent.com/egor-white/zaprett/refs/heads/main/changelog.md"
}