bandung_pasupati_skyline

100 KM

Kemarin terlibat percakapan dengan teman yang sehari menempuh tak kurang dari 26 km pulang pergi dari tempat tinggal-nya hingga kantor di Kuningan. Sehingga dalam waktu 4 hari jarak tempuh yang dia lalui sudah lebih dari 100 km. Secara reflek saya lumayan terkejut, karena panjangnya jarak tempuh itu, belum lagi waktu yang digunakan mengingat jalanan di Jakarta yang sering macet.

Kemudian saya befikir, berapa jarak tempuh harian yang saya habiskan. Ternyata setelah saya hitung, sehari saya berkendara tak kurang dari 28 km. Artinya dalam 4 hari saya telah menempuh 112 km. Bukan karena semata jarak rumah ke kantor yang jauh, karena jarak ke kantor hingga ke rumah hanya 7 km saja, tapi karena hampir setiap hari pulang pergi mengantar dan menjemput anak dari sekolah. Belum lagi setiap hari hari selasa melakukan perjalan Bandung – Jakarta PP, total waktu di jalan lebih lama lagi.

Biasanya rute harian di saat berada di Bandung adalah: Rumah -> Sekolah Anak -> Kantor -> Sekolah Anak (menjemput) -> Rumah -> Kantor -> Rumah.

Waktu yang banyak dihabiskan di Jalan tentunya punya risiko, risiko waktu yang tersia (karena hati yang tidak berdzikir) dan juga risiko jika terjadi musibah (a’udzubillah min dzaalik).

Semoga setiap jengkal perjalanan tercatat menjadi amal shalih yang menghantarkan ke surga. Aamiin

 

gambar ilustrasi dari wikipedia, jalan yang setiap ke/dari kantor saya lewati.

A Good Tree

Have you not considered how Allah presents an example, [making] a good word like a good tree, whose root is firmly fixed and its branches [high] in the sky?

It produces its fruit all the time, by permission of its Lord. And Allah presents examples for the people that perhaps they will be reminded.

Translation of al-Qur’an surah Ibrahim verse 24-25

b1wh6p5ccaafj0i

 

Barakah

Barakah berarti kebajikan yang melimpah dan beraneka ragam serta bersinambung. Ar-Raghib al-Ashfahani, Abu al-Qasim al-Husain ibn Mufaddal ibn Muhammad, menyebutkan bahwa keberkahan Ilahi datang dari arah yang sering kali tidak diduga atau dirasakan secara material dan tidak pula dapat dibatasi atau bahkan diukur. Sehingga, segala penambahan yang tidak terukur oleh indra dinamai barakah/berkah.

Keberkahan waktu adalah banyaknya kebajikan yang dapat terlaksana dalam satu waktu dan biasanya banyaknya aktivitas kebajikan tersebut tidak dapat terlaksana dalam rentang waktu tersebut. Jika dalam sehari tidak banyak kebajikan yang dikerjakan, artinya waktu yang dimiliki tidaklah berkah.

Apakah harimu berkah hari ini?

Trend Micro CTF Asia Pacific & Japan 2015 Online Qualifier Writeup: Analysis-offensive 200

Melanjutkan tulisa writeup sebelumnya, ini challenge kedua yang saya selesaikan. Kebetulan yang di analisis adalah apk android, jada saya berusaha untuk menyelesaikannya meskipun dengan susah payah (maklum noobs :D).

soal:
Category: Analysis-offensive
Points: 200

Click button to get the flag!
Link apk

Begitu mendapatkan apk, yang pertama saya lakukan adalah mengekstraknya, setelah melihat-lihat resource asset yang ada di apk saya mendapati file image bernama f.png, yang ternyata tidak bisa di buka dengan image viewer, mencurigakan :D. Akhirnya saya lihat dengan hexeditor, ternyata header file-nya hilang, saya balikin deh header-nya, dan ternyata saya dapat gambar ini:

f

haha.., ternyata ga semudah itu untuk mendapatkan flagnya. Ok, kalau gitu coba cara kedua, Pertama saya coba jalankan aplikasinya di emulator, ternyata saat di jalankan akan muncul splash screen, setelah itu muncul halaman baru dimana kita bisa klik akan membunuh virus (ada gambar virus/bakteri terhapus), dan nampaknya untuk menyelesaikannya butuh klik 10 juta kali haha…

Screen Shot 2015-09-27 at 8.13.23 PM

Challenge accepted, secara naif saya membuat uiautomator buat klik halaman tersebut sebanyak 10 juta kali (maunya), dan setelah di run beberapa saat, saya perkirakan klik tersebut baru akan selesai setelah 500 jam-an, hahaha..Ok, solusi ga feasible ni.

Selanjutnya saya analisis aplikasinya waktu runtime dengan drozer dan saya menemukan ada dua kemungkinan attack yang bisa dilakukan satu pada activity dan satu broadcast receiver yang bisa di invoke dari luar aplikasi, dua attack vector tersebut adalah dua kelas ini:

  1. activity: com.tm.ctf.clicker.activity.SplashActivity
  2. broadcast receiver: com.tm.ctf.clicker.receiver.ScoreBroadcastReceiver

Jadinya saya menggunakan dex2jar untuk mendecompile dex file-nya menjadi yang kemudian dengan bantuan JD-GUI saya bisa mendecompile jar untuk mengira kode java-nya:

Screen Shot 2015-09-27 at 7.53.34 PM

wah, ternyata ada activity bernama CongraturationsActivity, ini menarik, janga-jangan kalau saya invoke activity itu secara langsung, saya bisa dapat flag-nya. Secara naif saya langsung eksekusi ide itu. Pertama, saya manipulasi apk dengan dengan apktool supaya CongraturationsActivity bisa di invoke dari luar aplikasi, selanjutnya dengan bantuna drozer saya coba invoke activity-nya, dan…ternyata ga bisa hahaha..Ok, kalau gitu mari lihat code-nya:

Pertama, CongraturationsActivity, oh ternyata di kelas ini di cek apakah counter yang ada di shared preference sudah 10 juta atau belum, kalau belum, close activitiynya, ini rupanya yang membuat cara sebelumnya ga jalan Screen Shot 2015-09-27 at 8.03.06 PM

Ok, dengan itu saya coba beberapa cara, karena running di emulator saya bisa langsung memanipulasi nilai shared preference-nya, saat runtime dan ternyata saat halaman itu muncul, flag-nya ga dapat, karakter yang ditampilkan berantakan bukan flag yg dicari hahaha..;

Wah, harus serius kalau gitu, jadilah akhirnya dibaca sebagian besar code-nya secara lebih teliti. dan akhirnya cara menyelesaikannya secara singkat adalah dengan mendecode apk-nya dengan apktool, dimodifikasi code-nya dan di build kembali pakai apktool di jalankan, kemudian di kirim broadcast Score 7 nilai supaya string data terisi semuanya, dan kemudian tampilkan flag-nya melalui kelas CongraturationsActivity tadi. Cara panjangnya adalah sebagai berikut:

1. decompile apk dengan apktool
2. ubah di kelas CongraturationsActivity agar tidak di close meskipun data shared preferences bukan 10000000, mudahnya ganti line 150 pada kelas CongraturationsActivity.smali dari

if-eq v0, v1, :cond_0

jadi

if-ne v0, v1, :cond_0

sehingga kalau bukan 10M malah ga di close activitynya

3. ubah di kelas c.smali di method onTouchEvent
pindah code smali berikut di awal (aslinya ini hanya di eksekusi kalau sudah 10 juta klik)


    invoke-static {}, Landroid/os/Message;->obtain()Landroid/os/Message;

    move-result-object v0

    new-instance v1, Ljava/lang/StringBuilder;

    iget-object v2, p0, Lcom/tm/ctf/clicker/activity/c;->q:Ljava/lang/String;

    invoke-static {v2}, Ljava/lang/String;->valueOf(Ljava/lang/Object;)Ljava/lang/String;

    move-result-object v2

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    const-string v2, "Jh"

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    iput-object v1, v0, Landroid/os/Message;->obj:Ljava/lang/Object;

    iget-object v1, p0, Lcom/tm/ctf/clicker/activity/c;->b:Landroid/os/Handler;

    invoke-virtual {v1, v0}, Landroid/os/Handler;->sendMessage(Landroid/os/Message;)Z

4. selanjutnya build ulang dengan apktool
5. sign dengan jarsigner
6. install kembali apk ke hp/emulator
7. jalankan aplikasi
8. saat halaman mainactivity muncul, kirim broadcast message berikut dengan menggunakan drozer

run app.broadcast.send --action com.tm.ctf.clicker.SCORE --component com.tm.ctf.clicker com.tm.ctf.clicker.receiver.ScoreBroadcastReceiver --extra integer SCORE 3769
run app.broadcast.send --action com.tm.ctf.clicker.SCORE --component com.tm.ctf.clicker com.tm.ctf.clicker.receiver.ScoreBroadcastReceiver --extra integer SCORE 10007
run app.broadcast.send --action com.tm.ctf.clicker.SCORE --component com.tm.ctf.clicker com.tm.ctf.clicker.receiver.ScoreBroadcastReceiver --extra integer SCORE 59239
run app.broadcast.send --action com.tm.ctf.clicker.SCORE --component com.tm.ctf.clicker com.tm.ctf.clicker.receiver.ScoreBroadcastReceiver --extra integer SCORE 100003
run app.broadcast.send --action com.tm.ctf.clicker.SCORE --component com.tm.ctf.clicker com.tm.ctf.clicker.receiver.ScoreBroadcastReceiver --extra integer SCORE 495221
run app.broadcast.send --action com.tm.ctf.clicker.SCORE --component com.tm.ctf.clicker com.tm.ctf.clicker.receiver.ScoreBroadcastReceiver --extra integer SCORE 1000003
run app.broadcast.send --action com.tm.ctf.clicker.SCORE --component com.tm.ctf.clicker com.tm.ctf.clicker.receiver.ScoreBroadcastReceiver --extra integer SCORE 9999999

9. selanjutnya klik halaman mainactivity sekali, tunggu sebentar flag akan muncul
TMCTF{Congrats_10MClicks}

Screen Shot 2015-09-26 at 7.12.07 PM

Trend Micro CTF Asia Pacific & Japan 2015 Online Qualifier Writeup: Programming 200

Weekend ini saya ikut bermain CTF Trend Micro Qualifier 2015 bersama teman-teman kantor, sangat menarik dan menantang (banyak yang susah menurut saya :D), terutama bagi newbie dalam CTF seperti saya. Writeup dari dua soal yang saya selesaikan akan di tulis dalam dua postingan terpisah, berikut yang pertama (yang kedua ada di link ini https://jampasir.wordpress.com/2015/09/27/trend-micro-ctf-asia-pacific-japan-2015-online-qualifier-writeup-analysis-offensive-200/), soal Programming dengan skor 200

soal

# Calculate it.
# nc ctfquest.trendmicro.co.jp 51740

saat nc ke server tersebut kita akan mendapat soal matematika dengan berbagai variasinya dan harus menjawabnya dengan dengan cepat sebelum timeout, ada yang dalam bentuk sederhana (misal 5 + 5) atau dalam format romawi (misal V + IX) atau dalam format kata (misal one + zero – seven) atau kombinasi ketiganya (misal 5 + one – IX). challenge ini saya selesaikan dengan membuat python, berikut log-nya:

awalnya
awalnya

selanjutnya: Screen Shot 2015-09-27 at 12.55.46 PM

akhirnya:

Screen Shot 2015-09-27 at 12.56.15 PM

dapat flagnya: TMCTF{U D1D 17!}
berikut kode python yang saya buat untuk menyelesaikan challenge tersebut (berantakan tambal sulam, ga diperbaiki apa adanya ini mah :D ):

Read More »

Membuat bot Telegram

Terinspirasi dari tulisan pak Yohanes, akhirnya tadi malam saya berhasil membuat bot untuk Telegram setelah membaca tutorial yang dibuat oleh pak Yohanes tersebut. Bedanya hanya url webhook-nya saya arahkan ke salah satu endpoint API dari aplikasi saya yang lain yang saya buat dengan SlimFramework dan saya tidak menggunakan stream php://input untuk membaca post data dari telegram tapi langsung menggunakan fungsi dari slim buat baca data

$body = $app->request->getBody();

 

Bot ini berfungsi untuk mendapatkan data hadits dan terjemahnya dari beberapa kitab hadits. command-nya adalah sebagai berikut:

/<periwayat> <nomorhadits>
misalnya:
/ahmad 200
untuk mendapatkan informasi hadits nomor 200 pada kitab musnad Ahmad

dimana nama periwayatnya adalah sebagai berikut:

  1. bukhari untuk kitab shahih bukhari
  2. muslim untuk kitab shahih muslim
  3. ahmad untuk kitab musnad Imam Ahmad
  4. tirmidzi untuk kitab sunan at-tirmidzi
  5. nasai untuk kitab sunan an-nasa’i
  6. darimi untuk kitab sunan ad-darimi
  7. malik untuk kitab al-muwaththa’ karya Imam Malik
  8. ibnumajah untuk kitab sunan Ibnu Majah, dan
  9. abudaud untuk kitab hadits sunan Abu Dawud

silahkan langsung menambahkan bot-nya di sini @hadits_bot

 

semoga bermanfaat. Aamiin

Android Unit: px (pixel), dp/dip (density-independent pixel) dan sp (scale-independent pixels)

tldr;

selalu gunakan sp untuk teks dan dp untuk yang lainnya. Kecuali, benar-benar terpaksa dan tahu benar konsekuensinya, gunakanalah px.

Ekosistem android dikenal dengan fragmentasi spesifikasi device yang sangat bervariasi. Tentunya ini tantangan tersendiri bagi developer. Untungnya, untuk masalah screen density yang bervariasi, sepertinya sudah diantisipasi oleh para pengembang platform Android di Google, dengan memperkenalkan dua unit/satuan baru yaitu dip/dp (density-independent pixel) dan sp (scale-independent pixels).

Misalkan ada dua tablet 7-inch (ukuran diagonal layar), tablet pertama (A) memiliki resolusi layar  1200x1920px 320dpi dan yang lainnya (B) beresolusi 2048x1536px 326dpi. Membuat button dengan ukuran 300x300px mungkin akan tampak normal pada  tablet tapi akan tampak kecil di tablet

Tapi akan berbeda jika kita spesifikasikan ukuran buttonnya dengan ukuran yang bergantung pada density layar alias menggunakan dip misal 300x300dp.

secara fisik ukuran button tersebut akan selalu sama pada ukuran layar yang berbeda.

Perhatikan gambar berikut:

Screen Shot 2015-07-15 at 1.45.58 PM

ukuran 200dp akan dikonversi pada device mdpi (device dengan density 160dpi/dots per inch) menjadi 200px dan menjadi 400px pada device xhdpi (density 420dpi) misal pada nexus 4. Sehingga ukuran tersebut tampak sama dan konsisten secara fisik untuk beragam device dengan ukuran layar yang berbeda.

serupa dengan dp adalah sp (scaled-independent pixels) yang kita gunakan untuk ukuran teks. Perbedaannya, dengan menggunakan satuan sp android akan menscale ukuran teks sesuai dengan setting ukuran teks di device (yang biasa dapat di akses melalui menu settings).

Jadi, selalu gunakan sp untuk teks dan dp untuk yang lainnya. Kecuali, kamu benar-benar terpaksa dan tahu benar konsekuensinya, jangan menggunakan satuan px. Jika kebetulan designer yang bekerja bersama anda belum tahu, beritahukan untuk selau menginformasikan spesifikasi design dengan dp/sp. Beberapa website berikut akan sangat membantu:

  1. http://developer.android.com/guide/practices/screens_support.html
  2. http://developer.android.com/training/multiscreen/screendensities.html
  3. http://dpi.lv/
  4. https://pixplicity.com/dp-px-converter/
  5. https://www.youtube.com/watch?v=zhszwkcay2A

Tulisan ini terinspirasi setelah membaca status path Sidiq (salah satu Android Developer Expert dari Indonesia )