From 0d04402bdffe2885df85755ea5de17cc53b7e3b2 Mon Sep 17 00:00:00 2001 From: gnadgnaoh <117189041+gnadgnaoh@users.noreply.github.com> Date: Wed, 10 Jun 2026 20:14:47 +0700 Subject: [PATCH 1/8] Update action.yml --- .github/actions/preparing/action.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/actions/preparing/action.yml b/.github/actions/preparing/action.yml index 73a4997..5a3e8e3 100644 --- a/.github/actions/preparing/action.yml +++ b/.github/actions/preparing/action.yml @@ -7,6 +7,17 @@ runs: with: distribution: 'zulu' java-version: '21' + - name: Install Bouncy Castle provider for BKS keystore + shell: bash + run: | + sudo apt-get install -y -q libbcprov-java + BCPROV=$(find /usr/share/java -name "bcprov-*.jar" | grep -v debian | head -1) + sudo cp "$BCPROV" "$JAVA_HOME/lib/bcprov.jar" + LAST_PROV=$(grep "^security.provider\." "$JAVA_HOME/conf/security/java.security" \ + | grep -oP '(?<=security\.provider\.)\d+' | sort -n | tail -1) + echo "security.provider.$((LAST_PROV+1))=org.bouncycastle.jce.provider.BouncyCastleProvider" \ + | sudo tee -a "$JAVA_HOME/conf/security/java.security" + echo "[+] Bouncy Castle registered as provider #$((LAST_PROV+1))" - name: Start FlareSolverr shell: bash run: | From adcebc2470328e68d3f703ee5543001c23b774bb Mon Sep 17 00:00:00 2001 From: gnadgnaoh <117189041+gnadgnaoh@users.noreply.github.com> Date: Wed, 10 Jun 2026 20:15:15 +0700 Subject: [PATCH 2/8] Add files via upload --- src/fiorenmas.ks | Bin 2558 -> 2058 bytes src/fiorenmas.ks.bks | Bin 0 -> 2058 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/fiorenmas.ks.bks diff --git a/src/fiorenmas.ks b/src/fiorenmas.ks index e02359acebca6f2e58cd529630f39d7c83e8c0d1..d40b18a5b74b30f333a9a173f4b479982e71ee29 100644 GIT binary patch literal 2058 zcmZ`%X*|>m8~qPstC=AtV=2lKGX^u3j2dLfHWDF?UDmMK@bfWcsuFqQ(`3K-?zf&asc28sQC0K^8cMuWJ4lb=qpM1w#;>UzHu*)s3%g)owh z*AfA_O&gKvB@YUZ^$RRUg`Y{LRP>8S62Dk57Pky<9e(<*66i0T6{(7^?R3)V(X1^z zmP{4nP5F4L9-)g?MYIP}wbOjjo(t#g5JJmn~{q_WBP$yFud)(|3Y}q;V^e$KF7sqM);PtFU`zGaPb>sZud{W^{_ut7lcp`wUlSyATxG^5^OU9~_{VyCur@OdKD*V{Da1|#o& z`QW+ql$gv)(`OK!Q3M-ER9@J@%yLBom0w14cYPCVuJ*yicSYA!wDdLrfVcl!ewfzT z%Q^iciyo&G^`?IO-`r?{phLWRrx9daSnF z+S@H!sI+TCYgnDR-kZ;7*QF=+CZ@>mX|-AK^Dg{Cb>-c&g^b=DjH|;qUuBHH&%HB* zlz5btd%FGU>iECr{t>yw0uO?gB5FbHc`C4Mx?2ahW1?h0 z^j(NOXLquntOeCzp+q~aG688+uN@q7Ea4q%+JwC!W4=@;Uh-~idY6ePSHnXh9V_3z zf9@tUidO48racSJfnVH-S~xf_NVqPeb2Ur=j(#ce&Exe0i1e)~Qf{`d-1E>SX8WXK zqSowIL=Ox}lnkA|PE;e0UEb?U*IU^MU%f1`xMyzD26AENqo1!}-+&{_x^hsHbG$gvY(AR8zg5&0~TI5r4By`Wq~5AZQw+1Y02!{nmLpVq2sM zS(%f6*tp?FUy$0)EGjGTsXyS3BO$7uXj?V#4FSX4aFRTlY9bu$bG3Ngd(>yHkV7fb zK__ePP6qrXYim9igO>o?{|g`bBU|bP=qp%h zl)%oo1Q&I~%BYCd+L-_BbjHmm6^a#l2wD1`(w=g;x|&ZVS>cDB^k>W{7(Of^ z8p`j&QlsO6I2&-7aX*tXt!20V@{ptwJ+o}|B*duH#}8!D_%F0ahvR_~C=Bn>CW+Fu zy*M9&C*aG%x%Q+9#z;dwuAts1A zb?@l*^#*c1awHt)`a4W`MeC!4J^Fz(z^A-Ejbag88!aK=(pXdhrZO*^ANVXwO;V8M=}~zu7_eBHqRs2JpW>n2)DH ztVeA9lI$G$v&8aGznC3SVy4}+%_B@tS|vTW#4ZCFY=W%xbX0sZc?6g>wk0tPYYivk zR}xM&QmJvqS>@YRJ#d>$4ay}}L4_xmf$kW@OBY;mx1oodQJf7E&#|1vSPH1iZ>Fd; zyH!jz$;z?*A(T?14VwfElJ`q2Rogw^9>Z1D>xw))cb2Q3(mNQ)T^%kbCY9`sXnW_n{pI&75fRxxwQUn zDLZvCXPuUSTtPl>5phY`QP$h;AKqHktFrKRf7+$_aJLb#?P}Me*V-I@X4_7;ncMZp i>ESr8C{B#_9Kd9AcSNX)T-nR4PB|K?4=mmEFZmBo!n9EU literal 2558 zcma)8X*d*$8XmJ6dt*?MY-P{bGO`VhVHi6hVVH(yn6YGNvNR@J939ljWEVNsERm=j zQbe+ZY$Zz~`=lc#%k4h*KAn4i-TUKvzUO=2?|uJ$@AIKpa4wJsgkr%!z(RUlAN1jr+U5`gml%Ml2N08q!Ea6+OL z4+#Y3Q2~n-o+^WGXQevVc@^k&3iQ4Pv%mw|!(^1U`>5!e#h24!ElhG#Iv<^yQ{%-kjCryC+cWdPcj!z2eNa%&P^f zWGww&87nVv#tJ(%E~U;Y=T_A+u^ETN7Kx%)+HR&LeAsUkK01ae8e39F;o~_*G%a$@ zI?MJ1^L*Rg%UC<6mpGqz$`B&g!Rh#0yE1bdnaHMyL8a+A-rs89iGz*j&C-vQ$g6X) zYJrYzef$S^>nXe*Ew#xaNR6&m%dk{tutNOOjOyM<@ z0qh#^`GLp)=9GyD>#9P-a|un}V#!R!3qADy2#%z$e6)@xjfAbeI+&G}!zl(w!objw2LX zS-9tDOb!u3@-p2otb7hAjgV->c|u|0iFSQCW59dd%GsZY6FK)1RS?9$xQPiKam^ekwpce3or)6QMr3zuG5b5AN2 zh?TfnV83F4AL09a>Dz@q=x0AwVbe;nu3>iSK4nc7H22gHw!=F+=-iff=!8a9YTcug zkn-)p;Ko5kaTj!!>$Lw=amD!j=fo<(ZD0HsDd7je8&M5H+w?bG2www@mX$eH!h`EQ zxKton0V|(|{QZ=UVH7Q7UYoY^Bs^}AAO!6(j#w;fI7OI?c<;}UdV3M*(r=H|$*${L zQ}S!~pO(8+UHfdr=DDdy!>%yjay==AK4p@fZ?$|i#_~qNE4tfbnGz%W z$S!yhJ@=dmC>_*N(W<{mA*5ww3<&Wjhy6kfu106o1u3%qu=# ze7DvW^He?CO;|cMfM~4qt8J-E*TaqY)^V{Wihp1UC&pw}oIgQ@E>h=X)e*Tc#TK)% z4v5Ls_fgQRXjT)sV8;)gZtCqf8MZA`n+xok+$B=GwSZAsv~-m;hDc-QUkXvmowuOQ0~P5 zpFGkyVBnJWs|PJRv(1GQV8nWTr>Mv*0G#k?dFI13V%X)?^s%T%&V|*9HG0eEINrTv z=GtK|PM>1*fU2_!$eko{azj!P`V20uRsiUF;5+6-gj?qU2d5MvB(MG2NH=iXl0S^e zSTrk*?&;OUqGW%@B^;@Vltuvj0c1chAPhhP&;V3`FW}ODu83(O!3Y;Jl_aC7cN(pW z($m(~*VofSu|R`AePGZ+7UO3Q@_aZ&zH}j3Ny4@jpTz$ax4R(N_N}wy z#K*H+7W(%5l#K)h|~`i{9WYG~9% z@tbKj!aezwjL0e8>kU@gYQ(Sf0``;l6K4uq8p^}>H$RRqTW=H|P{q#~nLQO4nxnql zuc+e`+V9dw}k&cfMQ7FWw>C@)?XELI-VaSzuRe~}>NXRd?W=H`ZTnKEja zoXs2~3O)K^yz)U;InKC%d2xofHfLL>TgTR@d=K4I?@RqOJvd_+K;{ z{Nso~kNMa8;zZbpuOBhxdgh9=nb8oD%3!%ut@DZ8Bj|^|I^OY&zQu`0H`xI*o?eJI zgoSk22bcownvzKgrnogjsx{w!YH(}ne!H$4Uu?z~g}?G1F1=>76Slv&QPz|zmUyBz z?OxQ`v+!Zx<<#gHR2!$&hm~uR6lXE%XZg|~#K3|aoigqdG5hPx6jyg$`n?*(I&EtQ zbjFtq37SH)2D|$k(ckIzlMg1jR0oLG#-n_N|K6yx6T}K)psN?;k7^e;>$XcbrAy))Wg0VUuzj_rUts3|(6OvDkhCCqr`IJh zU^7EPNz>D%z$I&a^sT)4d_81NhaG8FTu0+1e#ZQm1IQ=NW6s_obE&bvm0+}JwO0kK zeCH^tJhzCyWN$fNHgO`o;d}FWRbev97Nv<2{P`0Bc_09=Ot>_M(=G3DJ&bt>O*O5R t=Wu3gFe|?h8;rK?#`U9Tz(|d5i}OC~$xU0H*g#C@48Oid&D=jv_#gKTg>C=< diff --git a/src/fiorenmas.ks.bks b/src/fiorenmas.ks.bks new file mode 100644 index 0000000000000000000000000000000000000000..d40b18a5b74b30f333a9a173f4b479982e71ee29 GIT binary patch literal 2058 zcmZ`%X*|>m8~qPstC=AtV=2lKGX^u3j2dLfHWDF?UDmMK@bfWcsuFqQ(`3K-?zf&asc28sQC0K^8cMuWJ4lb=qpM1w#;>UzHu*)s3%g)owh z*AfA_O&gKvB@YUZ^$RRUg`Y{LRP>8S62Dk57Pky<9e(<*66i0T6{(7^?R3)V(X1^z zmP{4nP5F4L9-)g?MYIP}wbOjjo(t#g5JJmn~{q_WBP$yFud)(|3Y}q;V^e$KF7sqM);PtFU`zGaPb>sZud{W^{_ut7lcp`wUlSyATxG^5^OU9~_{VyCur@OdKD*V{Da1|#o& z`QW+ql$gv)(`OK!Q3M-ER9@J@%yLBom0w14cYPCVuJ*yicSYA!wDdLrfVcl!ewfzT z%Q^iciyo&G^`?IO-`r?{phLWRrx9daSnF z+S@H!sI+TCYgnDR-kZ;7*QF=+CZ@>mX|-AK^Dg{Cb>-c&g^b=DjH|;qUuBHH&%HB* zlz5btd%FGU>iECr{t>yw0uO?gB5FbHc`C4Mx?2ahW1?h0 z^j(NOXLquntOeCzp+q~aG688+uN@q7Ea4q%+JwC!W4=@;Uh-~idY6ePSHnXh9V_3z zf9@tUidO48racSJfnVH-S~xf_NVqPeb2Ur=j(#ce&Exe0i1e)~Qf{`d-1E>SX8WXK zqSowIL=Ox}lnkA|PE;e0UEb?U*IU^MU%f1`xMyzD26AENqo1!}-+&{_x^hsHbG$gvY(AR8zg5&0~TI5r4By`Wq~5AZQw+1Y02!{nmLpVq2sM zS(%f6*tp?FUy$0)EGjGTsXyS3BO$7uXj?V#4FSX4aFRTlY9bu$bG3Ngd(>yHkV7fb zK__ePP6qrXYim9igO>o?{|g`bBU|bP=qp%h zl)%oo1Q&I~%BYCd+L-_BbjHmm6^a#l2wD1`(w=g;x|&ZVS>cDB^k>W{7(Of^ z8p`j&QlsO6I2&-7aX*tXt!20V@{ptwJ+o}|B*duH#}8!D_%F0ahvR_~C=Bn>CW+Fu zy*M9&C*aG%x%Q+9#z;dwuAts1A zb?@l*^#*c1awHt)`a4W`MeC!4J^Fz(z^A-Ejbag88!aK=(pXdhrZO*^ANVXwO;V8M=}~zu7_eBHqRs2JpW>n2)DH ztVeA9lI$G$v&8aGznC3SVy4}+%_B@tS|vTW#4ZCFY=W%xbX0sZc?6g>wk0tPYYivk zR}xM&QmJvqS>@YRJ#d>$4ay}}L4_xmf$kW@OBY;mx1oodQJf7E&#|1vSPH1iZ>Fd; zyH!jz$;z?*A(T?14VwfElJ`q2Rogw^9>Z1D>xw))cb2Q3(mNQ)T^%kbCY9`sXnW_n{pI&75fRxxwQUn zDLZvCXPuUSTtPl>5phY`QP$h;AKqHktFrKRf7+$_aJLb#?P}Me*V-I@X4_7;ncMZp i>ESr8C{B#_9Kd9AcSNX)T-nR4PB|K?4=mmEFZmBo!n9EU literal 0 HcmV?d00001 From fa038336d976af6b9149ab5d273ffd7a93fc1537 Mon Sep 17 00:00:00 2001 From: gnadgnaoh <117189041+gnadgnaoh@users.noreply.github.com> Date: Wed, 10 Jun 2026 20:15:59 +0700 Subject: [PATCH 3/8] Update utils.sh --- src/build/utils.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/build/utils.sh b/src/build/utils.sh index cf401d6..e03d01b 100644 --- a/src/build/utils.sh +++ b/src/build/utils.sh @@ -694,7 +694,7 @@ patch() { fi } -lspatch() { +npatch() { green_log "[+] Patching $1:" if [ -f "./download/$1.apk" ]; then local module @@ -708,8 +708,8 @@ lspatch() { red_log "[-] Module not found: $2" return 1 fi - java -jar lspatch.jar ./download/$1.apk -k ./src/fiorenmas.ks fiorenmas fiorenmas fiorenmas -m "$module" -o ./release/ - mv ./release/$1-*-lspatched.apk ./release/$1-$3-lspatched.apk + java -jar npatch.jar ./download/$1.apk -k ./src/fiorenmas.ks fiorenmas fiorenmas fiorenmas -m "$module" -o ./release/ + mv ./release/$1-*-npatched.apk ./release/$1-$3-npatched.apk unset version unset lock_version else From f325e8e3b6ececa0b2021f4c3a350ddb79966a80 Mon Sep 17 00:00:00 2001 From: gnadgnaoh <117189041+gnadgnaoh@users.noreply.github.com> Date: Wed, 10 Jun 2026 20:17:30 +0700 Subject: [PATCH 4/8] Update Xposed.sh --- src/build/Xposed.sh | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/src/build/Xposed.sh b/src/build/Xposed.sh index 595e208..34db999 100644 --- a/src/build/Xposed.sh +++ b/src/build/Xposed.sh @@ -2,38 +2,42 @@ # Xposed build source ./src/build/utils.sh -LSPatch_dl(){ - dl_gh "LSPatch" "JingMatrix" "latest" +NPatch_dl(){ + dl_gh "NPatch" "7723mod" "latest" + ln -sf jar-v*.jar npatch.jar } -1() { + +build_1() { # Patch Revenge: dl_gh "revenge-xposed" "revenge-mod" "latest" - LSPatch_dl + NPatch_dl get_apk "com.discord" "discord" "bundle" - lspatch "discord" "app-release" "revenge" + npatch "discord" "app-release" "revenge" } -2() { - LSPatch_dl - dl_gh "NexAlloy" "gnadgnaoh" "v2.0" + +build_2() { + NPatch_dl + dl_gh "NexAlloy" "gnadgnaoh" "v3.0" # Patch Facebook: version="564.0.0.48.74" get_apk "com.facebook.katana" "facebook-arm64-v8a" "bundle" "arm64-v8a" " nodpi" "Android 11+" - lspatch "facebook-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" + npatch "facebook-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" # Patch Messenger: get_apk "com.facebook.orca" "messenger-arm64-v8a" "apk" "arm64-v8a" "nodpi" "Android 9.0+" - lspatch "messenger-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" + npatch "messenger-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" # Patch Instagram: - get_apk "com.instagram.android" "instagram-arm64-v8a" "bundle" "arm64-v8a" "120-640dpi" "Android 9.0+" - lspatch "instagram-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" + get_apk "com.instagram.android" "instagram-arm64-v8a" "bundle" "arm64-v8a" "120-640dpi" "Android 9.0+" + npatch "instagram-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" # Patch Thread: - get_apk "com.instagram.barcelona" "threads-arm64-v8a" "bundle" "arm64-v8a" "320-480dpi" "Android 9.0+" - lspatch "threads-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" + get_apk "com.instagram.barcelona" "threads-arm64-v8a" "bundle" "arm64-v8a" "320-480dpi" "Android 9.0+" + npatch "threads-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" } + case "$1" in 1) - 1 + build_1 ;; 2) - 2 + build_2 ;; esac From 64594e677679a70dafeddd18c2ce45ccf6ae4a33 Mon Sep 17 00:00:00 2001 From: gnadgnaoh <117189041+gnadgnaoh@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:28:55 +0700 Subject: [PATCH 5/8] Update patch comments and add options for apps --- src/build/Xposed.sh | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/build/Xposed.sh b/src/build/Xposed.sh index 34db999..ca907c9 100644 --- a/src/build/Xposed.sh +++ b/src/build/Xposed.sh @@ -18,19 +18,27 @@ build_1() { build_2() { NPatch_dl dl_gh "NexAlloy" "gnadgnaoh" "v3.0" - # Patch Facebook: + # Patch Meta: + # --injectdex : Meta app uses isolated render/service processes; injecting the + # loader dex directly ensures the hook fires in all of them. + # --sigbypasslv 3 : Level 3 (Extreme) replaces AppComponentFactory so the OS + # reports the original signature even to isolated processes. version="564.0.0.48.74" get_apk "com.facebook.katana" "facebook-arm64-v8a" "bundle" "arm64-v8a" " nodpi" "Android 11+" - npatch "facebook-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" + npatch "facebook-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" \ + --injectdex --sigbypasslv 3 # Patch Messenger: get_apk "com.facebook.orca" "messenger-arm64-v8a" "apk" "arm64-v8a" "nodpi" "Android 9.0+" - npatch "messenger-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" + npatch "messenger-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" \ + --injectdex --sigbypasslv 3 # Patch Instagram: get_apk "com.instagram.android" "instagram-arm64-v8a" "bundle" "arm64-v8a" "120-640dpi" "Android 9.0+" - npatch "instagram-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" + npatch "instagram-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" \ + --injectdex --sigbypasslv 3 # Patch Thread: get_apk "com.instagram.barcelona" "threads-arm64-v8a" "bundle" "arm64-v8a" "320-480dpi" "Android 9.0+" - npatch "threads-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" + npatch "threads-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" \ + --injectdex --sigbypasslv 3 } case "$1" in From cb24cd06925e655d8c2c3a9ece8454536f3b0a10 Mon Sep 17 00:00:00 2001 From: gnadgnaoh <117189041+gnadgnaoh@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:32:34 +0700 Subject: [PATCH 6/8] Enhance npatch function with optional flags Added optional flags for the npatch function to allow for dex injection and signature bypass level configuration. --- src/build/utils.sh | 54 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/src/build/utils.sh b/src/build/utils.sh index e03d01b..349159c 100644 --- a/src/build/utils.sh +++ b/src/build/utils.sh @@ -695,21 +695,63 @@ patch() { } npatch() { + NPATCH_APK="$1" + NPATCH_LABEL="$3" + green_log "[+] Patching $1:" if [ -f "./download/$1.apk" ]; then + local apk_name="$1" + local module_arg="$2" + local output_label="$3" local module - if [[ "$2" == *.apk ]]; then - local -a matches=($2) + + if [[ "$module_arg" == *.apk ]]; then + local -a matches=($module_arg) module="${matches[0]}" else - module="$2.apk" + module="$module_arg.apk" fi if [[ ! -f "$module" ]]; then - red_log "[-] Module not found: $2" + red_log "[-] Module not found: $module_arg" return 1 fi - java -jar npatch.jar ./download/$1.apk -k ./src/fiorenmas.ks fiorenmas fiorenmas fiorenmas -m "$module" -o ./release/ - mv ./release/$1-*-npatched.apk ./release/$1-$3-npatched.apk + + # ── Parse optional flags ──────────────────────────────── + local extra_flags="" + local inject_dex=false + local sigbypass_level=1 + + shift 3 + while [[ $# -gt 0 ]]; do + case "$1" in + --injectdex) + inject_dex=true + shift + ;; + --sigbypasslv) + sigbypass_level="$2" + shift 2 + ;; + *) + extra_flags+=" $1" + shift + ;; + esac + done + + [[ "$inject_dex" == true ]] && extra_flags+=" --injectdex" + extra_flags+=" -l $sigbypass_level" + # ───────────────────────────────────────────────────────────────────── + + green_log "[+] NPatch flags: sigbypasslv=$sigbypass_level injectdex=$inject_dex" + + # shellcheck disable=SC2086 + java -jar npatch.jar "./download/${apk_name}.apk" \ + -k ./src/fiorenmas.ks fiorenmas fiorenmas fiorenmas \ + -m "$module" \ + -o ./release/ \ + $extra_flags + mv ./release/${apk_name}-*-npatched.apk ./release/${apk_name}-${output_label}-npatched.apk unset version unset lock_version else From 0981c7db7caa5419e2890de34c86a989c5f996ce Mon Sep 17 00:00:00 2001 From: gnadgnaoh <117189041+gnadgnaoh@users.noreply.github.com> Date: Sat, 13 Jun 2026 15:29:51 +0700 Subject: [PATCH 7/8] Remove version variable from Xposed.sh Remove version assignment from Xposed.sh script. --- src/build/Xposed.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/src/build/Xposed.sh b/src/build/Xposed.sh index ca907c9..b689560 100644 --- a/src/build/Xposed.sh +++ b/src/build/Xposed.sh @@ -23,7 +23,6 @@ build_2() { # loader dex directly ensures the hook fires in all of them. # --sigbypasslv 3 : Level 3 (Extreme) replaces AppComponentFactory so the OS # reports the original signature even to isolated processes. - version="564.0.0.48.74" get_apk "com.facebook.katana" "facebook-arm64-v8a" "bundle" "arm64-v8a" " nodpi" "Android 11+" npatch "facebook-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" \ --injectdex --sigbypasslv 3 From 62a50910a38bdc4d0cf18b479201a4673a99b077 Mon Sep 17 00:00:00 2001 From: Fioren <102145692+FiorenMas@users.noreply.github.com> Date: Sat, 13 Jun 2026 20:03:52 +0700 Subject: [PATCH 8/8] Tunning --- .github/actions/preparing/action.yml | 28 ++++++++------ .github/workflows/ci_.yml | 4 +- README.md | 12 ++---- src/build/Xposed.sh | 42 +++++++++------------ src/build/utils.sh | 54 +++------------------------ src/fiorenmas.ks | Bin 2058 -> 3709 bytes src/fiorenmas.ks.bks | Bin 2058 -> 0 bytes 7 files changed, 48 insertions(+), 92 deletions(-) delete mode 100644 src/fiorenmas.ks.bks diff --git a/.github/actions/preparing/action.yml b/.github/actions/preparing/action.yml index 5a3e8e3..a943831 100644 --- a/.github/actions/preparing/action.yml +++ b/.github/actions/preparing/action.yml @@ -1,4 +1,9 @@ name: Preparing to patch +inputs: + install_bouncy_castle: + description: 'Install Bouncy Castle provider for BKS keystore' + required: false + default: 'false' runs: using: "composite" steps: @@ -7,17 +12,6 @@ runs: with: distribution: 'zulu' java-version: '21' - - name: Install Bouncy Castle provider for BKS keystore - shell: bash - run: | - sudo apt-get install -y -q libbcprov-java - BCPROV=$(find /usr/share/java -name "bcprov-*.jar" | grep -v debian | head -1) - sudo cp "$BCPROV" "$JAVA_HOME/lib/bcprov.jar" - LAST_PROV=$(grep "^security.provider\." "$JAVA_HOME/conf/security/java.security" \ - | grep -oP '(?<=security\.provider\.)\d+' | sort -n | tail -1) - echo "security.provider.$((LAST_PROV+1))=org.bouncycastle.jce.provider.BouncyCastleProvider" \ - | sudo tee -a "$JAVA_HOME/conf/security/java.security" - echo "[+] Bouncy Castle registered as provider #$((LAST_PROV+1))" - name: Start FlareSolverr shell: bash run: | @@ -30,6 +24,18 @@ runs: fi sleep 2 done + - name: Install Bouncy Castle provider for BKS keystore + if: inputs.install_bouncy_castle == 'true' + shell: bash + run: | + sudo apt-get install -y -q libbcprov-java + BCPROV=$(find /usr/share/java -name "bcprov-*.jar" | grep -v debian | head -1) + sudo cp "$BCPROV" "$JAVA_HOME/lib/bcprov.jar" + LAST_PROV=$(grep "^security.provider\." "$JAVA_HOME/conf/security/java.security" \ + | grep -oP '(?<=security\.provider\.)\d+' | sort -n | tail -1) + echo "security.provider.$((LAST_PROV+1))=org.bouncycastle.jce.provider.BouncyCastleProvider" \ + | sudo tee -a "$JAVA_HOME/conf/security/java.security" + echo "[+] Bouncy Castle registered as provider #$((LAST_PROV+1))" # - name: Setup Cloudflare Warp # shell: bash # run: bash src/etc/cf_warp.sh diff --git a/.github/workflows/ci_.yml b/.github/workflows/ci_.yml index fbca160..54d80f4 100644 --- a/.github/workflows/ci_.yml +++ b/.github/workflows/ci_.yml @@ -10,12 +10,14 @@ jobs: strategy: fail-fast: false matrix: - run: [1, 2] + run: [1, 2, 3] steps: - name: Checkout uses: actions/checkout@v6.0.2 - name: Preparing to patch uses: ./.github/actions/preparing + with: + install_bouncy_castle: 'true' - name: Check github connection id: check-gh-xposed run: bash src/etc/connection.sh diff --git a/README.md b/README.md index e192ae9..3a33d0b 100644 --- a/README.md +++ b/README.md @@ -282,7 +282,7 @@ This app might crash 2-3 times on the first startup. Don't worry - just try open And if you can't install messenger back again because they check sign app should need messenger [from here](README.md#gnadgnaoh-1) too -[Arm64-v8a & Android 9+](../../releases/download/all/facebook-arm64-v8a-gnadgnaoh-lspatched.apk) +[Arm64-v8a & Android 9+](../../releases/download/all/facebook-arm64-v8a-gnadgnaoh-npatched.apk)
Outdated patches @@ -307,10 +307,6 @@ And if you can't install messenger back again because they check sign app should [Arm64-v8a](../../releases/download/all/messenger-arm64-v8a-derevanced.apk) -### [gnadgnaoh:](https://github.com/gnadgnaoh/NexAlloy) - -[Arm64-v8a & Android 9+](../../releases/download/all/messenger-arm64-v8a-gnadgnaoh-lspatched.apk) -
Outdated patches @@ -347,7 +343,7 @@ And if you can't install messenger back again because they check sign app should ### [gnadgnaoh:](https://github.com/gnadgnaoh/NexAlloy) -[Arm64-v8a & Android 9+](../../releases/download/all/instagram-arm64-v8a-gnadgnaoh-lspatched.apk) +[Arm64-v8a & Android 9+](../../releases/download/all/instagram-arm64-v8a-gnadgnaoh-npatched.apk)
Outdated patches @@ -374,7 +370,7 @@ And if you can't install messenger back again because they check sign app should ### [gnadgnaoh:](https://github.com/gnadgnaoh/NexAlloy) -[Arm64-v8a](../../releases/download/all/threads-arm64-v8a-gnadgnaoh-lspatched.apk) +[Arm64-v8a](../../releases/download/all/threads-arm64-v8a-gnadgnaoh-npatched.apk)
Outdated patches @@ -751,7 +747,7 @@ And if you can't install messenger back again because they check sign app should ### [Revenge:](https://github.com/revenge-mod/revenge-xposed) -[All Architectures](../../releases/download/all/discord-revenge-lspatched.apk ) +[All Architectures](../../releases/download/all/discord-revenge-npatched.apk ) --- diff --git a/src/build/Xposed.sh b/src/build/Xposed.sh index b689560..6abf2ba 100644 --- a/src/build/Xposed.sh +++ b/src/build/Xposed.sh @@ -4,47 +4,41 @@ source ./src/build/utils.sh NPatch_dl(){ dl_gh "NPatch" "7723mod" "latest" - ln -sf jar-v*.jar npatch.jar } -build_1() { +1() { # Patch Revenge: - dl_gh "revenge-xposed" "revenge-mod" "latest" NPatch_dl + dl_gh "revenge-xposed" "revenge-mod" "latest" get_apk "com.discord" "discord" "bundle" npatch "discord" "app-release" "revenge" } - -build_2() { +2() { NPatch_dl dl_gh "NexAlloy" "gnadgnaoh" "v3.0" - # Patch Meta: - # --injectdex : Meta app uses isolated render/service processes; injecting the - # loader dex directly ensures the hook fires in all of them. - # --sigbypasslv 3 : Level 3 (Extreme) replaces AppComponentFactory so the OS - # reports the original signature even to isolated processes. + # Patch Facebook: + version="564.0.0.48.74" get_apk "com.facebook.katana" "facebook-arm64-v8a" "bundle" "arm64-v8a" " nodpi" "Android 11+" - npatch "facebook-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" \ - --injectdex --sigbypasslv 3 - # Patch Messenger: - get_apk "com.facebook.orca" "messenger-arm64-v8a" "apk" "arm64-v8a" "nodpi" "Android 9.0+" - npatch "messenger-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" \ - --injectdex --sigbypasslv 3 + npatch "facebook-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" "--injectdex --sigbypasslv 3" +} +3() { + NPatch_dl + dl_gh "NexAlloy" "gnadgnaoh" "v3.0" # Patch Instagram: - get_apk "com.instagram.android" "instagram-arm64-v8a" "bundle" "arm64-v8a" "120-640dpi" "Android 9.0+" - npatch "instagram-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" \ - --injectdex --sigbypasslv 3 + get_apk "com.instagram.android" "instagram-arm64-v8a" "bundle" "arm64-v8a" "120-640dpi" "Android 9.0+" + npatch "instagram-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" "--injectdex --sigbypasslv 3" # Patch Thread: get_apk "com.instagram.barcelona" "threads-arm64-v8a" "bundle" "arm64-v8a" "320-480dpi" "Android 9.0+" - npatch "threads-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" \ - --injectdex --sigbypasslv 3 + npatch "threads-arm64-v8a" "NexAlloy-nonroot-release*.apk" "gnadgnaoh" "--injectdex --sigbypasslv 3" } - case "$1" in 1) - build_1 + 1 ;; 2) - build_2 + 2 + ;; + 3) + 3 ;; esac diff --git a/src/build/utils.sh b/src/build/utils.sh index 349159c..d795d66 100644 --- a/src/build/utils.sh +++ b/src/build/utils.sh @@ -695,63 +695,21 @@ patch() { } npatch() { - NPATCH_APK="$1" - NPATCH_LABEL="$3" - green_log "[+] Patching $1:" if [ -f "./download/$1.apk" ]; then - local apk_name="$1" - local module_arg="$2" - local output_label="$3" local module - - if [[ "$module_arg" == *.apk ]]; then - local -a matches=($module_arg) + if [[ "$2" == *.apk ]]; then + local -a matches=($2) module="${matches[0]}" else - module="$module_arg.apk" + module="$2.apk" fi if [[ ! -f "$module" ]]; then - red_log "[-] Module not found: $module_arg" + red_log "[-] Module not found: $2" return 1 fi - - # ── Parse optional flags ──────────────────────────────── - local extra_flags="" - local inject_dex=false - local sigbypass_level=1 - - shift 3 - while [[ $# -gt 0 ]]; do - case "$1" in - --injectdex) - inject_dex=true - shift - ;; - --sigbypasslv) - sigbypass_level="$2" - shift 2 - ;; - *) - extra_flags+=" $1" - shift - ;; - esac - done - - [[ "$inject_dex" == true ]] && extra_flags+=" --injectdex" - extra_flags+=" -l $sigbypass_level" - # ───────────────────────────────────────────────────────────────────── - - green_log "[+] NPatch flags: sigbypasslv=$sigbypass_level injectdex=$inject_dex" - - # shellcheck disable=SC2086 - java -jar npatch.jar "./download/${apk_name}.apk" \ - -k ./src/fiorenmas.ks fiorenmas fiorenmas fiorenmas \ - -m "$module" \ - -o ./release/ \ - $extra_flags - mv ./release/${apk_name}-*-npatched.apk ./release/${apk_name}-${output_label}-npatched.apk + java -jar jar*.jar ./download/$1.apk -k ./src/fiorenmas.ks "fiorenmas" "morphe" "fiorenmas" $4 -m "$module" -o ./release/ + mv ./release/$1-*-npatched.apk ./release/$1-$3-npatched.apk unset version unset lock_version else diff --git a/src/fiorenmas.ks b/src/fiorenmas.ks index d40b18a5b74b30f333a9a173f4b479982e71ee29..a31d1901581ffd14a1cd005c3dd3b0dcbd9ca0b7 100644 GIT binary patch literal 3709 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 b(qy9mceJBNh)>YvtC@KG(?m~ORsktL6U_0M literal 2058 zcmZ`%X*|>m8~qPstC=AtV=2lKGX^u3j2dLfHWDF?UDmMK@bfWcsuFqQ(`3K-?zf&asc28sQC0K^8cMuWJ4lb=qpM1w#;>UzHu*)s3%g)owh z*AfA_O&gKvB@YUZ^$RRUg`Y{LRP>8S62Dk57Pky<9e(<*66i0T6{(7^?R3)V(X1^z zmP{4nP5F4L9-)g?MYIP}wbOjjo(t#g5JJmn~{q_WBP$yFud)(|3Y}q;V^e$KF7sqM);PtFU`zGaPb>sZud{W^{_ut7lcp`wUlSyATxG^5^OU9~_{VyCur@OdKD*V{Da1|#o& z`QW+ql$gv)(`OK!Q3M-ER9@J@%yLBom0w14cYPCVuJ*yicSYA!wDdLrfVcl!ewfzT z%Q^iciyo&G^`?IO-`r?{phLWRrx9daSnF z+S@H!sI+TCYgnDR-kZ;7*QF=+CZ@>mX|-AK^Dg{Cb>-c&g^b=DjH|;qUuBHH&%HB* zlz5btd%FGU>iECr{t>yw0uO?gB5FbHc`C4Mx?2ahW1?h0 z^j(NOXLquntOeCzp+q~aG688+uN@q7Ea4q%+JwC!W4=@;Uh-~idY6ePSHnXh9V_3z zf9@tUidO48racSJfnVH-S~xf_NVqPeb2Ur=j(#ce&Exe0i1e)~Qf{`d-1E>SX8WXK zqSowIL=Ox}lnkA|PE;e0UEb?U*IU^MU%f1`xMyzD26AENqo1!}-+&{_x^hsHbG$gvY(AR8zg5&0~TI5r4By`Wq~5AZQw+1Y02!{nmLpVq2sM zS(%f6*tp?FUy$0)EGjGTsXyS3BO$7uXj?V#4FSX4aFRTlY9bu$bG3Ngd(>yHkV7fb zK__ePP6qrXYim9igO>o?{|g`bBU|bP=qp%h zl)%oo1Q&I~%BYCd+L-_BbjHmm6^a#l2wD1`(w=g;x|&ZVS>cDB^k>W{7(Of^ z8p`j&QlsO6I2&-7aX*tXt!20V@{ptwJ+o}|B*duH#}8!D_%F0ahvR_~C=Bn>CW+Fu zy*M9&C*aG%x%Q+9#z;dwuAts1A zb?@l*^#*c1awHt)`a4W`MeC!4J^Fz(z^A-Ejbag88!aK=(pXdhrZO*^ANVXwO;V8M=}~zu7_eBHqRs2JpW>n2)DH ztVeA9lI$G$v&8aGznC3SVy4}+%_B@tS|vTW#4ZCFY=W%xbX0sZc?6g>wk0tPYYivk zR}xM&QmJvqS>@YRJ#d>$4ay}}L4_xmf$kW@OBY;mx1oodQJf7E&#|1vSPH1iZ>Fd; zyH!jz$;z?*A(T?14VwfElJ`q2Rogw^9>Z1D>xw))cb2Q3(mNQ)T^%kbCY9`sXnW_n{pI&75fRxxwQUn zDLZvCXPuUSTtPl>5phY`QP$h;AKqHktFrKRf7+$_aJLb#?P}Me*V-I@X4_7;ncMZp i>ESr8C{B#_9Kd9AcSNX)T-nR4PB|K?4=mmEFZmBo!n9EU diff --git a/src/fiorenmas.ks.bks b/src/fiorenmas.ks.bks deleted file mode 100644 index d40b18a5b74b30f333a9a173f4b479982e71ee29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2058 zcmZ`%X*|>m8~qPstC=AtV=2lKGX^u3j2dLfHWDF?UDmMK@bfWcsuFqQ(`3K-?zf&asc28sQC0K^8cMuWJ4lb=qpM1w#;>UzHu*)s3%g)owh z*AfA_O&gKvB@YUZ^$RRUg`Y{LRP>8S62Dk57Pky<9e(<*66i0T6{(7^?R3)V(X1^z zmP{4nP5F4L9-)g?MYIP}wbOjjo(t#g5JJmn~{q_WBP$yFud)(|3Y}q;V^e$KF7sqM);PtFU`zGaPb>sZud{W^{_ut7lcp`wUlSyATxG^5^OU9~_{VyCur@OdKD*V{Da1|#o& z`QW+ql$gv)(`OK!Q3M-ER9@J@%yLBom0w14cYPCVuJ*yicSYA!wDdLrfVcl!ewfzT z%Q^iciyo&G^`?IO-`r?{phLWRrx9daSnF z+S@H!sI+TCYgnDR-kZ;7*QF=+CZ@>mX|-AK^Dg{Cb>-c&g^b=DjH|;qUuBHH&%HB* zlz5btd%FGU>iECr{t>yw0uO?gB5FbHc`C4Mx?2ahW1?h0 z^j(NOXLquntOeCzp+q~aG688+uN@q7Ea4q%+JwC!W4=@;Uh-~idY6ePSHnXh9V_3z zf9@tUidO48racSJfnVH-S~xf_NVqPeb2Ur=j(#ce&Exe0i1e)~Qf{`d-1E>SX8WXK zqSowIL=Ox}lnkA|PE;e0UEb?U*IU^MU%f1`xMyzD26AENqo1!}-+&{_x^hsHbG$gvY(AR8zg5&0~TI5r4By`Wq~5AZQw+1Y02!{nmLpVq2sM zS(%f6*tp?FUy$0)EGjGTsXyS3BO$7uXj?V#4FSX4aFRTlY9bu$bG3Ngd(>yHkV7fb zK__ePP6qrXYim9igO>o?{|g`bBU|bP=qp%h zl)%oo1Q&I~%BYCd+L-_BbjHmm6^a#l2wD1`(w=g;x|&ZVS>cDB^k>W{7(Of^ z8p`j&QlsO6I2&-7aX*tXt!20V@{ptwJ+o}|B*duH#}8!D_%F0ahvR_~C=Bn>CW+Fu zy*M9&C*aG%x%Q+9#z;dwuAts1A zb?@l*^#*c1awHt)`a4W`MeC!4J^Fz(z^A-Ejbag88!aK=(pXdhrZO*^ANVXwO;V8M=}~zu7_eBHqRs2JpW>n2)DH ztVeA9lI$G$v&8aGznC3SVy4}+%_B@tS|vTW#4ZCFY=W%xbX0sZc?6g>wk0tPYYivk zR}xM&QmJvqS>@YRJ#d>$4ay}}L4_xmf$kW@OBY;mx1oodQJf7E&#|1vSPH1iZ>Fd; zyH!jz$;z?*A(T?14VwfElJ`q2Rogw^9>Z1D>xw))cb2Q3(mNQ)T^%kbCY9`sXnW_n{pI&75fRxxwQUn zDLZvCXPuUSTtPl>5phY`QP$h;AKqHktFrKRf7+$_aJLb#?P}Me*V-I@X4_7;ncMZp i>ESr8C{B#_9Kd9AcSNX)T-nR4PB|K?4=mmEFZmBo!n9EU