Pitch: Fsdb - Agora o imgur perde usuários!

👋 Opa!

  • Olá, meu nome é Lucas tenho 14 anos e hoje venho aqui apresentar a vocês a Fsdb ( Ou fsdb.js ) Um módulo totalmente desenvolvido por mim. Ainda em beta, porém com grandes planos no papel para serem desenvolvidos.

  • Oque ela faz?

A fsdb é um módulo com o objetivo inicial de ser uma Database, porém tive algumas ideias boas e resolvi transformar ela em um "mix" geral, agora tendo a CDN de envio de imagens ( Muito simples ) e a database de fácil uso.

📄 Documentação

🎲 Desenvolvedor

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 ```json "scripts": { "fsdb": "node node_modules/fsdb.js/services/createBank.js" } ``` executando assim com ```sh-session 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
Sugiro você validar qualquer dado sensível ou restrição de acesso via back end, nunca no client, nem mesmo obfuscando código. Não sei onde você está hospedado seu server, mas em caso de phishing, spam, DDos ou qualquer outra coisa, valide o acesso pelo servidor. Tu pode bloquear o acesso pelo ip, token de acesso e outras coisas. E mais uma dica/sugestão, não faça seus usuários baixarem um arquivo zip com um node_modules e um index.js obfuscado. Isso tira toda a credibilidade do projeto. Sugiro você refatorar toda essa parte e tornar as coisas mais claras. Se seus usuários quiserem burlar ou fazer ataque em massa no teu server, eles vão. Nem o Google, Facebook e outras cambadas estão livres disso. E não se preocupe se vão reutilizar seu código, copiar ou etc. Se fizerem isso, encare como uma homenagem, porque você fez um trabalho digno de cópia. (no bom sentido claro). Arrume esses detalhes e dê um exemplo de como usar o teu banco de dados (sem ter que baixar zip nenhum) que vai ficar show.
Ok, eu tive uma ideia enquanto já estava deitado e prestes a dormir e vim codar, ainda vai conter prováveis bugs, mas o resultado ficou assim: - Apartir do momento que usarem o "connect" do módulo é verificado se existe na pasta local dentro de um .json que é automaticamente baixado pela fsdb o seguinte item: `createdBanks`, caso ele exista, ok, o código não será executado novamente, caso não, partil criar o sistema de criação de contas no projeto do usuário. - Esse arquivo que foi passado para a "main" do projeto nomeado de saved é o antigo arquivo no seu formato original, sem ser obfuscado ( e até melhorado ). - Como mostrei o código, da para ver que ele pega a package.json e adiciona um script da fsdb, que executa o arquivo de criação

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.
Entendo perfeitamente oq diz, obrigado por escrever isso e vou lhe dar um retorno assim que eu modificar esse "ambiente de criação". Caso queira também pode dar uma estrelinha na Github para ser notificado, além de que também irá me ajudar! Minha ideia é transportar isso e deixar o mais usual possível, assim como disse, usar algum script de execução via npm run seria uma boa ideia, porém vem a questão de módulos... Obrigado pelo seu feedback.
Fora que pode conter qualquer coisa nesse script obfuscado e dentro da node_modules. Não passa confiança. E não foi tão dificil fazer uma engenharia reversa nesse index.js
Sim, sim, irei tentar melhorar isso. Pois é, não é difícil de perceber que sim, é algo inocente, mas users curiosos podem olhar e se assustar, pensar que queremos algo a mais, sem nem fazer a engenharia reversa e ler a verdadeira "origem" do código.

14 Anos criando um projetão desses ? Absurdo! kkkk Parabéns maninho, continue assim

vlw irmão, tamo junto! 💜