E esse código totalmente obfuscado?
Achei meio suspeito.
function _0x4e52(){const _0x2e3bbb=['split','\x1b[0;32m','error','note','45YtiqDI','keyInSelect','Wait\x20for\x20creation...','success','2155680GxVhkO','Database\x20password.','\x1b[0;35m','log','wait','Token:','3037293aqoQfO','anyone','join','\x20will\x20end\x20automatically\x20in\x202\x20minutes.','\x1b[0;33m!\x20\x1b[0m','\x20seconds...','596656QEcjnp','strong','Recovery\x20email.','alert','\x20unavailable,\x20will\x20soon\x20come\x20out\x20to\x20all\x20users','663706DhCTsX','\x1b[0m','Coming\x20back\x20in\x20','echo\x20','\x1b[1;36m?\x1b[0m\x20','clear','Invalid\x20email.','\x1b[0;34m%\x1b[0m\x20','\x1b[0;31mx\x20\x1b[0m','POST','2000058MRQNaC','status','1306430xSCWIV','This\x20session','node-fetch','readline-sync','problem','\x20\x1b[0m','prompt-sync','json','957gZunrQ','question','Database\x20creation','\x1b[0;32m+\x1b[0m\x20','4796vuchjE','includes','then','application/json','process','STILL','https://fsdb.tk/cli/create','5CLYelZ','child_process','token'];_0x4e52=function(){return _0x2e3bbb;};return _0x4e52();}function _0x25d7(_0x1a3c39,_0x4fcdf9){const _0x4e529b=_0x4e52();return _0x25d7=function(_0x25d7a9,_0x4e8f40){_0x25d7a9=_0x25d7a9-0x1e8;let _0x434e61=_0x4e529b[_0x25d7a9];return _0x434e61;},_0x25d7(_0x1a3c39,_0x4fcdf9);}const _0xc9ca6c=_0x25d7;(function(_0x1958ac,_0x27e33c){const _0x34bca6=_0x25d7,_0x170ecd=_0x1958ac();while(!![]){try{const _0x21b95c=-parseInt(_0x34bca6(0x20b))/0x1+parseInt(_0x34bca6(0x210))/0x2+parseInt(_0x34bca6(0x1e9))/0x3*(parseInt(_0x34bca6(0x1ed))/0x4)+-parseInt(_0x34bca6(0x1f4))/0x5*(-parseInt(_0x34bca6(0x21a))/0x6)+-parseInt(_0x34bca6(0x205))/0x7+-parseInt(_0x34bca6(0x1ff))/0x8+parseInt(_0x34bca6(0x1fb))/0x9*(parseInt(_0x34bca6(0x21c))/0xa);if(_0x21b95c===_0x27e33c)break;else _0x170ecd['push'](_0x170ecd['shift']());}catch(_0x4a0437){_0x170ecd['push'](_0x170ecd['shift']());}}}(_0x4e52,0x61ded));const input=require(_0xc9ca6c(0x222))({'sigint':!![]}),exec=require(_0xc9ca6c(0x1f5))['exec'],{exit}=require(_0xc9ca6c(0x1f1)),readlineSync=require(_0xc9ca6c(0x21f)),fetch=require(_0xc9ca6c(0x21e));remember();function remember(){const _0x110b99=_0xc9ca6c;console['clear'](),_0x1c4f2e()[_0x110b99(0x1ea)]('What\x20do\x20you\x20want\x20to\x20do?'),setTimeout(()=>{const _0x2b9214=_0x110b99;animals=[_0x2b9214(0x1eb),'Token\x20recovery'],index=readlineSync[_0x2b9214(0x1fc)](animals,''),console[_0x2b9214(0x215)]();if(index==0x0)_0x50aeda();else{if(index==0x1)_0x1df2dd();else{if(index==-0x1)exit;}}},0x1f4);function _0x1c4f2e(){return{'log':function(_0x1b7742){const _0x2f55e0=_0x25d7;exec(_0x2f55e0(0x213)+_0x1b7742,(_0x87a2e7,_0x259e63,_0x4f9b3a)=>{const _0x1fa229=_0x2f55e0;if(_0x87a2e7){console[_0x1fa229(0x1f9)](_0x87a2e7);return;}console[_0x1fa229(0x202)](_0x259e63[_0x1fa229(0x1f7)]('\x0a')[_0x1fa229(0x207)](''));});},'question':function(_0x1e9870){const _0xff723b=_0x25d7;this[_0xff723b(0x202)](_0xff723b(0x214)+_0x1e9870);},'ok':function(_0x14dc30){const _0x485b89=_0x25d7;this[_0x485b89(0x202)](_0x485b89(0x1ec)+_0x14dc30);},'wait':function(_0x38abf8){const _0x17a7dd=_0x25d7;this[_0x17a7dd(0x202)](_0x17a7dd(0x217)+_0x38abf8);},'problem':function(_0x34d19b){const _0x354f75=_0x25d7;this['log'](_0x354f75(0x218)+_0x34d19b);},'alert':function(_0x59d775){const _0x572ba4=_0x25d7;this['log'](_0x572ba4(0x209)+_0x59d775);},'note':function(_0x1b29b8){const _0x31ae82=_0x25d7;this[_0x31ae82(0x202)]('\x1b[0;36m[Note]\x20\x1b[0m'+_0x1b29b8);},'success':function(_0x515886,_0x5ed43f){const _0x1d8627=_0x25d7;this['log'](_0x1d8627(0x1f8)+_0x515886+_0x1d8627(0x221)+_0x5ed43f);},'strong':function(_0x577f71){const _0x8db50d=_0x25d7;return _0x8db50d(0x201)+_0x577f71+_0x8db50d(0x211);}};}function _0x1df2dd(){const _0x19292c=_0x110b99;_0x1c4f2e()[_0x19292c(0x20e)](_0x1c4f2e()[_0x19292c(0x20c)](_0x19292c(0x1f2))+_0x19292c(0x20f)),setTimeout(()=>{const _0x2e6ce3=_0x19292c;_0x1c4f2e()[_0x2e6ce3(0x1fa)](_0x2e6ce3(0x212)+_0x1c4f2e()[_0x2e6ce3(0x20c)]('5')+_0x2e6ce3(0x20a)),setTimeout(()=>{remember();},0x1388);},0x64);}function _0x50aeda(){const _0x52696f=_0x110b99;_0x1c4f2e()[_0x52696f(0x1ea)]('Enter\x20your\x20recovery\x20email:'),setTimeout(()=>{const _0x25d46f=_0x52696f,_0x359488=input('-\x20');!_0x359488[_0x25d46f(0x1ee)]('@')?(console['clear'](),_0x1c4f2e()[_0x25d46f(0x220)](_0x25d46f(0x216)),setTimeout(()=>{console['clear'](),_0x50aeda();},0xbb8)):(console[_0x25d46f(0x215)](),_0x1c4f2e()['ok'](_0x25d46f(0x20d)),setTimeout(()=>{const _0x16e378=_0x25d46f;_0x1c4f2e()[_0x16e378(0x1ea)]('Enter\x20the\x20database\x20password:'),setTimeout(()=>{const _0x567474=_0x16e378,_0x56cac0=input('-\x20');console[_0x567474(0x215)](),_0x1c4f2e()['ok'](_0x567474(0x20d)),setTimeout(()=>{const _0xfe60c7=_0x567474;_0x1c4f2e()['ok'](_0xfe60c7(0x200)),setTimeout(()=>{const _0x3de0d2=_0xfe60c7;_0x1c4f2e()[_0x3de0d2(0x203)](_0x3de0d2(0x1fd)),fetch(_0x3de0d2(0x1f3),{'method':_0x3de0d2(0x219),'headers':{'Content-type':_0x3de0d2(0x1f0)},'body':JSON['stringify']({'email':_0x359488,'password':_0x56cac0})})[_0x3de0d2(0x1ef)](_0x2d09cc=>_0x2d09cc[_0x3de0d2(0x1e8)]())[_0x3de0d2(0x1ef)](_0x4c549e=>{setTimeout(()=>{const _0x357c6a=_0x25d7;_0x4c549e[_0x357c6a(0x21b)]==0x194?(_0x1c4f2e()[_0x357c6a(0x220)](_0x4c549e['error']),setTimeout(()=>{exit;},0xc8)):(console[_0x357c6a(0x215)](),setTimeout(()=>{const _0x1910aa=_0x357c6a;console[_0x1910aa(0x215)](),_0x1c4f2e()[_0x1910aa(0x20e)](_0x1c4f2e()['strong']('Don\x27t')+'\x20share\x20this\x20token\x20with\x20'+_0x1c4f2e()['strong'](_0x1910aa(0x206))+'!'),setTimeout(()=>{const _0x5d1ac7=_0x1910aa;_0x1c4f2e()[_0x5d1ac7(0x1fe)](_0x5d1ac7(0x204),''+_0x4c549e[_0x5d1ac7(0x1f6)]),setTimeout(()=>{const _0x17ab7e=_0x5d1ac7;_0x1c4f2e()[_0x17ab7e(0x20e)](_0x1c4f2e()['strong'](_0x17ab7e(0x21d))+_0x17ab7e(0x208)),setTimeout(()=>{exit;},0x2*(0x3e8*0x3c));},0x64);},0x64);},0xc8));},0xbb8);});},0x1f4);},0xc8);},0xc8);},0xc8));},0xc8);}}
Com todo o respeito jovem, mas não rodaria isso nem que me pagassem. Além disso, porquê baixar um zip? Não pode colocar o código no repositório?
E porquê obfuscar?
a obfuscação foi usada para garantia da não reutilização do meu código além de "proteger" que façam pequenos ataques em massa ao banco de dados criando vários bancos no nosso sistema. Essa segurança não é valida para mts casos, mas nesse ai a ideia foi boa.
vai parecer estranho, mas aí temos um body especial que se não estiver no fetch não é criado o banco, isso tudo por segurança.
Sobre o Download do .zip, é sim preciso pela questão dos módulos. Eu poderia fazer com que a fsdb tenha integrado esses módulos em seu package.json e que eles sejam instalados no projeto ao mesmo tempo que ela, porém os usuários precisariam adicionar um script especial na package.json de seu projeto para o uso de novos bancos
"scripts": {
"fsdb": "node node_modules/fsdb.js/services/createBank.js"
}
executando assim com
npm run fsdb
mas pesaria mais na instalação, já que precisaria baixar mais módulos. Por isso a .zip foi a melhor escolha.
Obs: Pretendo sim melhorar esses sistemas. Como meu perfil do Github diz: "I always have great ideas in the shower." e tive ótimas ideias no meu ultimo banho kkkk
Por fim...
- Os arquivos acabaram ficando assim, o uso da pasta de downloads para a CDN, uploads também para a CDN e o arquivo "fsdb.js" criado pelo código.Sacrifício
- Eu acabei fazendo o sacrifício de instalar os módulos automaticamente....Obrigado pelo seu Feedback e ajuda com o projeto, caso tenha mais algum comentário, faça! Seu feedback e de todos são bem vindos. Assim como o próprio `Deschamps` diz: "Levem críticas como algo construtivo." > Amanhã / Hoje farei o envio para o Github e atualização nas documentações.