$;srow=88XO#h=fMKbsdnLvit~e-5M$&@GRQIh_S7)-Qd_LCbixLo(u^;g>n7$0}x-1$)jq%=D zDKBN1gP!ca;E65R%A{c_o#txxF2vV?-TPmtR&Qlj7kcpXu$4_PZ4yt#P-`TEoD~mG zw=&Ur*rbv4y=9iIb9E+qI>6e;sH|&!@TR(5C3j4W!*PP`IQF|uLnAj-1I>m3j7ZwT zVm8Y67PFalYvk(P5<8&BNXt#UHDtrYbC`IzOkqn6!e7W$<$`+{s}Qf2R!DV71DCnw zw&QpAl(YiZm$fFc|6z`rB`DLl?H`X6v9d&`m^)to4~&Ddf6V;ldR;b$*YYJq?ohxh zevR~RSVgMOFYecnVLL(-ajCMv9EnJt`oJhwAj@;>HA^bl|AYTE1WSJtY;X6ws@TsG z|Csh~^?{>Z&nNu)Bx`oDRjH~XUlm3OCox!k7F4&M;WG%$;HldStvk!P3p91zDr$mH zPKyzko&@(ro=YC9gG^t=8KS~iGk&R0i($;mCHAuI>#Nw2=^3ljSdCfTR!^l@+0by4 z@Q3-=)&e-o;{CXFt)cC-w)!sH4k}kwergjvd#(0fbjbp>;W?VO8WVsMt;RIJwFzn6 zmo<%!G0$GcJ;Qgnw(B5($b7xu0dR#o+g8e6d!Ih%!#s6(G(L-O<+l_m5 >lrCQ=4g~eZo*BHv+a%XcQW2NWU!2l(qZ2VI09+KE~6qy4><5_*fvYG zfgdY5ixX@5$@`>wc-oW}3-Qb45oI~1Qc!oBt$AzTQuTn2SpW1F{^h1lU%#yvW`0%H zWx5AzLKW8+N~&kgbBy|SBHf5~K75hmHZ}p-z2IY`c^n+P;#vi1^w5zh-H_TDlXVbw`^mqe%wV aQ6r&oR*1)~W%z=4r7{;HE?u;t^;dJmxH;A~z#V(aP@8}^K9;tG{ zTuv)x1+H`(*kdbxuXunBJ|2KK9BygOOI@n0D8c6`x>~zviIIVWvNJ^Mv+@-cf?iu5 zG2raK+1Xo;%bN2KAD<15D}Z`%c*Ut_u;n)H^u_w}0@YnUZ`Gd+h8&|Du_5*u8Na}) zCpmgmWz|kN0Y+(Nd~3tAO)Bj)$Ra{sCE5LfD^fJAed#GgdGO+!l?f}V`>$81e?zed z0l*x?#TY1!?OssikA2g=`eZxeHg #&xyCsTtS$X*2{veEKx&clKDBq#nxyp(!qXU=IW$ROt*X_J~(rp sS(Z02&MylTrb~kk%X9GDd zfvBi#W@bp1{Ki7Fn_;a=lV=l${U|Fu0t6JfHDJ5uJ$bqq94;U!px}FEYM%eTevuuj zs;EeK#n!Gj6(dS-7*R7GH`$0L*^m9J|Bjcum#;daN%r`^+K3wUWsh^50#+2RenwQ_ za1B6&uw$!2c$14korf$&xPu ?&vgea}LEFn|^GOWcWlA9p40p({<+L{oOOeGe)W4&p7*vk`<| z6;o^zMmi@5znxsg4Y33@vTfYLC0m05Sl*Is)hIK3N%m|c;q}GOgRg-UuO12*JVZOa zmdM?=T=S8SWo7!FIEe{j-UlDJY zO!4tYCYYdPxm?hnXi)tLGSb#GMknL5T=qhZR*27+OTsPT&=~Schagh0;jT2N9>$Ku zNNAewax%jnrtl${Z>RMJ&OZtXQkAcgm+&GRCzea7?b)bA1Zj^29YQFg3B3FI2trTU z6UTQ!8dgt4Q_D@Yvs30xod;^Ehy}FWkQ$f_HiZD9rVwJmvQm0cAyjKpQ1VC&Txk}G z!RARhO1x%L^Rx-VD9Mr8MWZqc=qFuYnF^|y{jEV)B+Iv}*jFnY=W(&Bi#9Rtm|)$q znwbdkS=^;$F(QFX#Ferjyc1oiCFSEC6N 8QP!q3@1U zmbTH8eel`er^jCnx&38sE`-_dvx|l!M@C!fq=L19Yf;AW>Fa|i+lc#=U}23lQSarq z!`pa0FYMjAmVJU r=ZR2F`|r~C4FWD}f;Q$7H!>I^h%mI!VL#vz z*F}m-2WUm}YtISM{forUI4NLrG^;rE|J0-}EY`Hhx(1HWvxdwmTesGTLYFCXZ+n^U z_31M1ZTegJnTYa#sq! Yv%jGyW9!5j_QSSbuOgJxZNs9^*@>skl}yE6r#&!=a-Md}vcN~0FB9#-E>$ih zIhq>diP%=ylYJ{@r2{KIFR1IvtEVDw8>?(X5VWOtyg^KA5r1pYuKrUaTMKHmO#ot& zu1AglKZ3sV<*p&exkh%)B{` MgaqEcIMXUesF(5;k)pV3)!?wbh2NYP16v60y7(8lK+Pqth<3uR>?pr>(AaL|sE_ z@2isXBQ@22y#;q?ztKy|do5*9UXR83cjKT&+eD-7Yk>>eAw0UqcrZ(}FD}F_)MnTi z+&0_zOy;mH)>TNXwU?s7>%)t6(*{?h2uu+UF=ia)35B @!A$`}!!4a4T2CT4KyMi2Z#tWm&$%#$PL1h=bjz%^g&0!?i2 z98GKUKgw8}|53)8zzOIy=a1S)8R<2&y&4*~k1{$OT)lA;5(cTB>AQe+eIOBOtq&xk zHmncs2UT2l!%YHOMKb6ZDK_F4Uq&SI3}FwdL8W~ekqkLP*og?a7GFlJ ?cgXOy-thme;`N7+jz7Q)s? ZDTZCiskahC(G z6Av}4T-Y|Li$=FrbR@Kna6YPbG0_p|U3YY(U#z*5ed4#@OBqdrr_s>QT|5_V;Se%T zZ2* {iPQ%4LPO=xenW~&x5HN`agt-`a6lJp)q!1iFq5hB{(c&yPvxfQIyEDY?%o} zxFY*Po!rma#x0+nIu^M#Z1@o~hqDH}r@XOLom;U8NS7+!Wa+Kx3dAc;9eN+Q6= dX=TOl*r}7)|2z=$c(@;F@ Ot%+KPpT$n~s;P}9Y| z<#Hl;OgWPVhymG#AxLQ}Q8<*8H)-EcQkf+G9@)x19kkX)d$IJ46=qmLQ3@$gFJhpI z+zPFm^SS|D=6e;xT! )IZh^{j3f(>((*dRp(_Kg=S1xicRK>oc**p*W-?g#R<7H{s+F8KlZI>DIpp! z^$F%Y|0~QOpup8UoQQ#T0cR)zl}mHeahYAwBtXhCZTVu5 `6zx%Tv zTuZ&@saM!ECFwO(a-Xk+FHs1*oq%W65HE;{mCZOD6*VdF_PWLEkFgaNV>Abz>2G-y zLhSRnB9H6J6TnYqkRFim3M4_`-XOluB%verfu5C)$xSF_v^jud!P+J8W*mFa#e5yX zC`;7>t`%q`wi{+~IOdk#Msg%IWh(8(!@ jS~TcL4N^h+QA3Rc@>*-)g#8?P8 MfMcm+9Tbo=y#vBhF-I+NbYKs zbCtFi$#ZSXfk(SUY-)jSt}2fp14PlB-dYeEV0W#fwsQ6UA5Bny@ksNzOdT}IU_A3g z$XcGP8r@}zA*%a$i80)k6;9COEHmww^*p hp*0RxN= bbwf!!=@3F^ezv*x;Bn}muE1_ z>Gz~!fTItCY5gn*owUN?EOR)4ogv&+2P#k(B9#BtYcZ5tgBXvUtU0C@Y%uQ@``>-H zN>2TijLmxi-Mk6b_*W<*s0I>Ud50FyqVsxaCey{5iwk#4;=8+d(#TU;F|sIqwbn`c zdV)_zcN$2SyTx-Yyh{B9Dyn`iU{6ydOc%T5kYNs3hfFT(d>2@T0|l5s)aG(FvSf7g zNsA)#Z2 UO@~>`$D1K--BIf7z_=jlj3sb%m!C!CMcQ$oihc$?!AOXL z*);{-%wg6 )%&eN@ z=pxXA!8d~g8Q|jVuW;KTDU5}C4;U>lc{yt*OYVZ)Ym%Giy$O>A4Fs7?1zAHGpQ1#! z!r3UjR4N8w=owWCEwm+NSK`-N(=p@$UOq%`oV&3oBhxkg&X3*5q>~m$Z{UrR{e%^w z^EVKw#n~Hxva)mbh90CcJXe;*7&U5v^oyHYLE{UdKd8qq8sk^P^i^aQ@G>%KoCVuC zpuj%cwvMx-@RZB;#U4k~l)!VoCR}x`(ToMutU1~$rF?)->nF;Ld4zYQK?38)LF!G_ zc{{61F5@8h0f-au;i1yp^uC|di{i9QXn?PJoz8!;<9i&38ICdbRRc{jj1lzf3!()k zVsZRA!_g-4C0}$cH~v@Tk7cKm{xBliT%`p7h=~^I7aM2PuUOq*&IM38@W!83&V=HC zC&Ybj^r+0uG~MFBCAu7|%VEkvLDpqzExL@dZQ 2H5)ez45@&s zoI}MoDsreGU_>#dv5~Ef-a7S^^ODqgMp|^t*lU*guK@%ZI_}(gN_tC_fyN9d;WU_C zTG$5CWK8kkv0odlH|{l;F4$@(KC(+E0YPHV@HG||!JWQJGR_>Sj<#Y v2!6$y^ znqWEiA*pZpzAUJ6zyHvK`w#7(dMsFfopWyRzQIR>tM@$|>=-$4;BfH0hsF*ae&kSa zX!oJukq3ea{(oe5FuZN=4YwW|+jGb6;GWyIxp%(PF1!5Y_MP_hmbV3WZ92SZc+379 z?%I5K^V@E^DcFDK1CxVy9yxmZ#C->E_<_;A`?84}gH6|OynbV_=Fr0j4y+BXp4{r* zc6iE-96J2)L;Kvpk%NaP9;*kt_Kmm)4+GC5`wu GtmW9>&NIA=PvSU-;b3(Cpd2oBG_|!+Rb+IC5wz2LT8s z-5L#gdQVO+>DqO58reIt`+%pI5m&r&49dR44^M&E$*GC`dxW)hWZHA!VMBfK`oR8! z`+W;_Rc(YbDaawibxv@ua|aLa-T$Dj5D gpo+}{1F`hkb1NSsunk> *N&u6Ph2p z<_E~QZQDAxefv7MW5>J_yZ0JvIj|e}Cq^D({6NXx!-qyFlI;;+a7T7ek$7mUn>hS1 z^tj1Aa(H5FQnk1@uFDf|=t{hSq9O!HYsyhSm sB%pSRlmiL)*cPGk(|1@+dTk%OlpjGPdRS)9)_Iu96oqN+z1Hiz*}y5)Aeo_ zRKfInMA^g*MH5WKLyVQ^_}~#^uTwTJU`P8O+JA^yBl6f&uXpjxx2$y=-}I)zb?((j zA%m*(X~NtZnK(MK_xgJM&YUkpjW)S8mzhF<(LKYt&$)#-_tE{}pwltl@qB1%|AW?V zCWEH>t3mOt2okP#$icqdLCA6fHpa}Q-owUx7>|jZ^o02N@bS_T9( uXSSI@V zTM(ngfA{P={0OY?z!5Pc4V9l3Yp<`bA1(6a*SC6xy#X>8<93p)x9^;jCKMTSH)~3M zPf^lj&?EcyLov{hIOe1q8+mMM_X7;Kh-uFy5{Wtv6ovDvL6~!+>+6@ibnczIVJ3$j z+Ug#lm-~!0jXXNlt|K#U7DGGqP!7#KM@II*_-r7KfVBOOz8VCR?&d=eAADeBVu6zR z lM=j$Ts4x?Z%18gzI98t? ;tB6Q8wd)Ic)hu5w{ Ti!bVIpJWCaZt zl*^EtQ-q1)oTGE7IN+yKe%<#u=Ok&7eYSs=PtNT<&+|U-``q5=dCp0D=fVd1m9$8V zC05Sx3BgKm7B|lA^ )<#>|Pq;P(gtZH_`fjUmQ>5 zW-#oh(UCVK*P5r%n8jg?P0 !5nc$3p~xX34XbwCq1tz|2A!#kH8{VA z5~2t}az8KwF4W{li01V)fq?4{Xes*ZGGmG^f`S`>x;i@(V^NQf$=f|xprVc)7!CG% zFjHCqutK>TVT4dfaVhQU`GaBjAn}H ;-E%vy~Y*tGU!xrL`D1-pW;2%u{*2LC@uCt+>w3=c;&HnYq%&0m7m+*`{&kQh3y9 z+!WrV&*u!)6&8clsxezQzP!T78_>p^bjC_OZ<@rF0MBH$aYi1F5uMu191)bd;tf{n ztlVJHm7!;C32)?W)ABW?yv>9@xl(kh EDQ1~ir!Ffwh4(IAq- zq;y6tU!KqDwdLALG&&1sMlTi(fr+Ezs>%%1MD(=y>TJB(MAOijO*RWI^D#?{Erwdf zTMhY~*1}scR86VHjP8k@z#yKP2+w2?dm&Z}42nqvAjGgrOgc6ey+Lb4Ul5O}3oxYF zIg6w`mb}{lu~}#L!u>~GmADw*VeOru;nAb`(TJTJ>_k^X7u?}V?&hitU0v0}|A6xS zFvsYkz+B7?hPv{`Y8G(gg^0>vD#p(c#q-G(#au`_w^bE$_0stiOEKq=&UGe@1_j0Y zllFA$y>rbATMyrS@AY$ yYka#>yNqx+4w_x9VG-g5uLq0yO%IT?MI7rn6O zE$hz)8}biT|Fqj0^MKJeet-MD=Hcp3bQ?RC{p3r 7z8zIuN9a^uQ^ zHN5liu1^McJ8 (JX`j4^NVR^=d8C^+^Ae~xqWH& z)-N^;-?HW9X2r`#Kf5?CZR;CL&gHRzWv^u{pL=DpXZ*YQy8;&Xn%R8s>kZeZw`$vm zd?wqQv}4$%)N$!gH7Adm(BnBaNcM0+iav{1mG3W~lz!Q^cTDQg^2B51I%jL`( @kRR7;6j=qAl6FlUiAU5M z!W9EQ&z(4BVfCo`+cQ%q@R=iL-zxsa*hicA*?&s;t -mYpYSYeS)sH$- zTTrsUdE}hp{9mQ#+HOtA?Y4H>rioWlpKi)Yy%>DC`oxguM# `gze_yf6=$L=;Y)bR- z!G#apDp}mVdfe(;7cM`QzH# MLKSI(U~ zwtK;&U%WK=@%b;VS~jfuv5b1tx`R7+%y`i|ykT{4+lGCIt+VF6c;Ek3e>3A!^7Ij7 z(q3&FRk-e>>}|g*-1zwHmm0_BJhJH9sdMM=a(=~r{*NPe-|7Pgn&$1;t(l=&^yU7J zqJmsw?em$vFHNX?vtZqWD?Zz`R(dtv7LrQn*j;*q$ z?JeH3i^dmrJYDz7GYP%(P8WyXYkl_es-HBUJTWlq!k|g+?=Br15Po^r$EusdKP>xU zVE1d5t3}h?J2!uvroM6Q LE_Z#2rbGy&;H#hVfd@%BC)3LPWSAMwr z{j#046UWMHT0Z~(ZJ}HH2IU<4QKQ3u`jJI{AC|B-|ID?j54JSawr^Ut?%K}Z>+)Ak zmIoGp{!ZZO!w(z@?@9B{tGIR`FY6$;rS_kHE+6&A9!qoMm_g@1zWMf-pFZ{E%CpaG zY3()R?DA7fd*p5YZhHIqeb3JOc>;>1_uR2L&^QU(3Tzv&d9gi$EsSj${t)}-!X()e zdLWVXM32Z2#;WgS>?$^sk8=eAw7SOA4#s;tuDJ*)Ynnn>*-<;BiU-sC8W8P^;LPF* zhCLz52s#B4$o9}7GI=h9GH$1`8^R;3+{}!^kysZaJh6&|5)2JO2&l+y(@O6|t )Fj94tJrPi#!b4Gpld3=zE((}_I|?-(S1r;IFV>4j zM1#zX=o |lzAQ1Lb9WU5~+D8L|caJ9yg%&El2Hc(| 7%n0xQL#?Go8=t#ndV2 zrQi%%7F8l$fljOoxf?J%BoSSKYpDXw%6!Po5KlR&Rvx_wdr|5_6h|Y~I-Np11wjIV zl>~hCE-&YIgJb+~vn1T8Jft~*uPFQw8Y}Vm9Q6__F+!oL9G9QOVo?R+LgW!^cao_M zdArC6f$4^YE(ggDDX&C6%1uaBD5Wy3bOLT-dV<7#-nq=$)KKF?#Xw*(=kfXcf_?}| zPz=Zh{b-;t(dWlRNy89edL{9amIzAcbOjv&w;wu(vBtz&g5umAw+X{h=k_?M6eOr5 z0Y%v(sAo(gS&TMmL6A_1eVr-9^bgfwr@-3 t#0&6n0F3QoS;#gWE|k4lsZ ^6C-_&mEbOF26xU=@ZSc0vg8J7f#-s~CE%y@7m4SJ kY)^5gS?SkR-6ko zs(7Omts~KdnbcA&EOM9&)`d|Eft!l23U&|F%h^Oi_R}LY@;LFkom*iUR9U3e0NJS% zj?Dsng|Wn)*h66-)&kc;hs%Y6E$J-$rdz1vq145y1hGp^g7TMRL37vn{2bNN;f;Z0 zkvtp~Ger}K`GzTIAw@=lO7_E|*MefhLg81%#svThxagq=tPJj)iqEtVX}@}dCAG-5 z%V)4JWxrFdR1TIcQ)MgGCv>p46eAQ#s)MrCvd0uB5`Mrgs$OCx3X|ebvhE4#>{qH3 z*?RoyXSB*GKPc~z&r = SLFAK`8GNyg?2;Q3+0ATSm z91ngkph;DPH`J#hp!ggY^36C|dKB+olq%;ay-K@^vD5UJSNI%PwX42S^-mm=$R|FW zh`$OAKy6>9VSW4dB><%erlv!Zc+OZ~)>DJ~3JqS-W9lS4BUY<$Gl{7PhcLB|zlj%? zy2lYTDb$?8n4GDpS w{T2PBY0t_P8LwH$Gw{ba}WA_3o!JcI)Qdf zP2rUgWZ~XRxF<_Re>nE r(P=rP(7o!(G-HuMWt zwdv6POZ=7|9UT+y)d1Fs?WzKUM|8LONg111(t|B&`59wZZYt@Kdl9zz*y{1}+}q!F zbgX+FzZ;i6(O;?m*GIfZsYt-TW$mVxP&7%&DcyVA(=#=#S9 57J+_860zZRg$VRE0)9uJoe?Ng1PT~| z;zgi95vWfDN)mx)M4)sLh&TdiMj*ln ZKv^45#i$%E1VL|8`5#*8Q2HW#8g<_PzfH5GWeW*I4TJbm5#4*o=6$W IoI=^Z085N1D*ylh literal 0 HcmV?d00001 diff --git a/loader.js b/loader.js new file mode 100644 index 0000000..0457619 --- /dev/null +++ b/loader.js @@ -0,0 +1,100 @@ +function update_status(status) { + document.getElementById("status").innerText = status; +} + +function init_honoka(file, android, newDomain) { + async function onloaded() { + if (newDomain.endsWith("/")) newDomain = newDomain.slice(0, -1); + if (!file) { + console.log("downloading"); + update_status("Downloading..."); + if (android) { + file = await (await fetch("https://ethanthesleepy.one/public/lovelive/lovelive-community.apk")).blob(); + } else { + file = await (await fetch("https://ethanthesleepy.one/public/lovelive/lovelive-community.ipa")).blob(); + } + console.log("downloaded"); + } + console.log("loaded"); + update_status("Opening file"); + const zip = new JSZip(); + await zip.loadAsync(file); + update_status("Getting current config"); + let server_file; + if (android) { + let server_info = await zip.file("assets/AppAssets.zip").async("arraybuffer"); + const zip2 = new JSZip(); + await zip2.loadAsync(server_info); + server_file = await zip2.file("config/server_info.json").async("arraybuffer"); + } else { + server_file = await zip.file("Payload/LoveLive.app/ProjectResources/config/server_info.json").async("arraybuffer"); + } + //console.log(server_file); + FS.writeFile("/server_info.json", new Uint8Array(server_file)); + update_status("Decrypting"); + Module.callMain(["server_info.json"]); + update_status("Patching domain"); + const data = FS.readFile("/server_info.json", {encoding: 'utf8'}); + const currentData = JSON.parse(data); + const currentDomain = currentData.domain; + const newData = data.split(currentDomain).join(newDomain); + FS.writeFile("/server_info.json", newData); + update_status("Encrypting"); + Module.callMain(["-e", "-j", "server_info.json"]); + const new_server_info = FS.readFile("/server_info.json"); + let type; + let ext; + update_status("Applying changes"); + if (android) { + let server_info = await zip.file("assets/AppAssets.zip").async("arraybuffer"); + const zip2 = new JSZip(); + await zip2.loadAsync(server_info); + zip2.file("config/server_info.json", new_server_info); + const appAssets = await zip2.generateAsync({type: "uint8array"}); + zip.file("assets/AppAssets.zip", appAssets); + zip.file("assets/version", "MD5 (AppAssets.zip) = " + CryptoJS.MD5(appAssets).toString()); + type = "application/vnd.android.package-archive"; + ext = "apk"; + } else { + zip.file("Payload/LoveLive.app/ProjectResources/config/server_info.json", new_server_info); + type = "application/octet-stream"; + ext = "ipa"; + } + let finalized = await zip.generateAsync({type: "uint8array"}); + update_status("Finalizing"); + const downloadUrl = URL.createObjectURL(new Blob([finalized], {type: type})); + const a = document.createElement("a"); + a.href = downloadUrl; + a.innerText = "Download"; + a.download = "lovelive."+ext; + document.body.appendChild(a); + update_status("Done!"); + if (android && !sign) { + const p = document.createElement("p"); + p.innerHTML = "Package is not signed. It will not install. Sign it with the command `apksigner sign -ks sifkey.keystore lovelive.apk`. Make sure to download this keystore."; + document.body.appendChild(p); + } + } + window.Module = { + noInitialRun: true, + onRuntimeInitialized: onloaded, + arguments: [], + preRun: [], + postRun: [], + print: (msg) => { + console.log(msg); + }, + printErr: (msg) => { + console.log(msg); + }, + totalDependencies: 0, + monitorRunDependencies: () => {}, + locateFile: function(fileName) { + console.log("locateFile", fileName); + return fileName; + } + }; + const script = document.createElement("script") + script.src = "libhonoka.js"; + document.body.appendChild(script); +};