alexa-tracking

Main Content

1024
1024
KASKUS
51
244
https://www.kaskus.co.id/thread/53ecdea5c0cb17bb348b4567/cari-smadav-key-dengan-ruby-untuk-pemula
Cari Smadav Key dengan Ruby (untuk pemula)
Mohon maaf nih gan, kalau ane sok2 ngajarin. Kebetulan ane juga belum lama juga belajar Ruby-nya. Maksud ane cuma pengen share aja bahasa pemrograman favorit ane, supaya dapat banyak teman diskusi.
Kalau agan udah jago Ruby mohon masukannya, gan. emoticon-Malu (S)
Buat yang pemula, mudah2an ada manfaatnya. emoticon-Cendol (S)

Untuk yang belum tau algoritmanya key smadav, silakan cek ke sini:
[share] dapetin SN SMADAV 8.4 PRO pake nama yang agan pengen disini...
Ane sebenernya bukan dapat algoritma dari tret di atas, tapi dari tret lain lagi yang ane udah lupa. emoticon-Bingung (S)
Soalnya pertama kali bikin keygen smadav udah lama banget, waktu ane masih belajar Java. Tapi tenang aja, cuma ada sedikit perbedaan kok antara algoritma yang ane pake sama tret di atas.

Spoiler for Disclaimer:


Langsung aja, gan:
Code:
#!/usr/bin/ruby
$find_x = [38,56,57,57,99,15,58,12,13,17,19,18,88,58,52,52,12,13,12,57,52,98]
def generate_key name, acc_type
name = name.gsub(/[^A-Za-z0-9]/,"").upcase
acc_type = acc_type.upcase
name_array = name.split("")
data = [0, 0, 0]
name_array.each_slice(3) do |i|
i.each_with_index do |j, index|
data[index] += j.ord*name.length
end
end
data.map! {|i| i % 100 }
spec_code = case acc_type
when "PERUSAHAAN" then 99
when "WARNET" then 77
when "PERSONAL" then 18
end
data.push(spec_code, spec_code)
x = (data.inject(:+)*name.length)%22
data.pop(2)
mr_x = $find_x.at(x)
if acc_type == "PERSONAL"
spec_code1 = "08"
spec_code2 = "00"
else
spec_code1 = spec_code2 = spec_code
end
data.map! {|i| "0"*(2-i.to_s.length)+i.to_s}
key = [spec_code1,mr_x,spec_code2].push(data).join
end
print "Name : "
name = gets.chomp
print "Type : "
type = gets.chomp
type = "PERSONAL" if type == ""
key = generate_key name, type
puts "Key : #{key}"

Program di atas sudah langsung bisa dijalanin di Ruby 1.9+ (untuk Ruby versi sebelumnya mungkin perlu penyesuaian sedikit, misal seperti komennya agan fauzieuy).

UPDATE:
Quote:Ringkasan algoritma:
- Untuk mendapatkan key dibutuhkan input: nama dan tipe akun
- Cara mengolahnya:
1. Input nama hanya dipakai yang alfanumerik (alfabet dan nomer)nya saja dan dalam format uppercase (huruf besar semua). Artinya input nama seperti $@iya akan dianggap sebagai IYA karena underscore, special character, dan whitespace gak dianggep dan ASCII number (Integer ordinal disebutnya klo dalam Ruby) yang dicari adalah dari bentuk uppercasenya.
2. Pisahkan masing2 karakter nama untuk diolah satu persatu.
3. Masing2 karakter diconvert ke ASCII.
4. Kalau menurut tret di link di atas, masing2 karakter dibagi perkelompok tiga nilai lalu dikalikan dengan jumlah total karakter nama, lalu dimod (%) 100, trus hasilnya dijumlahkan ke tiga bagian berikutnya dstnya. Padahal hasilnya sama aja dengan dijumlahkan dulu setiap kelipatan tiga (karakter ke 1 dengan ke 4, ke 7, dstnya) lalu dikalikan dengan jumlah total karakter nama, akan didapat 3 buah nilai integer. Lalu stelah itu tiga hasil yg didapat di % 100. Tiga data ini akan kita pakai kemudian sebagai bagian dari key.
5. Ke dalam kelompok data tiga nilai tersebut kita tambahkan 2 data lagi yang didapat berdasarkan pilihan tipe akun yang dipilih. Data sekarang berisi 5 nilai integer.
6. Untuk langkah selanjutnya, lagi2 dipersulit di link tret di atas. Seharusnya tinggal dijumlahkan aja semuanya, dikalikan dengan total karakter nama, lalu di % 22. Akan didapat 1 nilai integer yang nantinya akan dicocokkan dengan index dari data khusus yang berisi kelompok 2 digit integer.
7. Selanjutnya 2 digit tersebut disisipkan di antara nomer key yang akan kita generate bersama dengan integer tambahan berdasarkan tipe dan tiga data yang diperoleh di awal.
Kalau belum jelas, saya akan coba lebih perjelas lagi sambil menjelaskan arti dari masing2 baris kode.


Penjelasan Kode:
Quote:Untuk baris pertama (yang pake #!), itu disebutnya shebang. Di windows mungkin gak jadi persoalan mau pake shebang ato gak, asal filenya disimpen dalam .rb .
Quote:Baris kedua adalah sekumpulan data kelompok 2 digit dalam bentuk Array (yang akan kita pakai di akhir) yang kita assign ke variable global (karena dimulai dengan tanda $) bernama $find_x. Kenapa variabel global? Karena variabel biasa (tanpa $) gak terdeteksi oleh method (fungsi) kecuali kalau find_x ikut kita lempar sebagai parameter dari generate_key bersama dengan name dan type. Kenapa methodnya gak bisa membaca adanya variabel biasa? Alasannya, deklarasi method merupakan salah satu scope gate (perbatasan scope) yang memulai scope baru. Jadi dia hanya membawa variabel global ($...), class variable (@@...), class instance variable (@...) atau constant (dimulai dari huruf kapital) ke dalam scopenya. Jadi selain $find_x sebenernya pakai @@find_x, @find_x, atau Find_x juga bisa. emoticon-Big Grin
Quote:Di baris ketiga, kita memulai deklarasi method (yang ane bahas di atas) dengan nama generate_key dan parameter name, dan acc_type. Semua kode yang menghasilkan key smadavnya ada di dalam method ini.
Quote:Nah, di baris keempat ini baru kita mulai prosesnya. Satu baris ini berfungsi sebagai langkah pertama dari ringkasan algoritma di atas. Ane akan potong2 kodenya dan jelasin maksudnya satu persatu.
gsub (global substitution) adalah method yang dipakai untuk mensubstitusi bagian string yang match dengan Regular Expression (singkatnya Regexp atau regex) /pattern/ (atau pola ekspresi reguler?? emoticon-Bingung (S)) yang diberikan di argumen pertama untuk digantikan dengan argumen keduanya.
Formulanya gini:
Code:
[B]gsub[/B](pola [I]regex[/I][B],[/B] teks pengganti)
Untuk pola regexnya:
Code:
/[^A-Za-z0-9]/
Kurung siku ([....]) itu berisi karakter yang pengen kita cari. Jika setelah kurung siku buka ada ^, maka artinya cari selain karakter tersebut. Karena gsubfungsinya untuk mensubstitusi karakter, maka kita harus mencari karakter selain yang kita inginkan untuk bisa kita ganti menjadi "" (string kosong). Selain pake gsub, kita juga bisa pake scan, versi globalnya match. Ini yang ane paling suka dari Ruby, "Ada banyak jalan menuju Roma". Hehe..
Code:
name = name.[B]scan[/B](/[A-Za-z0-9]/).join
Kalau mau tau lebih lengkap tentang regex, silakan baca di sini.
Setelah itu, string yang kita dapat diubah ke bentuk uppercasenya (huruf gede semua) pake .upcase .

Quote:Baris kelima cuma ngubah acc_type (tipe akun) ke format uppercasenya pake .upcase sama kek di baris keempat.
Quote:Di baris keenam, kita ubah string jadi array karakter dengan cara kita split dengan delimiter "" (string kosong). Jadi artinya pisahkan masing2 karakter dan masukkan ke dalam array setiap setelah tidak ketemu karakter apa2. Lalu array itu kita assign ke variabel name_array.
Quote:Di baris ketujuh, kita buat array yang berisi 3 buah nilai nol (0) lalu kita simpan di variabel data. Buat apa? Rencananya, di baris kedelapan sampai keduabelas, kita akan ubah karakter2 di string name ke dalam bentuk ordinalnya lalu dijumlahkan nilainya setiap kelipatan tiga. Maksudnya nilai yang pertama akan dijumlahkan dengan nilai keempat, ketujuh, kesepuluh, dst.
Contohnya:
Misalnya nilai ordinalnya
Code:
45 56 78 92 15 34 54 65
kita buat jadi
Code:
45   56   78
92 15 34
54 65
-------------+
191 136 112

Untuk itu kita butuh inisiasi data sebelum menjumlah nilai2 Integer tersebut dengan nilai Integer 0. Karena kalau kita inisiasi seperti ini
Code:
data = []
artinya data diisi dengan nil(Null atau null di bahasa lain), akan memunculkan error ketika kita melakukan operasi penjumlahan pada baris kesepuluh. Sebabnya, Integer tidak bisa dijumlahkan dengan nil.
Sebenarnya ada cara lain untuk membuat array dengan 3 buah nilai 0, yaitu:
Code:
data = Array.new(3, 0)

Quote:Untuk baris kedelapan sampai keduabelas, kita membuat variabel data menjadi seperti yang dicontohkan di penjelasan untuk baris ketujuh. Pertama, kita potong2 array menjadi array dengan kelipatan 3 dengan each_slice(3). Lalu kita iterasi bertingkat terhadap nilai ordinal di dalam kelompok tiga (hasil slice) dan masing2 kelompok tiga untuk kita jumlahkan nilai ordinal masing2 karakternya setelah dikalikan dengan jumlah karakter string name. (Maaf, kalau ngejelimet, gan. Intinya kita melakukan seperti yang ada di contoh penjelasan untuk baris ketujuh.)
Di baris kedelapan, array data kita kelompokkan pertiga data lalu masing2 tiga data tersebut dilempar ke blok (dimulai dari do di baris ini sampai ke end di baris keduabelas) lalu ditangkap oleh blok dan diberi nama i (|i|).
Di baris kesembilan, i kita iterasi lagi dengan each_with_index dimana iterator tersebut akan melemparkan 2 buah objek yaitu nilai ordinal masing2 karakter di dalam 3 data (i) yang kita tangkap dengan variabel j (|j|) dan urutan iterasi (atau biasa disebut index di ruby) yang kita tangkap dengan variabel (yang kebetulan kita kasih nama) index.
Baris kesepuluh adalah penjumlahan yang udah kita bahas di atas.
Untuk lebih jelasnya, baris ini
Code:
data[index] += j.ord * name.length
artinya sama aja ama ini
Code:
data[index] = data[index] + j.ord * name.length
Baris ke 11 - 12(end) untuk nutup masing2 blok iterasi.

Quote:Pada baris ke 13, data diiterasi dengan map lalu masing2 data di % 100. Hasil berupa array yang disimpan lagi di variabel data. Tanda ! artinya agar dipergunakan dengan hati2 karena map! mengubah array di tempat.
Quote:Pada baris ke 14 - 18, case - when digunakan seperti switch - case di bahasa lain, yaitu pernyataan bersyarat yang akan mengembalikan nilai atau menjalankan suatu instruksi apabila nilai setelah case cocok dengan nilai setelah when. Dalam kasus ini Integer akan diberikan oleh pernyataan case - when dan diassign ke variabel spec_code (special code) apabila acc_type sesuai dengan salah satu string setelah when. Contohnya, apabila acc_type adalah "WARNET", maka nilai 77 akan diassign ke variabel spec_code.
Quote:Di baris ke 19, spec_code ditambahkan ke array data lewat belakang sebanyak dua kali. Artinya spec_code menjadi anggota ke 4 (indeks no 3) dan ke 5 (indeks no 4) di array data.
Untuk sisanya silakan dipelajari sendiri, gan.
emoticon-Sundul Up
di sini ada peminat ruby gak sih? emoticon-Bingung (S)
belum pernah coba ruby gan...
tapi liat sekilas kayak gabungan python sams vb...
keren gan hasilnya....
dapat algo na dari reversing?
Iya, gan. Ruby ini emang terinspirasi banyak dari scripting language pendahulunya, gan. Tapi ane kurang paham juga apakah terinspirasi dari vbscript juga apa gak.
Ane dulu dapet algonya dari tret di kaskus, gan. Tapi udah lama banget, jd ane gk tau lagi linknya. Link tret yang ane sebutin di atas itu mendekati ama yang dulu ane dapet.
Ane akan coba jelasin satu persatu, gan. Mulai dari ringkasan algonya abis itu code per linenya. Siapa tau agan ato agan2 yang lain jadi minat jg. emoticon-Big Grin
emoticon-Sundul Up
sambil ane ngaso, gan.
emoticon-Sundul Up Haloooo!! Ruby enthusiast. Where r u?
Quote:Original Posted By kaskus.junker
Iya, gan. Ruby ini emang terinspirasi banyak dari scripting language pendahulunya, gan. Tapi ane kurang paham juga apakah terinspirasi dari vbscript juga apa gak.
Ane dulu dapet algonya dari tret di kaskus, gan. Tapi udah lama banget, jd ane gk tau lagi linknya. Link tret yang ane sebutin di atas itu mendekati ama yang dulu ane dapet.
Ane akan coba jelasin satu persatu, gan. Mulai dari ringkasan algonya abis itu code per linenya. Siapa tau agan ato agan2 yang lain jadi minat jg. emoticon-Big Grin

"Often people, especially
computer engineers, focus on
the machines. They think, "By
doing this, the machine will
run faster. By doing this, the
machine will run more
effectively. By doing this, the
machine will something
something something." They
are focusing on machines. But
in fact we need to focus on
humans, on how humans care
about doing programming or
operating the application of
the machines. We are the
masters. They are the slaves.“
- Yukihiro Matsumoto

According to its authors, Ruby was influenced by Perl , Smalltalk , Eiffel, Ada , and Lisp . It supports multiple programming paradigms, including functional, object-oriented , and
imperative . It also has a dynamic type system and automatic memory management .

vbscript kaga masup gan

woh ada pengguna ruby juga toh di kaskus emoticon-Selamat
Quote:Original Posted By Azimi17

vbscript kaga masup gan

woh ada pengguna ruby juga toh di kaskus emoticon-Selamat

Wah, sip deh, gan. Thanks infonya. Firasat ane juga vbs emang gk masup. emoticon-Smilie Tapi ane baca di mana gitu (lupa sumbernya), dia sedikit terpengaruh sama python jg. Mungkin ane salah baca kali. emoticon-Malu (S) Maklum, baru bisa baca tulis, gan. emoticon-Ngakak (S)
gan mau tanya itu di line 19 yang ini
Code:
 data[index] += j.ord*name.length


.ord* itu apaan yak?
Quote:Original Posted By fauzieuy
gan mau tanya itu di line 19 yang ini
Code:
 data[index] += j.ord*name.length


.ord* itu apaan yak?

.ord itu Integer ordinal disebutnya kalau dalam ruby. Atau representasi dari urutan (a.k.a ordinal) karakter2 dalam nilai Integer (Fixnum). Kalau dalam ilmu komputer biasa disebut ASCII number.

Kalau yang bintang (*) itu perkalian biasa aja, gan. Maksudnya angka ASCIInya dikalikan dengan panjang karakter string yang disimpen di variabel name.

Maaf, gan, ane blom sempet jelasin sampe sono. Ane baru sadar, trnyata capek jg nulis itu ya. Hehe.. emoticon-Big Grin
Ane cicil aja ya, gan, jelasinnya.
Quote:Original Posted By kaskus.junker
.ord itu Integer ordinal disebutnya kalau dalam ruby. Atau representasi dari urutan (a.k.a ordinal) karakter2 dalam nilai Integer (Fixnum). Kalau dalam ilmu komputer biasa disebut ASCII number.

Kalau yang bintang (*) itu perkalian biasa aja, gan. Maksudnya angka ASCIInya dikalikan dengan panjang karakter string yang disimpen di variabel name.

Maaf, gan, ane blom sempet jelasin sampe sono. Ane baru sadar, trnyata capek jg nulis itu ya. Hehe.. emoticon-Big Grin
Ane cicil aja ya, gan, jelasinnya.


thanks gan penjelasannya emoticon-Big Grin , baru baca-baca lagi , ternyata ord belum ada di ruby 1.8, adanya dari ruby 1.9 keatas, btw kalo di ruby 1.8 pake nya gini kan

Code:
data[index] += j[0]*name.length
Quote:Original Posted By fauzieuy


thanks gan penjelasannya emoticon-Big Grin , baru baca-baca lagi , ternyata ord belum ada di ruby 1.8, adanya dari ruby 1.9 keatas, btw kalo di ruby 1.8 pake nya gini kan

Code:
data[index] += j[0]*name.length


Oo.. gitu ya, gan. Baru tau ane. emoticon-Malu (S)
Kebetulan ane pakenya 2+. Kalau di 2+ pake j[0] tetep jadi karakter, gan.
Btw, ane googling sebentar barusan, katanya emang baru ada di 1.9, gan. Hehe.. emoticon-Big Grin
Quote:Original Posted By kaskus.junker
Wah, sip deh, gan. Thanks infonya. Firasat ane juga vbs emang gk masup. emoticon-Smilie Tapi ane baca di mana gitu (lupa sumbernya), dia sedikit terpengaruh sama python jg. Mungkin ane salah baca kali. emoticon-Malu (S) Maklum, baru bisa baca tulis, gan. emoticon-Ngakak (S)

dri wikipedia gan

"I was talking with my
colleague about the possibility
of an object-oriented scripting
language. I knew Perl (Perl4,
not Perl5), but I didn't like it
really, because it had the smell
of a toy language (it still has).
The object-oriented language
seemed very promising. I
knew Python then. But I didn't
like it, because I didn't think it
was a true object-oriented
language — OO features
appeared to be add-on to the
language. As a language
maniac and OO fan for 15
years, I really wanted a
genuine object-oriented, easy-
to-use scripting language. I
looked for but couldn't find
one. So I decided to make it."
- Matz


btw udh ada rumah buat ruby di kaskus? emoticon-Bingung (S)
Quote:Original Posted By Azimi17

dri wikipedia gan

"I was talking with my
colleague about the possibility
of an object-oriented scripting
language. I knew Perl (Perl4,
not Perl5), but I didn't like it
really, because it had the smell
of a toy language (it still has).
The object-oriented language
seemed very promising. I
knew Python then. But I didn't
like it, because I didn't think it
was a true object-oriented
language — OO features
appeared to be add-on to the
language. As a language
maniac and OO fan for 15
years, I really wanted a
genuine object-oriented, easy-
to-use scripting language. I
looked for but couldn't find
one. So I decided to make it."
- Matz


btw udh ada rumah buat ruby di kaskus? emoticon-Bingung (S)

Oo.. haha.. ane bacanya ada kata Perl ama Pythonnya aja. Ternyata terbukti ane baru bisa baca tulis. emoticon-Ngakak (S)
Tapi karena dia udah nyobain bahasa2 itu pasti dia terpengaruh juga, meskipun terpengaruhnya untuk gak membuat yang sama kek gitu. emoticon-Big Grin

Rumah buat ruby maksudnya gimana, gan? emoticon-Bingung (S)
ane longtime ruby user juga gan emoticon-Big Grin

thread ane: http://www.kaskus.co.id/post/5352af2...cf17e66a0003a8

cuma sekarang lagi fokus di js emoticon-Stick Out Tongue
Quote:Original Posted By crimson.code
ane longtime ruby user juga gan emoticon-Big Grin

thread ane: http://www.kaskus.co.id/post/5352af2...cf17e66a0003a8

cuma sekarang lagi fokus di js emoticon-Stick Out Tongue


Wow, udah ada ya. Tapi keknya lebih fokus ke diskusi rails ya, gan.

Ane pengen bikin juga sih yang khusus ruby to'.
Jadi ngebahas tentang dasar2 ruby (mungkin bisa ngebahas beberapa library kecil juga), klo bisa pake contoh yang menarik biar pada terjerat (kek ane, gan, gak bisa pindah ke lain hati setelah ketemu ruby. Lebay!! emoticon-Wink )

Tapi ternyata nulis tret itu capek ya. emoticon-Cape d... (S) Susah bgt keknya bikin kalimat aja. Hehe..

Btw, udah nyoba coffee script, gan?
Quote:Original Posted By kaskus.junker


Wow, udah ada ya. Tapi keknya lebih fokus ke diskusi rails ya, gan.

Ane pengen bikin juga sih yang khusus ruby to'.
Jadi ngebahas tentang dasar2 ruby (mungkin bisa ngebahas beberapa library kecil juga), klo bisa pake contoh yang menarik biar pada terjerat (kek ane, gan, gak bisa pindah ke lain hati setelah ketemu ruby. Lebay!! emoticon-Wink )

Tapi ternyata nulis tret itu capek ya. emoticon-Cape d... (S) Susah bgt keknya bikin kalimat aja. Hehe..

Btw, udah nyoba coffee script, gan?


coffeescript?
udah sering

cuma lebih nyaman pakai javascript ajah emoticon-Stick Out Tongue
Quote:Original Posted By crimson.code


coffeescript?
udah sering

cuma lebih nyaman pakai javascript ajah emoticon-Stick Out Tongue


Oo.. I see. Keknya ada cerita menarik nih dibalik kembalinya agan ke js. emoticon-Big Grin Bikin tret aja, gan, "coffeescript vs javascript". emoticon-Hammer (S)
Quote:Original Posted By kaskus.junker


Oo.. I see. Keknya ada cerita menarik nih dibalik kembalinya agan ke js. emoticon-Big Grin Bikin tret aja, gan, "coffeescript vs javascript". emoticon-Hammer (S)


lagi penuh kerjaan gan emoticon-Big Grin

belum ada waktu buat bikin thread lagi emoticon-linux2
sambil mejeng emoticon-Sundul Up