Created
April 9, 2015 21:38
-
-
Save Konstantinusz/3ee60e7f0cc08ab18e82 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/ruby | |
require "json" | |
require "cgi" | |
require "yaml" | |
class String_succ | |
attr_accessor :abc,:value_hash,:symbol_hash | |
def initialize(digits) | |
@abc=digits.split(//) | |
@value_hash=Hash[*abc.collect.with_index.map{|e,i| [e,i]}.flatten] | |
@symbol_hash=value_hash.invert | |
end | |
def rand_word(n) | |
(1..n).map{|i| abc.sample(1)[0]}.join | |
end | |
def next_value(s) | |
if s==abc[-1] then | |
return abc[0] | |
end | |
ret=s.dup | |
last_digit_symbol=s[-1] | |
last_digit_value=value_hash[last_digit_symbol] | |
last_digit_next_value=(last_digit_value+1) % abc.size | |
if last_digit_next_value==0 then | |
return "#{next_value(ret[0..-2])}#{symbol_hash[last_digit_next_value]}" | |
else | |
last_digit_next_symbol=symbol_hash[last_digit_next_value] | |
ret[-1]=last_digit_next_symbol | |
return ret | |
end | |
end | |
def prev_value(s) | |
if s==abc[0] then | |
return abc[-1] | |
end | |
ret=s.dup | |
last_digit_symbol=s[-1] | |
last_digit_value=value_hash[last_digit_symbol] | |
last_digit_prev_value=(last_digit_value-1) | |
if last_digit_prev_value==-1 then | |
return "#{prev_value(ret[0..-2])}#{symbol_hash[abc.size+last_digit_prev_value]}" | |
else | |
last_digit_prev_symbol=symbol_hash[last_digit_prev_value] | |
ret[-1]=last_digit_prev_symbol | |
return ret | |
end | |
end | |
def prev_n_value(s,n) | |
t=s | |
(1..n).map{|z| t=prev_value(t)} | |
end | |
def next_n_value(s,n) | |
t=s | |
(1..n).map{|z| t=next_value(t)} | |
end | |
end #class | |
def switch_endpoint | |
localhost = Net::Telnet::new("Host" => "localhost", "Port" => "9051", "Timeout" => 10, "Prompt" => /250 OK\n/) | |
localhost.cmd('AUTHENTICATE ""') { |c| print c; throw "Cannot authenticate to Tor" if c != "250 OK\n" } | |
localhost.cmd('signal NEWNYM') { |c| print c; throw "Cannot switch Tor to new route" if c != "250 OK\n" } | |
localhost.close | |
end | |
def check_username(s,n,st,vip) | |
JSON.load(%x{torify curl -s 'http://web-#{n}.citromail.hu/checkusername.php' -H 'Origin: http://web-#{n}.citromail.hu' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.8,hu;q=0.6' -H 'User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36' -H 'Content-type: application/x-www-form-urlencoded' -H 'Accept: */*' -H 'Cache-Control: max-age=0' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' -H 'If-Modified-Since: Thu, 01 Jan 1970 00:00:00 GMT' -H 'Referer: http://web-#{n}.citromail.hu/regisztracio_1.vip?invite=&id=&uname=&fb=' --data 'nickname=#{s}&st=#{st}&vip=#{vip}' --compressed}) | |
end | |
def get_st_vip() | |
begin | |
n=rand(10)+10 | |
html=%x{torify curl -s 'http://web-#{n}.citromail.hu/regisztracio_1.vip?invite=&id=&uname=&fb=' -H 'Origin: http://web-#{n}.citromail.hu' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: en-US,en;q=0.8,hu;q=0.6' -H 'User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36' -H 'Content-type: application/x-www-form-urlencoded' -H 'Accept: */*' -H 'Cache-Control: max-age=0' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' -H 'If-Modified-Since: Thu, 01 Jan 1970 00:00:00 GMT' -H 'Referer: http://web-#{n}.citromail.hu/regisztracio_1.vip?invite=&id=&uname=&fb=' --compressed -L}.force_encoding("iso-8859-2").encode("utf-8") | |
vip=html.scan(/\"\/regisztracio_1\.vip\?invite=\&id\=\&uname\=\&fb\=\&vip\=(.*?)\"/).flatten[0] | |
st=html.scan(/\<input type\=\"hidden\" name\=\"st\" value\=\"(.*?)\"[^>]*\/\>/).flatten[0] | |
raise StandardError.new if st==nil || vip == nil | |
rescue StandardError => e | |
puts "retry..." | |
retry | |
end | |
return [n,st,vip] | |
end | |
Csere=["öüóőúéáűíÖÜÓŐÚÉÁŰÍ","ouooueauiouooueaui"] | |
def ekezet(s) | |
s.split(//).map{|c| i=Csere[0].index(c);if i then Csere[1][i] else c end}.join | |
end | |
def rand_digits(len) | |
(1..len).to_a.map{|d| rand(10).to_s}.join | |
end | |
def check_list(list) | |
temp=[] | |
list.each_slice(30){|slice| | |
print "."; | |
temp.push *slice.pmap{|u| nev=ekezet(u);nev=nev+rand_digits(5-nev.size) if nev.size < 5;n,st,vip=get_st_vip();ret=check_username(nev,n,st,vip);[nev,ret]} | |
switch_endpoint | |
} | |
return temp | |
end | |
def check_face2(email) | |
ret=%x{curl 'https://www.facebook.com/ajax/registration/validation/contactpoint_invalid/?contactpoint=#{CGI.escape(email)}&__user=0&__a=1&__dyn=7wiXwNAwZwzx6bGexe8XWo5O12wAxu3mdwqovzEkw&__req=f&__rev=1681606' -H 'accept-encoding: gzip, deflate, sdch' -H 'accept-language: en-US,en;q=0.8,hu;q=0.6' -H 'user-agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36' -H 'accept: */*' -H 'referer: https://www.facebook.com/?stype=lo&jlou=AfeiLDiSEc0l0qyH2ET7upFbOw-wJYALK7ia5ZxUiVUXO-LapXWfKLoX5gZEJ3cM8BIZFPqA8lPPhHnx-FecoHZcdCF_oKTkolZcalASrCxvdg&smuh=38988&lh=Ac-BfKqzqPN9MUJA' -H 'cookie: reg_uniqid=5525c3f5b0bb5; datr=86f8U1pVko52wC3B_ciPoo4P; a11y=%7B%22sr%22%3A0%2C%22sr-ts%22%3A1428492644302%2C%22jk%22%3A0%2C%22jk-ts%22%3A1428492644302%2C%22kb%22%3A1%2C%22kb-ts%22%3A1428538185650%2C%22hcm%22%3A0%2C%22hcm-ts%22%3A1428492644302%7D; fr=0uVkljQ4Dmzjye78S.AWXhuo6Jjz7H1QGOWU_3IqCTpnc.BT_Kg7.yH.AAA.0.AWUlhD8g; locale=hu_HU; lu=RAQt4-0gj11eN0EwCmUtFF5w; reg_fb_ref=https%3A%2F%2Fwww.facebook.com%2F%3Fstype%3Dlo%26jlou%3DAfeiLDiSEc0l0qyH2ET7upFbOw-wJYALK7ia5ZxUiVUXO-LapXWfKLoX5gZEJ3cM8BIZFPqA8lPPhHnx-FecoHZcdCF_oKTkolZcalASrCxvdg%26smuh%3D38988%26lh%3DAc-BfKqzqPN9MUJA; reg_fb_gate=https%3A%2F%2Fwww.facebook.com%2F%3Fstype%3Dlo%26jlou%3DAfeiLDiSEc0l0qyH2ET7upFbOw-wJYALK7ia5ZxUiVUXO-LapXWfKLoX5gZEJ3cM8BIZFPqA8lPPhHnx-FecoHZcdCF_oKTkolZcalASrCxvdg%26smuh%3D38988%26lh%3DAc-BfKqzqPN9MUJA; wd=922x576; act=1428538650920%2F12' --compressed -L} | |
JSON.load(ret.scan(/{.*}/).flatten[0]) | |
end | |
def check_face(email) | |
ret=%x{curl -s 'https://www.facebook.com/ajax/register.php' -H 'origin: https://www.facebook.com' -H 'accept-encoding: gzip, deflate' -H 'accept-language: en-US,en;q=0.8,hu;q=0.6' -H 'user-agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36' -H 'content-type: application/x-www-form-urlencoded' -H 'accept: */*' -H 'referer: https://www.facebook.com/?stype=lo&jlou=AfeiLDiSEc0l0qyH2ET7upFbOw-wJYALK7ia5ZxUiVUXO-LapXWfKLoX5gZEJ3cM8BIZFPqA8lPPhHnx-FecoHZcdCF_oKTkolZcalASrCxvdg&smuh=38988&lh=Ac-BfKqzqPN9MUJA' -H 'cookie: reg_uniqid=5525c3f5b0bb5; datr=86f8U1pVko52wC3B_ciPoo4P; a11y=%7B%22sr%22%3A0%2C%22sr-ts%22%3A1428492644302%2C%22jk%22%3A0%2C%22jk-ts%22%3A1428492644302%2C%22kb%22%3A1%2C%22kb-ts%22%3A1428538185650%2C%22hcm%22%3A0%2C%22hcm-ts%22%3A1428492644302%7D; fr=0uVkljQ4Dmzjye78S.AWXhuo6Jjz7H1QGOWU_3IqCTpnc.BT_Kg7.yH.AAA.0.AWUlhD8g; locale=hu_HU; lu=RAQt4-0gj11eN0EwCmUtFF5w; reg_fb_ref=https%3A%2F%2Fwww.facebook.com%2F%3Fstype%3Dlo%26jlou%3DAfeiLDiSEc0l0qyH2ET7upFbOw-wJYALK7ia5ZxUiVUXO-LapXWfKLoX5gZEJ3cM8BIZFPqA8lPPhHnx-FecoHZcdCF_oKTkolZcalASrCxvdg%26smuh%3D38988%26lh%3DAc-BfKqzqPN9MUJA; reg_fb_gate=https%3A%2F%2Fwww.facebook.com%2F%3Fstype%3Dlo%26jlou%3DAfeiLDiSEc0l0qyH2ET7upFbOw-wJYALK7ia5ZxUiVUXO-LapXWfKLoX5gZEJ3cM8BIZFPqA8lPPhHnx-FecoHZcdCF_oKTkolZcalASrCxvdg%26smuh%3D38988%26lh%3DAc-BfKqzqPN9MUJA' --data 'lsd=AVpTEGN3&lastname=Kiss&firstname=Dettina®_email__=#{CGI.escape(email)}®_email_confirmation__=#{CGI.escape(email)}®_passwd__=jelszo&birthday_year=1997&birthday_month=11&birthday_day=16&sex=1&referrer=&asked_to_login=0&terms=on&ab_test_data=AAAAJASJkSJtk%2FJAbAJAASAAAAAAAAAJAAAAAAAADn%2FrLDAADDSAAG&contactpoint_label=email_or_phone&locale=hu_HU®_instance=86f8U1pVko52wC3B_ciPoo4P&captcha_persist_data=AZm99sivaaAVvluwaOBKnJi-Py76wxRLCpDHBAm4eLVCR9fq_vhXQzR54JYSULVC27Wphh8rbAEB3PiI1dzQg4ay4ZFA0P1YEk3dUpL-3_--LHJcM_4jDUTNQkIzYBtg4wlEbrWrGNHLeNPWyTLLYAPwVXfwkLXoU7w6chcv55S1iYDNuLEJtl7Gi5JbMOty4P4zT2PADi6iaC-z5oHV6GkFelqHyS0E4fLytzxh4Obyfx8IZnJIWxMTBxwA8qM5Uio-IUKehJSL24vE-yqEsEe-kGnr25gSeyTi4h-HXXf1L2AxVQC3NGEBzv0cGGJCW9N_y1r4n0X3naOyTY4rl9glyeJMFbwPfGVXkRvkoTt_tA&captcha_session=lDNaraOd7Aj8CeMvUKqAyg&extra_challenge_params=authp%3Dnonce.tt.time.new_audio_default%26psig%3Dt9YmSrDRVxDgDJC2L_Gr7mBZdBQ%26nonce%3DlDNaraOd7Aj8CeMvUKqAyg%26tt%3DlFNRGKTaUH4JAWfnv8xNvctU2NM%26time%3D1428538557%26new_audio_default%3D1&recaptcha_type=password&captcha_response=&qsstamp=W1tbMCwyOCwzNiw0MSw2NCw3OSw4NiwxMTUsMTI2LDE0OSwxNjcsMTczLDIxMCwyMjcsMjUzLDI2MSwyNzMsMjk2LDMzNSwzMzcsMzQyLDM0OCwzNzksMzg0LDM4NiwzODgsNDI4LDQ0NCw0OTIsNTAyLDUwOSw1MTIsNTE0LDUyNSw1MzAsNTQ1LDU1NSw1NTksNjE0LDYzNiw3OTAsODI0XV0sIkFaa041VkVQTWl6azhUNUlQNzFfRDFLMHlsYkN6Y2d3WVZpZW5FTUdJeS1NelJGSk1fMm5hVDRwMjluSXkzY2s3WWNVYlF6VUNyQVhFdHpkQkdCMklBclk2WGhRODI5NTFSMVoydDE1cHBiWXhQY3JQNm1vVzg0Q05sY045dWJBR0kwaUg4Vmw3SUZMZVhIZUZUVXhNSDBsdFdwRjc2NXVjdnFCbnFDYUE4YnFZajJYMUd0cE5qdUpMX3VIWDRuN0N6VGI5bzhOSDYwMG9FX0xkRklUZnpPZHJBOGlhU0g4NExMU05LTkQzSmtZTlEiXQ%3D%3D&ignore=captcha&__user=0&__a=1&__dyn=7wiXwNAwZwzx6bGexe8XWo5O12wAxu3mdwqovzEkw&__req=h&__rev=1681606' --compressed -L}; | |
js=JSON.load(ret.scan(/{.*}/).flatten[0]); | |
#js["payload"]["error"]["__html"].scan(/meglévő fiókhoz tartozik/).size == 1 | |
if (js["payload"]["error"]["__html"] rescue nil) != nil then | |
return js["payload"]["error"]["__html"].gsub(/\<.*?\>/,"") | |
elsif (js["jsmods"]["markup"][0][1]["__html"] rescue nil) != nil then | |
return js["jsmods"]["markup"][0][1]["__html"].gsub(/\<.*?\>/,"") | |
else | |
return ret.gsub(/\<.*?\>/,"") | |
end | |
end | |
def word_entropy(word) | |
len = word.chars.count.to_f | |
log2 = Math.log(2) | |
counts = word.chars.inject({}) do |h,c| | |
h[c] = (h[c] || 0) + 1 | |
h | |
end | |
counts.inject(0) do |entropy, pair| | |
frequency = (pair[1] / len) | |
entropy = (frequency * (Math.log(frequency) / log2)) | |
end.abs | |
end | |
def digram(text) | |
dig={} | |
for i in 0..text.size-2 | |
puts "#{(100*(i.fdiv text.size)).round(2)} %" if (i+1) % 1000 ==0;print 13.chr; | |
act_dig=ekezet(text[i..i+1]).downcase | |
if dig[act_dig]==nil then | |
#print act_dig if i % 100 == 0; | |
dig.merge!({act_dig=>1}) | |
else | |
dig[act_dig]+=1 | |
#print "#{act_dig} -> #{dig[act_dig]}" if i % 100 ==0;print 13.chr; | |
end | |
end | |
hash=Hash[*dig.map{|k,v| [k,(v.fdiv dig.select{|w,z| w[0]==k[0]}.map{|w,z| z}.inject(:+))]}.flatten] | |
hash.default=hash.min_by{|k,v| v}[1] | |
return hash | |
end | |
def trigram(text) | |
trig={} | |
for i in 0..text.size-3 | |
puts "#{100*((i.fdiv text.size)).round(2)} % " if (i+1) % 1000 ==0;print 13.chr; | |
act_trig=ekezet(text[i..i+2]).downcase | |
if trig[act_trig]==nil then | |
#print act_dig if i % 100 == 0; | |
trig.merge!({act_trig=>1}) | |
else | |
trig[act_trig]+=1 | |
#print "#{act_dig} -> #{dig[act_dig]}" if i % 100 ==0;print 13.chr; | |
end | |
end | |
hash=Hash[*trig.map{|k,v| [k,(v.fdiv trig.select{|w,z| w[0..1]==k[0..1]}.map{|w,z| z}.inject(:+))]}.flatten] | |
hash.default=hash.min_by{|k,v| v}[1] | |
return hash | |
end | |
def digram_measure(word,normalized_digram) | |
temp=digram(word).to_a.map{|z| z[0]}.map{|q| normalized_digram[q]}.inject(:*) | |
m=temp | |
#m=temp.map{|z| (z.fdiv max)}.inject(:*) | |
if m==nil then | |
return 0.0 | |
else | |
return m | |
end | |
end | |
def trigram_measure(word,normalized_trigram) | |
temp=trigram(word).to_a.map{|z| z[0]}.map{|q| normalized_trigram[q]} | |
sum=1.0 #temp.inject(:+) | |
m=temp.map{|z| (z.fdiv sum)}.inject(:*) | |
#m=temp.map{|z| (z.fdiv max)}.inject(:*) | |
if m==nil then | |
return 0.0 | |
else | |
return m | |
end | |
end | |
def dig_measure_additive(word,normalized_digram) | |
temp=digram(word).to_a.map{|z| z[0]}.map{|q| normalized_digram[q]}.inject(:+) | |
m=temp | |
#m=temp.map{|z| (z.fdiv max)}.inject(:*) | |
if m==nil then | |
return 0.0 | |
else | |
return m | |
end | |
end | |
def test_random_words(n,normalized_dig) | |
max=0; | |
maxwords=Array.new(10,max); | |
(1..n).each{|i| puts i if i%1000==0; | |
w=" #{sc.rand_word(13)} ".gsub(/[\._]+/,""); | |
d=digram_measure(w,dig3); | |
if d>max then | |
max=d; | |
maxwords.shift; | |
maxwords.push([d,w]) | |
end | |
} | |
return maxwords | |
end | |
def test(norm_dig,len) | |
sc=String_succ.new("abcdefghijklmnopqrstuvwxyz") | |
max=0; | |
maxwords=[]; | |
minwords=[]; | |
(1..20000).each{|i| | |
puts i if i % 1000==0; | |
w=sc.rand_word(len); | |
d=digram_measure(w,norm_dig); | |
if maxwords.size<25 then | |
maxwords.push [d,w] | |
minwords.push [d,w] | |
else | |
smaller=maxwords.collect.with_index.find{|z,i| z[0]<d} | |
bigger=minwords.collect.with_index.find{|z,i| z[0]>d} | |
if smaller != nil then | |
index=smaller[1] | |
maxwords[index]=[d,w] | |
end | |
if bigger != nil then | |
index=bigger[1] | |
minwords[index]=[d,w] | |
end | |
end; | |
} | |
return [maxwords.sort_by{|z| z[0]},minwords.sort_by{|z| z[0]}] | |
end | |
def test_trig(norm_trig,len) | |
sc=String_succ.new("abcdefghijklmnopqrstuvwxyz") | |
max=0; | |
maxwords=[]; | |
minwords=[]; | |
(1..20000).each{|i| | |
puts i if i % 1000==0; | |
w=sc.rand_word(len); | |
d=trigram_measure(w,norm_trig); | |
if maxwords.size<25 then | |
maxwords.push [d,w] | |
minwords.push [d,w] | |
else | |
smaller=maxwords.collect.with_index.find{|z,i| z[0]<d} | |
bigger=minwords.collect.with_index.find{|z,i| z[0]>d} | |
if smaller != nil then | |
index=smaller[1] | |
maxwords[index]=[d,w] | |
end | |
if bigger != nil then | |
index=bigger[1] | |
minwords[index]=[d,w] | |
end | |
end; | |
} | |
return [maxwords.sort_by{|z| z[0]},minwords.sort_by{|z| z[0]}] | |
end | |
def get_max_possible(norm_trig,n) | |
kezdo=norm_trig.sort_by{|k,v| v}.group_by{|k,v| k[0..1]} | |
vege=norm_trig.sort_by{|k,v| v}.group_by{|k,v| k[1..2]} | |
kezdo.map{|k,v| | |
szo="" | |
szorzat=1.0; | |
temp=v.last | |
puts temp.inspect | |
szo<<temp[0][0..2] | |
szorzat*=temp[1] | |
(0..n-4).each{|i| | |
temp=kezdo[temp[0][1..2]].last | |
puts temp.inspect | |
szo<<temp[0][2] | |
szorzat*=temp[1] | |
} | |
[szo,szorzat] | |
}.max_by{|z| z[1]} | |
end | |
def get_random_possible(norm_trig,n) | |
kezdo=Hash[norm_trig.sort_by{|k,v| v}.group_by{|k,v| k[0..1]}.map{|k,v| [k,v.collect.with_index.map{|z,i| [z[0],z[1],v[0..i].map{|q| q[1]}.inject(:+)]}]}] | |
szo="" | |
szorzat=1.0; | |
r=rand; | |
temp=kezdo.to_a.sample(1)[0][1].find{|z| z[2]>r} | |
puts temp.inspect | |
szo<<temp[0][0..2] | |
szorzat*=temp[1] | |
(0..n-4).each{|i| | |
r=rand | |
temp=kezdo[temp[0][1..2]].find{|z| z[2]>r} | |
puts temp.inspect | |
szo<<temp[0][2] | |
szorzat*=temp[1] | |
} | |
[szo,szorzat] | |
end | |
trig3=YAML.load(File.read("ember_tragediaja_trigram.yaml")) | |
cgi=CGI.new(:accept_charset => "UTF-8") | |
n=cgi["n"].to_i || 10 | |
len=cgi["len"].to_i || 6 | |
puts "Content-Type: text/plain; charset=\"UTF-8\"" | |
puts "Access-Control-Allow-Origin: *" | |
puts "\n\n" | |
puts Hash[trig3.map{|k,v| [k,v.round(5)] }].inspect.to_s.split(", ").each_slice(7).to_a.map{|slice| | |
slice.map{|e| | |
e | |
}.join(", ") | |
}.join(",\n") | |
puts "===============================================================" | |
(1..n).each{|i| | |
puts get_random_possible(trig3,len).inspect | |
puts "-------------------------------------------------------" | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment