Soal kali ini sedikit seram yang dibuat sama abang _bogeyman_.
This file contains hidden or 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
$LOAD_PATH << '.' | |
require 'transomware' | |
# Source tanpa obfuscate | |
# Cuma simple ransomware | |
# Tapi jangan mencobanya pada sembarang directory | |
# Jika data anda terencrypt karena menjalankan program ini maka itu adalah 10000000% kesalahan anda, jangan meminta saya membalikan data anda | |
# Kecuali bayarannya pas :D | |
def banner | |
puts "="*50 | |
<<-banner | |
╔╦╗┬─┐┌─┐┌┐┌┌─┐┌─┐┌┬┐┬ ┬┌─┐┬─┐┌─┐ | |
║ ├┬┘├─┤│││└─┐│ │││││││├─┤├┬┘├┤ | |
╩ ┴└─┴ ┴┘└┘└─┘└─┘┴ ┴└┴┘┴ ┴┴└─└─┘ | |
created by : _bogeyman_ | |
gimme u'r money or this files keep to be encrypted. | |
banner | |
end | |
def main | |
puts "="*50 | |
puts banner | |
puts "="*50 | |
Dir["*.*"].each do |x| | |
if not x.include? ".rb" | |
Transomware.encrypt(x) | |
end | |
end | |
end | |
main |
This file contains hidden or 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
require "securerandom" | |
module Transomware | |
@time = Time.now.to_i * 0xff | |
def Transomware.random | |
r = Random.new(@time) | |
r.seed | |
return r.rand(31337) | |
end | |
def Transomware.encrypt(file) | |
File.open(file, 'rb') do |f| | |
File.open("#{SecureRandom.hex(3)}.TRANS", 'wb') do |o| | |
o.write( | |
f.read.bytes.collect do |byte| | |
byte & 255 ^ Transomware.random | |
end.pack("C*") | |
) | |
end | |
end | |
puts "="*50 | |
puts "HAHAHAHA, file #{file} kena Transomware!" | |
end | |
end | |
Mari kita banyak menganalisa disini, pertama di file trans.rb memanggil module file transomware.rb yang dilakukan di file trans.rb adalah meload file yang ada di directory dimana file ruby ini di jalankan yang mana bukan merupakan file berektensi .rb jadi kita tidak tahu apa hasil decrypt file ini. Jadi mari kita lihat di modulenya disana ada memanggil time dan dimasukkan ke random kemudian di berikan range 31337 yang kemudian nilai random ini di panggil untuk di operasikan xor dengan byte-byte data yang akan di enkripsi. Radom??? hmmmm APA INI? kenapa harus random. Bagaimana kita bisa mengembalikannya tentu kita harus tahu time kapan di modif file tersebut oleh script ini. Untuk mendapatkan waktunya dapat menggunakan File.stat("nama_file").mtime .
Pada tantangan ini saya belum bisa mendapatkan flag pada saat lomba di karenakan Timezone yang tersetting di laptop saya menggunakan UTC, namun yang pada soal menggunakan Timezone Asia/Makasar walaupun pada saat sesi lomba panitia sudah mengeluarkan hit yang di suruh mencari waktu yang tepat.
This file contains hidden or 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
require "securerandom" | |
require "time" | |
module Transomware | |
@time = Time.parse("2016-11-26 11:35:58 +0800").to_i * 0xff | |
def Transomware.random | |
r = Random.new(@time) | |
r.seed | |
return r.rand(31337) | |
end | |
def Transomware.encrypt(file) | |
File.open(file, 'rb') do |f| | |
File.open("#{SecureRandom.hex(3)}.txt", 'wb') do |o| | |
o.write( | |
f.read.bytes.collect do |byte| | |
byte & 255 ^ Transomware.random | |
end.pack("C*") | |
) | |
end | |
end | |
puts "="*50 | |
puts "HAHAHAHA, file #{file} kena Transomware!" | |
end | |
end | |
Dengan langsung jalankan untuk mendapatkan file yang asli setelah itu untuk mengecek header filenya sudah benar dapat menggunakan file * .
Ada 2 extensi yang kemungkinan flagnya pdf atau zip archive ( kemungkinan .docx). Pertama mari cek file docxnya terlebih dahulu.
0 comments:
Post a Comment