
आक्रामक सुरक्षा विकास के लिए Nim लाइब्रेरी
Bitmancer विंडोज़ ऑपरेटिंग सिस्टम के लिए Offensive Security टूलिंग विकास हेतु Nim में लिखी गई एक लाइब्रेरी है। इसका उद्देश्य अत्यधिक कॉन्फ़िगर करने योग्य, position-independent, स्टैंडअलोन इम्प्लीमेंटेशन के साथ सामान्य APIs, रूटीन और मैक्रोज़ प्रदान करना है।
यदि आप कोई Implant विकसित करना चाहते हैं, त्वरित PoC परीक्षण करना चाहते हैं, या कोई बिल्कुल नया शानदार टूल लिखना चाहते हैं - Bitmancer आपको शुरुआत करने में मदद कर सकता है!
⚠️ यह रिपॉज़िटरी फ़िलहाल एक बड़ा WIP है! इसके उपयोग में समस्याएँ हो सकती हैं और अभी स्थिरता की कोई गारंटी नहीं है। ⚠️
Bitmancer अपने types के लिए आंशिक रूप से winim का उपयोग करता है। इंस्टॉल करने के लिए, चलाएँ:
nimble install winim
Bitmancer अभी nimble रिपॉज़िटरी का हिस्सा नहीं है। फ़िलहाल, आप इसे Github से सीधे चलाकर इंस्टॉल कर सकते हैं:
nimble install https://github.com/zimawhit3/Bitmancer
MingW और Nim MSVCRT और Kernel32 के साथ-साथ Nim के System मॉड्यूल द्वारा उपयोग किए जाने वाले ग्लोबल वेरिएबल्स पर निर्भरताएँ लाएँगे। यदि आप position independent code के लिए इनसे बचना चाहते हैं, तो दी गई nim.cfg का उपयोग करें।
संकलन करने के लिए:
nim c -d:mingw <Your_Nim_File>
सभी मॉड्यूल के लिए:
import Bitmancer
यदि आपको NTDLL रूटीन या syscalls की आवश्यकता नहीं है, तो आप सीधे उपयोग कर सकते हैं:
import Bitmancer/core
सिर्फ हैशिंग प्रक्रियाओं के लिए:
import Bitmancer/core/obfuscation/hash
यदि कोई ऐसी सुविधा/तकनीक है जिसे आप लागू करवाना चाहते हैं, तो मुझे बताएं!
स्टैक स्ट्रिंग्स:
var wStr {.stackStringW.} = "Hello!"
var cStr {.stackStringA.} = "World!"
यदि आप वर्तमान में उपलब्ध नहीं किसी syscall के चारों ओर wrapper बनाना चाहते हैं, तो मूल प्रवाह इस प्रकार है:
## Import syscalls
import Bitmancer/syscalls
## For hashing
import Bitmancer/core/obfuscation/hash
## Define your type
type NtClose = proc(h: HANDLE): NTSTATUS {.stdcall, gcsafe.}
## Generate the wrapper
genSyscall(NtClose)
## Define configurations for how to retrieve and execute the syscall
## The procedure's symbol enumeration method - available options are:
## UseEAT - use the export address table to resolve the symbol
## UseIAT - use the import address table to resolve the symbol
## UseLdrThunks - use the NTLoader's LdrThunkSignatures to map a clean NTDLL to resolve symbols from
const symEnum = SymbolEnumeration.UseEAT
## The SSN enumeration method - available options are:
## HellsGate
## HalosGate
## TartarusGate
## ZwCounter
const ssnEnum = SsnEnumeration.HellsGate
## Finally, the execution method - available options are:
## Direct - use the direct syscall stub
## Indirect - use the indirect syscall stub
const exeEnum = SyscallExecution.Indirect
## Define an ident to use to identify the symbol
const NtCloseHash = ctDjb2 "NtClose"
## Retrive NTDLL
let Ntdll = ? NTDLL_BASE()
## Call ctGetNtSyscall, retrieving the NtSyscall object containing the SSN, pointer to the address of the function
## and a casted stub to your type.
let NtSyscall = ctGetNtSyscall[NtClose](Ntdll, ModuleHandle(NULL), NtCloseHash, symEnum, ssnEnum, exeEnum)
## Finally, call the wrapper!
NtCloseWrapper(h, NtSyscall.wSyscall, NtSyscall.pSyscall, NtSyscall.pFunction)
पूर्ण उदाहरण के लिए runShellCode example देखें। अधिक उदाहरण ntdll में भी मिल सकते हैं।