# -*- coding: utf-8 -*- # index.ps1 - Script principal do cliente param() # Configurações $serverApiUrl = "https://win.jd.net.br/api" $dataFile = "$env:TEMP\client_data.json" # Função para obter Hardware ID function Get-HardwareId { try { $computerInfo = Get-WmiObject Win32_ComputerSystemProduct $hardwareId = $computerInfo.UUID if ([string]::IsNullOrEmpty($hardwareId)) { $hardwareId = (Get-WmiObject Win32_BIOS).SerialNumber } return $hardwareId } catch { return "ERROR_$([Environment]::MachineName)" } } # Função para coletar informações do sistema function Get-SystemInfo { return @{ computername = $env:COMPUTERNAME username = $env:USERNAME ipaddress = (Invoke-RestMethod -Uri "https://api.ipify.org" -UseBasicParsing) hardwareid = Get-HardwareId } } # Função para enviar dados para o servidor function Send-ToServer { param( [string]$Endpoint, [hashtable]$Data ) try { $jsonData = $Data | ConvertTo-Json $response = Invoke-RestMethod -Uri "$serverApiUrl/$Endpoint" -Method Post -Body $jsonData -ContentType "application/json" -UseBasicParsing return $response } catch { return $null } } # Função para mostrar tela de registro function Show-RegistrationScreen { Clear-Host Write-Host "========================================" -ForegroundColor Cyan Write-Host " PRIMEIRO ACESSO - REGISTRO " -ForegroundColor Yellow Write-Host "========================================" -ForegroundColor Cyan Write-Host "" $systemInfo = Get-SystemInfo Write-Host " USUARIO: $($systemInfo.username)" -ForegroundColor White Write-Host "" $password = Read-Host "DIGITE UMA SENHA PARA REGISTRAR ESTE ACESSO" -AsSecureString $confirmPassword = Read-Host "CONFIRME A SENHA" -AsSecureString $plainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)) $plainConfirm = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($confirmPassword)) if ($plainPassword -ne $plainConfirm) { Write-Host "SENHAS NAO CONFEREM!" -ForegroundColor Red Start-Sleep -Seconds 2 return $null } if ([string]::IsNullOrEmpty($plainPassword)) { Write-Host "SENHA NAO PODE SER VAZIA!" -ForegroundColor Red Start-Sleep -Seconds 2 return $null } $registerData = @{ computername = $systemInfo.computername username = $systemInfo.username ipaddress = $systemInfo.ipaddress hardwareid = $systemInfo.hardwareid password = $plainPassword action = "register" } return $registerData } # Função para mostrar tela de login function Show-LoginScreen { param([hashtable]$SystemInfo) Clear-Host Write-Host "========================================" -ForegroundColor Cyan Write-Host " ACESSO AO SISTEMA " -ForegroundColor Yellow Write-Host "========================================" -ForegroundColor Cyan Write-Host "" Write-Host "BEM-VINDO, $($SystemInfo.username)!" -ForegroundColor Green Write-Host "" $password = Read-Host "DIGITE SUA SENHA" -AsSecureString $plainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($password)) $loginData = @{ computername = $SystemInfo.computername username = $SystemInfo.username hardwareid = $SystemInfo.hardwareid password = $plainPassword ipaddress = $SystemInfo.ipaddress action = "login" } return $loginData } # Função para mostrar opções de recuperação function Show-RecoveryOptions { param([hashtable]$SystemInfo) Clear-Host Write-Host "========================================" -ForegroundColor Cyan Write-Host " CONFLITO DE INFORMACOES " -ForegroundColor Red Write-Host "========================================" -ForegroundColor Cyan Write-Host "" Write-Host "FORAM DETECTADAS INFORMACOES CONFLITANTES:" -ForegroundColor Yellow Write-Host "" Write-Host "1. ENTRAR EM CONTATO COM O SUPORTE PARA RECUPERAR SUA CONTA" -ForegroundColor White Write-Host "2. CRIAR UMA NOVA CONTA (IRA SUBSTITUIR AS INFORMACOES)" -ForegroundColor White Write-Host "3. SAIR" -ForegroundColor White Write-Host "" $option = Read-Host "ESCOLHA UMA OPCAO (1-3)" switch ($option) { "1" { Write-Host "`nPOR FAVOR, ENTRE EM CONTATO COM O SUPORTE EM: suporte@jd.net.br" -ForegroundColor Cyan Write-Host "INFORME OS SEGUINTES DADOS:" -ForegroundColor Yellow Write-Host " COMPUTADOR: $($SystemInfo.computername)" -ForegroundColor White Write-Host " USUARIO: $($SystemInfo.username)" -ForegroundColor White Write-Host " HARDWARE ID: $($SystemInfo.hardwareid)" -ForegroundColor White Write-Host " IP: $($SystemInfo.ipaddress)" -ForegroundColor White Read-Host "`nPRESSIONE ENTER PARA SAIR" exit } "2" { return "new_account" } default { exit } } } # Programa principal try { # Configurar console para UTF-8 chcp 65001 > $null 2>&1 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 [Console]::InputEncoding = [System.Text.Encoding]::UTF8 $systemInfo = Get-SystemInfo # Verifica se já existe um arquivo de sessão local if (Test-Path $dataFile) { $localData = Get-Content $dataFile -Encoding UTF8 | ConvertFrom-Json $loginData = Show-LoginScreen -SystemInfo $systemInfo if ($loginData) { $result = Send-ToServer -Endpoint "login" -Data $loginData if ($result -and $result.success) { Write-Host "`nLOGIN REALIZADO COM SUCESSO!" -ForegroundColor Green Write-Host "BEM-VINDO AO SISTEMA!" -ForegroundColor Yellow Start-Sleep -Seconds 2 # Salva sessão $sessionData = @{ computername = $systemInfo.computername username = $systemInfo.username lastlogin = (Get-Date) } | ConvertTo-Json Set-Content -Path $dataFile -Value $sessionData -Encoding UTF8 Clear-Host Write-Host "SISTEMA INICIADO COM SUCESSO!" -ForegroundColor Green Write-Host "PRESSIONE QUALQUER TECLA PARA SAIR..." -ForegroundColor Yellow Read-Host } else { Write-Host "`nFALHA NO LOGIN. SENHA INCORRETA OU CONTA NAO ENCONTRADA." -ForegroundColor Red Start-Sleep -Seconds 2 $recoveryResult = Show-RecoveryOptions -SystemInfo $systemInfo if ($recoveryResult -eq "new_account") { $registerData = Show-RegistrationScreen if ($registerData) { $result = Send-ToServer -Endpoint "register" -Data $registerData if ($result -and $result.success) { Write-Host "`nCONTA CRIADA COM SUCESSO!" -ForegroundColor Green Start-Sleep -Seconds 2 } } } } } } else { $registerData = Show-RegistrationScreen if ($registerData) { $result = Send-ToServer -Endpoint "register" -Data $registerData if ($result -and $result.success) { Write-Host "`nREGISTRO REALIZADO COM SUCESSO!" -ForegroundColor Green Start-Sleep -Seconds 2 $sessionData = @{ computername = $systemInfo.computername username = $systemInfo.username lastlogin = (Get-Date) } | ConvertTo-Json Set-Content -Path $dataFile -Value $sessionData -Encoding UTF8 } else { Write-Host "`nERRO AO REGISTRAR. TENTE NOVAMENTE MAIS TARDE." -ForegroundColor Red Start-Sleep -Seconds 3 } } } } catch { Write-Host "ERRO: $($_.Exception.Message)" -ForegroundColor Red Start-Sleep -Seconds 5 }