Dalam keselamatan komputer (*computer security*), **kod cangkerang (*shellcode*)** merupakan kod mesin boleh alih yang digunakan sebagai bebanan dalam mempergunakan pepijat perisian. Ia dikenali sebagai "kod cangkerang" kerana ia biasanya melaksanakan cangkerang perintah (*command shell*) yang membolehkan penyerang mengawal mesin yang terdedah. Disebabkan fungsi bebanan tidak terhad kepada sekadar menyalin dalam cangkerang, sesetengah pihak berpendapat bahawa nama kod cangkerang tidak tepat. Bagaimanapun, usaha menggantikan istilah ini tidak diterima ramai.

Kod cangkerang boleh disimpan dalam proses ruang ingatan dan kemudiannya dilaksanakan menyebabkan penyerang mendapat kawalan penghintung perisian (*program counter*) dengan menggunakan kelemahan seperti peruntukan ingatan berasaskan tindanan (*stack-based memory allocation*) dan Peruntukan ingatan dinamik (*Dynamic memory allocation*) -berasaskan limpahan penimbal, atau serangan format rentetan (*format string attacks*). Terdapat beberapa kaedah mengawal penghintung perisian yang berbeza antara sistem pengendalian dan seni bina pemproses termasuk tulis tindan (*overwriting*) alamat kembali yang tersimpan dalam cangkerang tindan (*stack frame*) dan menindan pengendalian pengecualian (*exception handlers*).

Strategi perlaksanaan kod cangkerang
------------------------------------

Sebahagian besar kod cangkerang ditulis tanpa penggunaan bait penamat null kerana ia bertujuan untuk dimasukkan ke dalam jujukan aksara (*character arrays*). 

  

Bait null yang terdapat dalam rentetan akan menamatkan perlaksanaan kod cangkerang sebelum tiba masanya. Untuk menghasilkan kod cangkerang sedemikian, seseorang boleh mengkompil aturcara bebanan dengan pengkompil (sering kali C) dan kemudiannya menggantikan perintah dengan yang mengandungi sifar dengan perintah lain yang mempunyai kesan yang sama tetapi tanpa bait sifar. Sebagai contoh, melalui perintah sistem 32-bit x86:

```
mov eax, 1
```

mengandungi sifar sebagai sebahagian dari harafian (1 dikembangkan kepada 0x00000001), dengan itu menamatkan rentetan. Ini boleh ditulis sebagai dua perintah: 

```
xor eax, eax
inc eax
```

yang mana bebas-NUL (kerana mengambil xor apajua dengan dirinya sendiri sentiasa menghasilkan 0). Sebagai tambahan, baris pertama boleh digunakan bagi hasil yang sama.

Lihat juga
----------

* cangkerang (pengkomputeran)
* limpahan penimbal (*Buffer overflow*)
* limpahan Heap overflow
* limpahan Stack buffer overflow
* keselamatan komputer

Rujukan
-------

1. ↑  *Sockets, Shellcode, Porting, & Coding: Reverse Engineering Exploits and Tool Coding for Security Professionals.* by James C. Foster and Stuart McClure (April 12, 2005). ISBN 1-59749-005-9

Pautan luar
-----------

* Pengenalan kepada limpahan bufer dan kod cangkerang Diarkibkan 2008-02-11 di Wayback Machine
* Asas kepada mengenkod cangkerang (*Shellcoding*) (PDF) An overview of x86 shellcoding by Angelo Rosiello
* Pengenalan kepada pembangunan kod cangkerang. Diarkibkan 2008-07-05 di Wayback Machine
* Contains x86 and non-x86 shellcode samples and an online interface for automatic shellcode generation and encoding, from the Metasploit Project Diarkibkan 2008-02-18 di Wayback Machine
* Contains x86 and non-x86 shellcode samples
* a shellcode archive, sorted by Operating system Diarkibkan 2006-06-19 di Wayback Machine.
* Microsoft Windows and Linux shellcode design tutorial going from basic to advanced.
* Panduan kod cangkerang Windows dan Linux dengan contoh langkah demi langkah.
* Menghilangkan mitos mereka kod cangkerang Diarkibkan 2005-08-29 di Wayback Machine