___ ___                                 .__              
     /   |   \   ____ ___  ___         _______|__| ____   ____  
    /    ~    \_/ __ \\  \/  /  ______ \___   /  |/    \_/ __ \ 
    \    Y    /\  ___/ >    <  /_____/  /    /|  |   |  \  ___/ 
     \___|_  /  \___  >__/\_ \         /_____ \__|___|  /\___  >
           \/       \/      \/               \/       \/     \/ 
    
            Ketika saya mengakses remix, ada hal yang sangat menarik untuk di telusuri yaitu 
            liqquidity front runner bot.
             
            
            
            Sebetulnya apa sih itu? 
            Dari nama nya saja sudah jelas bot ini bisa dikatakan dapat menghasilkan uang dengan memotong 
            kumpulan likuiditas BNB di PancakeSwap tapi nyatanya SCAM.
            
            Saat ini marak sekali penipuan dari dunia crypto 
            dan juga mereka cara menyebar umpan kepada orang awam bisa lewat berbagai cara misal youtube,telegram, discord, dsb.

            Kali ini saya ingin membongkar suatu trick mereka, salah satunya mereka memasarkan 
            via youtube kalian bisa check video nya youtube ini 
            
            

            serta mengajak korban untuk menbuild smartcontract yang sudah mereka tautkan di deskripsi video, biasanya diposting di Ghostbin atau Pastebin, 
            Karena pada video tsb, si penipu menyuruh orang untuk mengirimkan sejumlah BNB kepada contract yang di deploy, kemudian nanti user tsb di suruh untuk 
            click button Action, dengan iming2 wallet anda akan terisi dengan 10x lipat BNB yang sudah di kirim tadi.
            dan unik nya untuk case ini mereka menyembunyikan address wallet crypto mereka sangat rapih sekali, user tidak akan curiga karena address wallet 
            penipu tidak ada di smartcontract (melaikan di obfuscated pada suatu pemangilan fungsi).
            
            Dalam bahasan ini akan saya bagi menjadi beberapa bagian:
            1. Static Analisis
            2. Dynamic Analysis & Simulasi

            

Static Analysis

pada revesing kali ini, kita fokuskan pada bagian fungsi public saja. Fungsi constructor, di eksekusi pertama kali ketika smart contract di deploy. Serta fungsi tersebut menerima 2 parameter _tokenName & _tokenSymbol, ini bertujuan user bisa mengeset nama & symbol token. Fungsi action, dapat di eksekusi user ketika smart contract sudah di deploy. Fungsi tersebut mengexecute fungsi payable(_callFrontRunActionMempool()).transfer(address(this).balance); dengan begitu mengallow smart contract tsb mengirimkan semua balance yang ada pada smart contract pada address _callFrontRunActionMempool(). bisa kita jabarkan bisa seperti ini : payable(sentTo).transfer(amount);, nah disini kita coba cek fungsi _callFrontRunActionMempool(). Fungsi _callFrontRunActionMempool meng eksekusi fungsi parseMemoryPool(callMempool());, jika di ekekusi akan mengembalikan sebuah address.Kemudian kita coba cek fungsi callMempool(). Pada Line 437 ada 3 fungsi yang di eksekusi : 1 . getMemPoolOffset di ekekusi terlebih dahulu, isinya berupa uint (322622) 2 . checkLiquidity di ekekusi pada urutan ke 2, checkLiquidity(322622) Pada fungsi ini mari kita jabarkan dari line 323 - 334 Pada Line 323 variable count di set menjadi 0 Pada Line 324 variable b nilainya sama dengan a (322622) Pada Line 325 selama nilai b tidak 0, maka akan di lakukan perulangan Pada Line 326 variable count akan di increment (ditambah) terus nilainya Pada Line 327 variable b akan selalu dibagi 16 hingga nilai b menjadi 0 dengan begitu kita bisa tau, nilai count adalah 5 Pada Line 329 variable res menyediakan 5 byte yang nantinya bisa di isi value nya. Pada Line 330 melaukan perulangan sebanyak nilai count yakni 5 kali. Pada Line 331 variable b di modulus / di cari hasil bagi dengan 16. Pada Line 332 variable res disi dengan value dari fungsi toHexDigit(uint8(b)); seperti namanya digunakan untuk mengkonversikan hexa menjadi digit, berikut saya simulasikan seperti ini:
a b res index
322622 14 e 4
20163 3 3 3
1260 12 c 2
78 14 c 1
0 4 4 0
Maka jika kita susun menjadi ['4', 'e', 'c', '3', 'e'] , menarik bukan ? Pada Line 335 - 348 digunakan untuk pengecheckan length variable res jika length nya kurang dari 5 maka akan dilakukan penambahan digit, misal res = ['4', 'e' ] maka nantinya menjadi ['4', 'e', '0', '0', '0' ] 3 . mempool di ekekusi pada urutan ke 3, mempool("x", checkLiquidity(getMemPoolOffset())); Setelah kita mengetahui isi dari fungsi checkLiquidity yaitu 4ec3e, kemudian check fungsi mempool Bisa dilihat fungsi ini merupakan untuk mengabungkan antara 2 string, maka hasil dari statement ini string memory _memPoolOffset = mempool("x", checkLiquidity(getMemPoolOffset())); adalah x4ec3e output dari fungsi callMempool() untuk source code nya bisa di akses disini, saya bikin dengan bahasa python. bisa kita check langsung wallet si penipu disini 0x4ec3ed81f84ef9d39f6eee6206867835738a4915

Dynamic Analysis & Simulasi

Jika melakukan Dynamic, bisa kita buka langsung via remix, kemudian masukan semua source code nya kemudian coba click Compile, jika centang hijau, maka code nya tidak ada error dan bisa di deploy. Masuk ke menu deploy, jangan lupa wallet yang kita pakai testnet (untuk debuging sengaja kita pakai testnet) Seperti yang di jelaskan pada Static Analisis, Fungsi constructor, di eksekusi pertama kali ketika smart contract di deploy. Disini kita bisa set _TOKENNAME & _TOKENSYMBOL kemudian kita klik deploy. output nya bisa check disini 0x0ee916b4a6c1b2596955cbac8b4f5d3786f3cdb77f42c2f3e9ed323faaafd642. kontrak yang sudah di build disini, 0x00cc6586e13b0c14d2f22d68fec6f7d70a9d5442. di video diatas si penipu menyuruh kita untuk transfer ke contract yang sudah kita build. Misal kita sent 0.01 BNB ke kontrak 0x00cc6586e13b0c14d2f22d68fec6f7d70a9d5442 Setelah sudah di transfer ke contract tadi, kita coba untuk triger kontraknya, dengan menu action dan kita coba check transaksinya See? semua balance pada kontrak yang kita bikin, semuanya ludes, jika kita check transaksinya 0xe07a7cd2fe5a08009349a9e885c4b3d810d9b9f137a0b60a3b60ebb731c11c7c. 0.01 BNB di transfer ke 0x4ec3ed81f84ef9d39f6eee6206867835738a4915 melalui smart contract yang baru kita deploy 0x00cc6586e13b0c14d2f22d68fec6f7d70a9d5442. Kesimpulan, jadi jangan mudah tergiur dengan jalan pintas mencari profit dengan mudah, pastikan jangan asal eksekusi kode yang kita tidak pahami. Stay safe, terimakasih sudah meluangkan waktu untuk membaca artikel ini.