304 Commits
3.2.0 ... 6.0.0

Author SHA1 Message Date
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
CherretGit
c7fda1faba Update update_tv.json 2025-05-14 11:38:49 +07:00
CherretGit
f69ce002c3 Update update_extended.json 2025-05-14 11:38:40 +07:00
CherretGit
157d05d21e Update update.json 2025-05-14 11:38:07 +07:00
CherretGit
907f6db57f Update changelog.md 2025-05-14 11:38:03 +07:00
CherretGit
80941e4b8c Update update_extended.json 2025-05-14 11:10:56 +07:00
egor-white
c2d3ea25a0 Update update_tv.json 2025-05-12 20:22:04 +03:00
egor-white
6057c726d7 Update update_extended.json 2025-05-12 20:21:44 +03:00
egor-white
e44d04033e Update update.json 2025-05-12 20:21:29 +03:00
egor-white
4403b8d57a Update changelog.md 2025-05-12 20:21:10 +03:00
egor-white
e304e8c79b Update update_tv.json 2025-05-10 11:45:01 +03:00
egor-white
dee3311289 Update update_extended.json 2025-05-10 11:44:42 +03:00
egor-white
499b75f391 Update update.json 2025-05-10 11:44:25 +03:00
egor-white
2b4683f8f9 Update changelog.md 2025-05-10 11:44:04 +03:00
egor-white
2cf05e8600 Update update_tv.json 2025-05-07 23:15:08 +03:00
egor-white
4e631f638d Update update_extended.json 2025-05-07 23:14:49 +03:00
egor-white
e6755c0e68 Update changelog.md 2025-05-07 23:14:33 +03:00
egor-white
b34b223261 Update update.json 2025-05-07 23:13:47 +03:00
CherretGit
5c04b16408 Update README.md 2025-05-04 22:03:33 +07:00
CherretGit
9bd3a7e93d Update README.md 2025-05-04 20:57:34 +07:00
CherretGit
64646885d6 Update README.md 2025-05-04 17:43:17 +07:00
CherretGit
228871c7d3 Update update_tv.json 2025-05-02 20:27:42 +07:00
CherretGit
34d79a9f4b Update update_extended.json 2025-05-02 20:27:38 +07:00
CherretGit
c37cca684d Update update.json 2025-05-02 20:27:34 +07:00
CherretGit
7654294c18 Update changelog.md 2025-05-02 20:27:31 +07:00
egor-white
59bea9f644 Update update_extended.json 2025-04-20 23:23:10 +03:00
egor-white
8fce9f4a6d Update changelog.md 2025-04-20 23:22:47 +03:00
egor-white
5a0068fad6 Update update.json 2025-04-20 23:22:25 +03:00
egor-white
db83adb442 Create update_tv.json 2025-04-20 23:20:08 +03:00
egor-white
3bde37684a Update update_extended.json 2025-04-11 00:02:51 +03:00
egor-white
856711543b Update changelog.md 2025-04-11 00:02:24 +03:00
36 changed files with 2678 additions and 14 deletions

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

@@ -0,0 +1,169 @@
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 apt install build-essential pkg-config just unzip
- name: Build zaprett
run: just -f rust/justfile build-android --release
- name: Make build dirs
run: mkdir -p zaprett/system/bin zaprett-hosts/system/bin zaprett/system/etc/zaprett/lists out lists zapret-hosts/system/etc/zaprett/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/list-youtube.txt zaprett/system/etc/zaprett/lists/
cp lists/list-youtube.txt zaprett-hosts/system/etc/zaprett/lists/
cp lists/list-discord.txt zaprett/system/etc/zaprett/lists/
cp lists/list-discord.txt zaprett-hosts/system/etc/zaprett/lists/
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,156 @@
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 apt install build-essential pkg-config just unzip
- name: Build zaprett
run: just -f rust/justfile build-android --release
- name: Make build dirs
run: mkdir -p zaprett/system/bin zaprett-hosts/system/bin zaprett/system/etc/zaprett/lists out lists zapret-hosts/system/etc/zaprett/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/list-youtube.txt zaprett/system/etc/zaprett/lists/
cp lists/list-youtube.txt zaprett-hosts/system/etc/zaprett/lists/
cp lists/list-discord.txt zaprett/system/etc/zaprett/lists/
cp lists/list-discord.txt zaprett-hosts/system/etc/zaprett/lists/
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

3
.gitmodules vendored Normal file
View File

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

View File

@@ -1,17 +1,43 @@
# zaprett
![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)
* Termux или другой эмулятор терминала **И/ИЛИ** [ремейк приложения zaprett от cherret](https://github.com/CherretGit/zaprett-app) ("оригинал" устарел и не обновляется, вместо этого мы вдвоём занимаемся версией на Kotlin!)
На данный момент модуль умеет:
+ Включать, выключать и перезапускать nfqws
+ Работать с листами, айписетами, стратегиями
+ Предлагать обновления через Magisk/KSU/KSU Next/APatch
Планируемый функционал:
+ Автообновление модуля
## Какую версию модуля выбрать?
Модуль разрабатывается при поддержке **Telegram чата** [Usb.mineralka #нахуйРКН](https://t.me/mineral_usb)
В актуальных релизах есть 3 версии модуля, а именно:
- zaprett.zip
- zaprett-hosts.zip
- zaprett-tv.zip
Оригинальный автор - [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).
Основные их отличия представленны в таблице ниже.
Для устройств на Android TV **рекомендуется использовать именно TV версию** из-за некоторых особенностей работы этой ОС.
|Версия|Списки|/etc/hosts|
|------|------|----------|
|zaprett|list-youtube.txt, list-discord.txt|:x: Нет|
|zaprett-tv|list-youtube.txt|:x: Нет|
|zaprett-hosts|list-youtube.txt,list-discord.txt|:white_check_mark: Есть|
## Что такое /etc/hosts?
Говоря грубо, это файл, который влияет на работу нейросетей и других недоступных сервисов, перенаправляя ваш траффик на сторонние сервера.
Если вы используете модули, которые подменяют этот файл (например, всевозможные блокировщики рекламы и разблокировщики нейросетей), выбирайте версию <big>**без hosts**</big>, иначе модули будут конфликтовать друг с другом.
⚠️ Сервера, используемые в качестве прокси и указанные в файле hosts нам неподконтрольны, мы не несём за них отвественность, используйте с осторожностью

View File

@@ -1 +1,3 @@
Исправлены ошибки, связанные с SSL
Обновление бинарников zapret до версии 72.2
Обновление hosts файла в zaprett hosts

246
hosts/hosts Normal file
View File

@@ -0,0 +1,246 @@
### dns.malw.link: hosts file
# Последнее обновление: 17 октября 2025
# Дополнение к zapret:
157.240.245.174 instagram.com
157.240.245.174 www.instagram.com
157.240.245.174 b.i.instagram.com
157.240.245.174 z-p42-chat-e2ee-ig.facebook.com
157.240.245.174 help.instagram.com
3.66.189.153 protonmail.com
3.66.189.153 mail.proton.me
64.233.164.198 yt3.ggpht.com
64.233.164.132 yt4.ggpht.com
52.223.13.41 tracker.openbittorrent.com
130.255.77.28 ntc.party
172.64.33.155 rutor.info
173.245.59.155 rutor.is
185.87.51.182 controlplane.tailscale.com
# ChatGPT, OpenAI:
185.246.223.127 chatgpt.com
185.246.223.127 ab.chatgpt.com
185.246.223.127 auth.openai.com
185.246.223.127 auth0.openai.com
185.246.223.127 platform.openai.com
185.246.223.127 cdn.oaistatic.com
185.246.223.127 files.oaiusercontent.com
185.246.223.127 cdn.auth0.com
185.246.223.127 tcr9i.chat.openai.com
185.246.223.127 webrtc.chatgpt.com
185.246.223.127 android.chat.openai.com
185.246.223.127 api.openai.com
45.95.233.23 operator.chatgpt.com
185.246.223.127 sora.chatgpt.com
185.246.223.127 sora.com
185.246.223.127 videos.openai.com
# Сервисы Google:
185.246.223.127 gemini.google.com
134.0.118.88 aistudio.google.com
134.0.118.88 generativelanguage.googleapis.com
185.246.223.127 aitestkitchen.withgoogle.com
134.0.118.88 aisandbox-pa.googleapis.com
134.0.118.88 webchannel-alkalimakersuite-pa.clients6.google.com
134.0.118.88 alkalimakersuite-pa.clients6.google.com
134.0.118.88 assistant-s3-pa.googleapis.com
134.0.118.88 proactivebackend-pa.googleapis.com
185.246.223.127 o.pki.goog
185.246.223.127 labs.google
185.246.223.127 notebooklm.google
185.246.223.127 notebooklm.google.com
185.246.223.127 jules.google.com
185.246.223.127 stitch.withgoogle.com
# Microsoft Copilot, Microsoft Rewards, Xbox, Xbox Cloud Gaming:
185.246.223.127 copilot.microsoft.com
185.246.223.127 sydney.bing.com
185.246.223.127 edgeservices.bing.com
45.95.233.23 rewards.bing.com
185.246.223.127 xsts.auth.xboxlive.com
185.246.223.127 xgpuwebf2p.gssv-play-prod.xboxlive.com
185.246.223.127 xgpuweb.gssv-play-prod.xboxlive.com
# Spotify:
185.246.223.127 api.spotify.com
185.246.223.127 xpui.app.spotify.com
185.246.223.127 appresolve.spotify.com
185.246.223.127 login5.spotify.com
185.246.223.127 login.app.spotify.com
185.246.223.127 encore.scdn.co
185.246.223.127 ap-gew1.spotify.com
185.246.223.127 gew1-spclient.spotify.com
185.246.223.127 spclient.wg.spotify.com
185.246.223.127 api-partner.spotify.com
185.246.223.127 aet.spotify.com
185.246.223.127 www.spotify.com
185.246.223.127 accounts.spotify.com
45.95.233.23 open.spotify.com
# GitHub Copilot:
50.7.87.84 api.github.com
185.246.223.127 api.individual.githubcopilot.com
185.246.223.127 proxy.individual.githubcopilot.com
# JetBrains:
50.7.85.221 datalore.jetbrains.com
107.150.34.100 plugins.jetbrains.com
185.246.223.127 download.jetbrains.com
185.246.223.127 api.jetbrains.ai
185.246.223.127 account.jetbrains.com
# ElevenLabs:
185.246.223.127 elevenlabs.io
185.246.223.127 api.us.elevenlabs.io
185.246.223.127 elevenreader.io
185.246.223.127 api.elevenlabs.io
185.246.223.127 help.elevenlabs.io
# Truth Social
204.12.192.219 truthsocial.com
204.12.192.219 static-assets-1.truthsocial.com
# Grok
185.246.223.127 grok.com
185.246.223.127 accounts.x.ai
185.246.223.127 assets.grok.com
# Tidal
185.246.223.127 api.tidal.com
185.246.223.127 listen.tidal.com
185.246.223.127 login.tidal.com
185.246.223.127 auth.tidal.com
185.246.223.127 link.tidal.com
185.246.223.127 dd.tidal.com
185.246.223.127 resources.tidal.com
45.95.233.23 images.tidal.com
185.246.223.127 fsu.fa.tidal.com
185.246.223.127 geolocation.onetrust.com
185.246.223.127 api.squareup.com
185.246.223.127 api-global.squareup.com
# Supercell
185.246.223.127 cdn.id.supercell.com
185.246.223.127 security.id.supercell.com
45.95.233.23 accounts.supercell.com
185.246.223.127 game-assets.clashroyaleapp.com
185.246.223.127 game-assets.clashofclans.com
185.246.223.127 clashofclans.inbox.supercell.com
185.246.223.127 game-assets.brawlstarsgame.com
185.246.223.127 store.supercell.com
45.95.233.23 game.clashroyaleapp.com
64.188.98.242 gamea.clashofclans.com
185.246.223.127 game.brawlstarsgame.com
108.61.167.26 game.squadbustersgame.com
45.95.233.23 game.mocogame.com
# DeepL
185.246.223.127 deepl.com
185.246.223.127 www.deepl.com
185.246.223.127 www2.deepl.com
185.246.223.127 login-wall.deepl.com
185.246.223.127 w.deepl.com
185.246.223.127 s.deepl.com
185.246.223.127 dict.deepl.com
185.246.223.127 ita-free.www.deepl.com
185.246.223.127 write-free.www.deepl.com
185.246.223.127 experimentation.deepl.com
185.246.223.127 experimentation-grpc.deepl.com
185.246.223.127 ita-free.app.deepl.com
185.246.223.127 shield.deepl.com
185.246.223.127 ott.deepl.com
185.246.223.127 api-free.deepl.com
185.246.223.127 backend.deepl.com
185.246.223.127 clearance.deepl.com
185.246.223.127 errortracking.deepl.com
185.246.223.127 auth.deepl.com
185.246.223.127 oneshot-free.www.deepl.com
# Deezer
185.246.223.127 deezer.com
185.246.223.127 www.deezer.com
185.246.223.127 dzcdn.net
185.246.223.127 payment.deezer.com
# Weather.com
185.246.223.127 weather.com
185.246.223.127 upsx.weather.com
# Guilded
204.12.192.219 guilded.gg
204.12.192.219 www.guilded.gg
# Fitbit
185.246.223.127 api.fitbit.com
185.246.223.127 fitbit-pa.googleapis.com
185.246.223.127 fitbitvestibuleshim-pa.googleapis.com
185.246.223.127 fitbit.google.com
# Claude
185.246.223.127 claude.ai
185.246.223.127 console.anthropic.com
185.246.223.127 auth.anthropic.com
185.246.223.127 api.anthropic.com
#4PDA
185.246.223.127 4pda.to
185.246.223.127 app.4pda.to
185.246.223.127 s.4pda.to
185.246.223.127 appbk.4pda.to
# Trae.ai
185.246.223.127 trae-api-sg.mchost.guru
185.246.223.127 api.trae.ai
185.246.223.127 api-sg-central.trae.ai
185.246.223.127 api16-normal-alisg.mchost.guru
# Другое:
185.246.223.127 www.notion.so
50.7.85.222 www.canva.com
185.246.223.127 www.intel.com
185.246.223.127 www.dell.com
50.7.85.219 www.tiktok.com # Только на сайте. Приложение определяет регион по оператору, а не по IP. Поэтому есть моды.
142.54.189.106 web.archive.org # Блокирует от российских IP некоторые сайты
185.246.223.127 developer.nvidia.com
107.150.34.99 builds.parsec.app
185.246.223.127 tria.ge
185.246.223.127 api.imgur.com
45.95.233.23 www.dyson.com
45.95.233.23 www.dyson.fr
45.95.233.23 usher.ttvnw.net
64.188.98.242 api.manus.im
185.246.223.127 profile.broadcom.com
45.95.233.23 test.dns.malw.link
45.95.233.23 eu.posthog.com
185.246.223.127 www.qwant.com
185.246.223.127 guidedhacking.com
# Блокировка реально плохих сайтов
# Скримеры:
0.0.0.0 only-fans.uk
0.0.0.0 only-fans.me
0.0.0.0 onlyfans.wtf
# IP Logger'ы:
0.0.0.0 iplogger.org
0.0.0.0 wl.gl
0.0.0.0 ed.tc
0.0.0.0 bc.ax
0.0.0.0 maper.info
0.0.0.0 2no.co
0.0.0.0 yip.su
0.0.0.0 iplis.ru
0.0.0.0 ezstat.ru
0.0.0.0 iplog.co
0.0.0.0 grabify.org
# Мусор/реклама:
0.0.0.0 log16-platform-ycru.tiktokv.com
0.0.0.0 adfox.yandex.ru
0.0.0.0 adfstat.yandex.ru
0.0.0.0 ads-api.tiktok.com
0.0.0.0 ads-api.twitter.com
0.0.0.0 ads-dev.pinterest.com
0.0.0.0 ads-sg.tiktok.com
0.0.0.0 an.yandex.ru
0.0.0.0 appmetrica.yandex.ru
0.0.0.0 mc.yandex.ru
0.0.0.0 amc.yandex.ru
### dns.malw.link: end hosts file

1126
rust/Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

32
rust/Cargo.toml Normal file
View File

@@ -0,0 +1,32 @@
[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

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,23 @@
[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" }
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,20 @@
use crate::MODULE_PATH;
use tokio::fs;
use tokio::fs::File;
pub async fn set_autostart(autostart: bool) -> Result<(), anyhow::Error> {
let autostart_path = MODULE_PATH.join("autostart");
if autostart {
File::create(autostart_path).await?;
} else {
fs::remove_file(autostart_path).await?;
}
Ok(())
}
pub fn get_autostart() {
let file = MODULE_PATH.join("autostart");
println!("{}", file.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,68 @@
use crate::service::{restart_service, service_status, start_service, stop_service};
use crate::{bin_version, module_version};
use clap::Subcommand;
use log::error;
use crate::autostart::{get_autostart, set_autostart};
#[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 {
/// Whether to enable (true) or disable (false) autostart
#[arg(value_parser = clap::value_parser!(bool))]
autostart: bool,
},
/// Show whether autostart is enabled
GetAutostart,
/// Show the module version
ModuleVersion,
/// Show the nfqws binary version
BinaryVersion,
}
impl Command {
pub async fn exec(&self) -> anyhow::Result<()> {
match self {
Command::Start => return start_service().await,
Command::Stop => {
let _ = stop_service().await;
}
Command::Restart => return restart_service().await,
Command::Status => {
println!(
"zaprett is {}",
if service_status().await? {
"working"
} else {
"stopped"
}
);
}
Command::SetAutostart { autostart } => {
if let Err(err) = set_autostart(*autostart).await {
error!("Failed to set auto start: {err}")
}
}
Command::GetAutostart => get_autostart(),
Command::ModuleVersion => println!("{}", module_version().await?),
Command::BinaryVersion => println!("{}", bin_version()),
}
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,125 @@
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 sysctl::{Ctl, CtlValue, Sysctl};
use sysinfo::{Pid as SysPid, System};
use tokio::fs;
use tokio::fs::File;
use tokio::io::AsyncReadExt;
use std::path::Path;
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 mut config_contents = String::new();
File::open(ZAPRETT_DIR_PATH.join("config.json"))
.await
.expect("cannot open config.json")
.read_to_string(&mut config_contents)
.await?;
let config: Config = serde_json::from_str(&config_contents).expect("invalid json");
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? {
bail!("zaprett service already stopped")
}
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)
}

109
rust/justfile Normal file
View File

@@ -0,0 +1,109 @@
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 "$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
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"
export LDFLAGS="-L$NETFILTER_LIBS-$t/lib"
export CXXFLAGS="$CFLAGS"
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

67
src/customize.sh Normal file
View File

@@ -0,0 +1,67 @@
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 "Unpacking archive..."
unzip -o "$ZIPFILE" -x 'META-INF/*' -d $MODPATH >&2
ui_print "Creating zaprett directory..."
mkdir /sdcard/zaprett; mkdir /sdcard/zaprett/lists; mkdir /sdcard/zaprett/bin; mkdir /sdcard/zaprett/strategies;
ui_print "Filling configuration file if not exist..."
if [ ! -f "/sdcard/zaprett/config.json" ]; then
cat > /sdcard/zaprett/config.json << EOL
{
"active_lists": ["/sdcard/zaprett/lists/include/list-youtube.txt", "/sdcard/zaprett/lists/include/list-discord.txt"],
"active_ipsets": [],
"active_exclude_lists": [],
"active_exclude_ipsets": [],
"list_type": "whitelist",
"strategy": "",
"app_list": "whitelist",
"whitelist": [],
"blacklist": []
}
EOL
fi
ui_print "Copying lists and binaries to /sdcard/zaprett..."
cp -r $MODPATH/system/etc/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 "Setting permissions..."
chmod 777 /sdcard/zaprett; chmod 777 $MODPATH/service.sh
ui_print "Cleaning temp files..."
rm -rf $MODPATH/system/etc/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

6
update-hosts.json Normal file
View File

@@ -0,0 +1,6 @@
{
"version": "5.2",
"versionCode": 52,
"zipUrl": "https://github.com/egor-white/zaprett/releases/download/5.2.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": "5.2",
"versionCode": 52,
"zipUrl": "https://github.com/egor-white/zaprett/releases/download/5.2.0/zaprett-tv.zip",
"changelog": "https://raw.githubusercontent.com/egor-white/zaprett/refs/heads/main/changelog.md"
}

View File

@@ -1,6 +1,6 @@
{
"version": "3.1",
"versionCode": 31,
"zipUrl": "https://github.com/egor-white/zaprett/releases/download/3.1.0/zaprett.zip",
"changelog": "https://raw.githubusercontent.com/egor-white/zaprett/refs/heads/main/changelog.md"
"version": "5.2",
"versionCode": 52,
"zipUrl": "https://github.com/egor-white/zaprett/releases/download/5.2.0/zaprett.zip",
"changelog": "https://raw.githubusercontent.com/egor-white/zaprett/refs/heads/main/changelog.md"
}

View File

@@ -1,6 +1,6 @@
{
"version": "3.1",
"versionCode": 31,
"zipUrl": "https://github.com/egor-white/zaprett/releases/download/3.1.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"
}