u0m3 Posted September 7, 2017 Report Share Posted September 7, 2017 Cu ocazia aniversarii a zece ani de FileList, au decis sa lanseze mai multe surprize, unda dintre acestea fiind: Quote 10th anniversary gift! Începând cu 04 septembrie până în 11 septembrie inclusiv, o dată la 24 de ore puteți da click pe cadoul din stânga paginii și veți primi un cadou din partea site-ului. Cadoul este similar cu gift box-ul din Shop și puteți câștiga: Upload, FLCoins, Invitații, FLTokens, VIP. Toate bune si frumoase, doar ca, daca esti tampit ca mine si ai gasit prima data giftbox-ul la ora 5 dimineata (sau pentru oamenii normali, esti ocupat) si nu ai cum sa verifici la 24 de ore, vei pierde din premii*. Si cum suntem cu totii 0xH4X0R1 pe aici am decis sa fac un mic script in PowerShell (daca am chef/rabdare il voi face si in Python) care sa se ocupe de problema: Spoiler function Get-FileListLogin { Param ( [parameter(Mandatory=$true)] [String] $Username, [parameter(Mandatory=$true)] [String] $Password, [parameter(Mandatory=$false)] [Int] $Unlock = 1 ) Process { $requestBody = @{ username = $Username; password = $Password; unlock = $Unlock; }; $webRequest = Invoke-WebRequest -Uri 'https://filelist.ro/takelogin.php' -Method Post -Body $requestBody -SessionVariable session -Verbose; if ($webRequest.StatusCode -eq 200) { Write-Debug -Message 'Loggin succesfull. Returning session variable.'; return $session; } else { Write-Debug -Message "Failed to login $($webRequest.StatusCode): $($webRequest.StatusDescription)."; return $false; } } } function Get-FileListGift { Param ( [parameter(Mandatory=$true)] $Session ) Process { $webRequest = Invoke-WebRequest -Uri 'https://filelist.ro/gift.php' -Method Get -MaximumRedirection 0 -WebSession $Session -Verbose; if ($webRequest.StatusCode -eq 200) { Write-Debug -Message 'Request succesfull. Returning raw content.'; return $webRequest.RawContent; } elseif (($webRequest -ge 300) -and ($webRequest -lt 400) -and ($webRequest.Headers.Location -eq '/login.php')) { Write-Debug -Message 'Request failed. You need to login.'; return $false; } else { Write-Debug -Message "Request failed with code $($webRequest.StatusCode): $($webRequest.StatusDescription). Returning request response."; return $webRequest; } } } function Invoke-FileListGetGift { Param ( [parameter(Mandatory=$true)] [String] $Username, [parameter(Mandatory=$true)] [String] $Password, [parameter(Mandatory=$false)] [Int] $Unlock = 1 ) Process { $doLoop = $true; $session = $false; while ($doLoop) { if ($session -eq $false) { $session = Get-FileListLogin -Username $Username -Password $Password -Unlock $Unlock; } $ret = Get-FileListGift -Session $session; if ($ret -eq $false) { $session = $false; } elseif ($(Get-TypeName -InputObject $ret) -eq 'HtmlWebResponseObject') { Write-Debug -Message "'Get-FileListGift' returned a 'HtmlWebResponseObject'."; } elseif ($(Get-TypeName -InputObject $ret) -eq 'String') { $sleepSeconds = 0; if ($ret -cmatch '(?i)You already claimed a gift in the last 24 hours! Please check back again in (?<hours>\d+)h (?<minutes>\d+)m (?<seconds>\d+)s.') { $hours = $matches['hours']; $minutes = $matches['minutes']; $seconds = $matches['seconds']; $sleepSeconds = ((($hours -as [Int])*60 + ($minutes -as [Int]))*60 + ($seconds -as [Int])); Write-Host -Object $matches[0]; } elseif ($ret -cmatch '(?i)You won (?<prize>.*)!') { $sleepSeconds = 24*60*60; Write-Host -Object $matches[0]; } else { Write-Debug -Message "Whoops! Page did not say we won nor did it say we need to wait... Strange... Here is the content:"; Write-Debug -Message $ret; } Write-Host -Object "Sleeping for $sleepSeconds seconds..."; Start-Sleep -Seconds $sleepSeconds; } else { Write-Debug -Message "This should have never reached. Get-TypeName -InputObject `$ret -FullName = $(Get-TypeName -InputObject $ret -FullName)"; } } } } Mod de utilizare: Copy - Paste la cod intr-o fereastra de PowerShell apoi rulati Invoke-FileListGetGift. Salvati codul intr-un fisier *.ps1 apoi din PowerShell ii faceti source: adica scrieti in consola ". .\NumeFisier.ps1" (atentie la punctul din fata - e ca la bash) apoi rulati Invoke-FileListGetGift. Daca doriti sa vedeti mesajele de debug setati $DebugPreference = "Continue" in consola din care rulati apoi apelati Invoke-FileListGetGift. 9 Quote Link to comment Share on other sites More sharing options...
u0m3 Posted September 8, 2017 Author Report Share Posted September 8, 2017 Versiunea Python2 dupa cum am promis. Imi cer scuze legat de calitatea codului. Spoiler #!/usr/bin/env python2 import cookielib import urllib import urllib2 import re import time import logging # Config fl_username = 'FileList_username' fl_password = 'FileList_password' # Globals cj = None opener = None # URLS fl_login_url = 'https://filelist.ro/takelogin.php' fl_gift_url = 'https://filelist.ro/gift.php' # MISC match_regex = r"You won (?P<prize>.*)!|You already claimed a gift in the last 24 hours! Please check back again in (?P<hours>\d+)h (?P<minutes>\d+)m (?P<seconds>\d+)" def login(username, password, unlock=1): # type: (str, str, bool) -> [None, False, True] global opener log = logging.getLogger('main.login') login_data = urllib.urlencode({ 'username': username, 'password': password, 'unlock': unlock }) response = opener.open(fl_login_url, login_data) if response.code == 200: body = response.read() if body.find('User sau parola gresite.') == -1: log.info('Successfully logged in.') return True else: log.info('Failed to log in. Wrong username or password.') return None else: log.warn('Failed to log in. Request answered with non-200 code.') return False def get_gift(): global opener log = logging.getLogger('main.get_gift') response = opener.open(fl_gift_url) if response.code == 200: if response.url.find('login.php') != -1: log.info('We need to login again.') return False else: log.info('We have received the gift page. Returning contents for parsing') return response.read() else: # How did we get here? And where is HERE? log.warn('We have reached an unexplored zone of space-time.') return None def main(): global cj, opener logging.basicConfig( level=logging.DEBUG, format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', datefmt='%Y-%m-%dT%H:%M:%S' ) log = logging.getLogger('main') cj = cookielib.CookieJar() opener = urllib2.build_opener( urllib2.HTTPRedirectHandler(), urllib2.HTTPHandler(debuglevel=0), urllib2.HTTPSHandler(debuglevel=0), urllib2.HTTPCookieProcessor(cj) ) do_loop = True log.info('Setup complete. Entering loop.') while do_loop: ret = get_gift() if ret is False: log.info('We were not logged in. Logging in.') login(fl_username, fl_password) elif ret is None: log.error('For some reason we need to exit the loop.') do_loop = 0 else: match = re.search(match_regex, ret, re.IGNORECASE) if match: prize = match.group('prize') wait_hours = int(match.group('hours')) wait_minutes = int(match.group('minutes')) wait_seconds = int(match.group('seconds')) if prize is not None: wait_hours = 24 wait_minutes = 0 wait_seconds = 0 log.info('Congratz! You got %s' % str(prize)) else: log.info( 'We need to wait %d hours %d minutes %d seconds' % (wait_hours, wait_minutes, wait_seconds) ) wait_time = (wait_hours * 60 + wait_minutes) * 60 + wait_seconds log.info('Sleeping for %d seconds' % wait_time) time.sleep(wait_time) else: # How did we end up here?!?!?!?! log.error('Toto, we are not in Kansas anymore!') if __name__ == '__main__': main() 4 Quote Link to comment Share on other sites More sharing options...