Wednesday, July 19, 2017

ຄວາມເຂົ້າໃຈເຖິງ PE, DLL ແລະ Import, Export

EXE ຄືໄຟລ໌ທີ່ຖືກໃຊ້ງານມາດົນແສນດົນໃນ Windows ໂດຍໂຄງສ້າງຂອງໄຟລ໌ເຫຼົ່ານີ້ຈະຢູ່ໃນໂຄງສ້າງທີ່ຊື່ວ່າ Portable Executable (PE) Format ໂດຍ PE Format ນັ້ນຖືກໃຊ້ໃນຫຼາຍໆໄຟລ໌ format ທັງ (CPL, OCX, SYS ແລະ ອື່ນໆ) ແຕ່ post ນີ້ເຮົາຈະສຸມໄປທີ່ DLL file

Image does not exist: https://www.techsuii.com/wp-content/uploads/2017/07/image2-2-300×223.png

Export Function ຈະເປັນການອະນຸຍາດໃຫ້ file ອື່ນສາມາດນຳ function ທີ່ມີໄປໃຊ້ໄດ້ ເຊັ່ນ ຕົວ ws2_32.dll ປະກາດ export WSAStartup function ໄວ້ ສຳລັບໃຜກໍຕາມທີ່ຕ້ອງການສ້າງ Windows Socket ກໍໃຫ້ມາຮຽກໃຊ້ງານໄດ້ ຊຶ່ງເມື່ອ a.exe ຕ້ອງການສ້າງ Windows Socket ໂດຍໃຊ້ function WSAStartup function ຂອງ ws2_32.dll ຕົວ a.exe ກໍຈະຮ້ອງຂໍໄປຢັງ Windows ຊຶ່ງການ link Function ຈາກ a.exe ໄປຢັງ ws2_32.dll ນັ້ນມີຄວາມເປັນໄປໄດ້ທັງ static link, dynamic, runtime ກ່າວຄື

static link ຈະເປັນການນຳ code ຂອງ WSAStartup Function ຈາກ ws2_32.dll ມາໃສ່ແລ້ວ compile ເຮັດໃຫ້ພໍເວລາຮຽກກໍຈະຮຽກໃນຕົວເອງເລີຍ ບໍ່ຕ້ອງຮ້ອງຂໍ ws2_32.dll ຫຍັງຫຼັງຈາກ compile ແລ້ວ
dynamic link ຈະເປັນການໃສ່ຂໍ້ມູນການຮຽກຂອງແຕ່ລະ function ທີ່ import ທີ່ OS ຈຳເປັນຕ້ອງຫາມາໃຫ້ໃຊ້ໄວ້ໃນ PE Header ຊຶ່ງຂໍ້ມູນສ່ວນນີ້ຮຽກວ່າ Import Table
runtime ຄືຕົວ function ແລະ library ຈະໃຊ້ຕອນທີ່ຕ້ອງການເທົ່ານັ້ນ ຊຶ່ງສາມາດເຮັດໄດ້ຜ່ານ LoadLibrary ແລະ GetProcAddress function ນັ້ນໝາຍຄວາມວ່າ ຖ້າ a.exe ນັ້ນເປັນແບບ runtime link ເມື່ອ a.exe ຈະສ້າງ Windows Socket ເຖິງຈະຮຽກຫາ ws2_32.dll ເມື່ອ load ແລ້ວ ຕົວ GetProcAddress ກໍຈະເປັນຄ່າຕຳແໜ່ງ memory ໃນການ load library ທີ່ເຄີຍໂຫຼດໄວ້ນັ້ນເອງ

Function ທີ່ຈະຖືກນຳໄປ import ໄດ້ ຈຳເປັນຕ້ອງປະກາດໄວ້ກ່ອນສະເໝີ

ຖ້າຫາກວ່າກັນແທ້ໆ ແລ້ວ EXE ແລະ DLL ຈະມີຄວາມແຕກຕ່າງກັນພຽງນ້ອຍໆເທົ່ານັ້ນ ອີກທັງຕົວ flag ທີ່ຈະບົ່ງບອກວ່າເປັນ EXE ຫລື ວ່າ DLL ນັ້ນກໍມີແຕ່ exported function ຫລາຍ ຫລື ນ້ອຍພຽງນັ້ນເອງ (EXE export funtion ນ້ອຍ ສ່ວນ DLL ສ້າງມາເພື່ອເປັນ function ໃຫ້ກັບຕົວອື່ນຢູ່ແລ້ວ ດັ່ງນັ້ນຈຶ່ງມີ export function ຫລາຍ)

ທີນີ້ເວລາຈະເຮັດພວກ malware analysis ເຮົາຈະເບິ່ງໄດ້ງ່າຍໆວ່າ EXE ຫລື malware ນັ້ນເຮັດຫຍັງໄດ້ດ້ວຍ ກໍເບິ່ງຈາກ import function ເອົາກໍໄດ້ ເຊັ່ນ ການ require advapi32.dll ນັ້ນໝາຍເຖິງການຕ້ອງການທີ່ຈະໄປປ່ຽນແປລ registry ນັ້ນເອງ ເປັນຕົ້ນ

ຫາກ source code ຂອງໂປຣແກຣມນັ້ນຊ້ຳໆກັນຄືບໍ່ມີການປ່ຽນແປງການຮຽກໃຊ້ function ຕົວ Import Table ກໍມັກຈະຖືກສ້າງໃນທາງເດີມຊ້ຳໆເຊັ່ນກັນ (ໃນກໍລະນີທີ່ຖືກ compile ດ້ວຍ compiler ດຽວກັນ) ແຕ່ MD5 ຂອງ PE ນັ້ນອາດບໍ່ຄືກັນ ເພາະເວລາຊຶ່ງເປັນ property ຂອງໄຟລ໌ນັ້ນແຕກຕ່າງກັນທີ່ສ່ວນຂອງ generate time ນັ້ນເອງ ແຕ່ Import Table Hash (Imphashes) ນັ້ນຈະຍັງຄົງຄືກັນ ຊຶ່ງທັງຫມົດເຖິງການປ່ຽນຄ່າ parameter ພາຍໃນ source code ກໍບໍ່ໄດ້ສົ່ງຜົນຕໍ່ Import Table Hash ເຊັ່ນກັນ ເພາະປ່ຽນພຽງ parameter ແຕ່ function ພາຍໃນຍັງຄົງເຊັ່ນເດີມນັ້ນເອງ (ສ່ວນຂອງ imphashes ຖືເປັນ signature ໜຶ່ງໃນການກວດຈັບ malware ຂອງ Antivirus ຕ່າງໆ)

ຂໍ້ມູນຈາກ techsuii.com

Subscribe

  • RSS Atom

ອອນລາຍ: 1 | ມື້ນີ້: 13 | ວານນີ້: 25 | ທິດນີ້: 93 | ເດືອນນີ້: 872 | ປີນີ້: 11832 | ລວມ: 78935