มาลองแกะ code Oyente กันเถอะ (Part 1 Constructing basic block)

Nattawat Songsom
3 min readDec 8, 2022

--

untangling things can be kinda fun

Oyente เป็น smart contract analysis tool ตัวแรกๆ โดย publish ใน paper making smart contracts smarter และหลังจากนั้นก็มีการพัฒนาเพิ่มมาเรื่อยๆ

โดย Oyente จะใช้การป้อน cfg เข้าไปใน symbolic executor เพื่อ detect bug

แต่เราจะไม่อ่าน paper อย่างเดียว มาลองแกะ code oyente ใน version ที่ตรงกับ paper กันเถอะ

การ setup

clone git

แก้ Dockerfile

docker build -t oyente . && docker run -it oyente:latest

Experiment

โอเค input ที่จะใช้คือ

โอเค ก่อนอื่น solidity file จะถูก disassembly

ได้เป็น opcode

จากนั้นป้อน opcode ไปสร้าง cfg และ ทำการ symbolic execution

โดย cfg ที่ถูกสร้างขึ้น จะใช้ดู path ต่างๆในการ execute program

ตัวอย่าง cfg

ใน cfg จะประกอบด้วย 2 ส่วนคือ node และ เส้น

โดย code ที่อยู่ใน node เดียวกัน จะถูก execute ด้วยกัน

และเมื่อต้องเลือกเส้นไปยัง node ถัดไป จะเลือกได้เพียงเส้นเดียวเท่านั้น

โดยเราเรียกรูปแบบในการจัด node นี้ว่า basic block

โดยในแต่ละ basic block เราจะเก็บ instruction และรูปแบบการ jump ไปยัง block ถัดไป

เช่น

unconditional จะเป็น block ที่มีเส้นถัดไปเส้นเดียว

conditional จะเป็น block ที่มีเส้นถัดไปหลายเส้น

terminal จะเป็น block ที่ไม่มีเส้นถัดไป

โอเค ประมาณนี้ก่อน ไว้เรามาดูการเชื่อมแต่ละ basic block เป็น cfg กันต่อ

Referrences

https://eprint.iacr.org/2016/633.pdf

https://www2.cs.arizona.edu/~collberg/Teaching/453/2009/Handouts/Handout-15.pdf

--

--

No responses yet