Skip to content

Instantly share code, notes, and snippets.

@Konstantinusz
Created April 9, 2015 21:38
Show Gist options
  • Save Konstantinusz/3ee60e7f0cc08ab18e82 to your computer and use it in GitHub Desktop.
Save Konstantinusz/3ee60e7f0cc08ab18e82 to your computer and use it in GitHub Desktop.
#!/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&reg_email__=#{CGI.escape(email)}&reg_email_confirmation__=#{CGI.escape(email)}&reg_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&reg_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