
DLL sideloading/proxying with Nim!
이 저장소는 사이드로딩/프록시 로딩에 사용할 수 있는 Nim DLL을 쉽게 생성할 수 있게 해줍니다. DLL 사이드로딩이 무엇인지 잘 모르신다면 이 블로그 게시물을 살펴보세요.
프록시하려는 정상 DLL(또는 여러 DLL)을 이 저장소의 build 디렉터리에 넣은 다음 make를 실행하세요.
그러면 out 디렉터리에 두 개의 .dll 파일이 생성됩니다:
사이드로딩이 성공하면 메시지 상자가 나타나거나 바탕 화면에 파일이 생성되는 것을 볼 수 있습니다.
실제로 페이로드를 "무기화"하려면 OffensiveNim 저장소에서 아이디어와 바로 사용할 수 있는 코드 조각을 참고하세요 :) .
dllproxy.nim은 페이로드를 실행하고 정상 함수 호출을 원본 DLL로 프록시하는 프록시 DLL입니다.gen_def.py는 원본 DLL의 내보내기 테이블을 파싱하여 모듈 정의(.def) 파일을 생성합니다.그런 다음 컴파일 시 .def 파일이 링커에 전달되어 정상 함수 호출을 프록시합니다.
NimMain 숨기기이 Microsoft 문서를 참조하세요.
이 .def 파일의 마지막 줄을 확인하세요:
EXPORTS
GetFileVersionInfoA=ZCnerzNI.GetFileVersionInfoA @1
GetFileVersionInfoByHandle=ZCnerzNI.GetFileVersionInfoByHandle @2
GetFileVersionInfoExA=ZCnerzNI.GetFileVersionInfoExA @3
GetFileVersionInfoExW=ZCnerzNI.GetFileVersionInfoExW @4
GetFileVersionInfoSizeA=ZCnerzNI.GetFileVersionInfoSizeA @5
GetFileVersionInfoSizeExA=ZCnerzNI.GetFileVersionInfoSizeExA @6
GetFileVersionInfoSizeExW=ZCnerzNI.GetFileVersionInfoSizeExW @7
GetFileVersionInfoSizeW=ZCnerzNI.GetFileVersionInfoSizeW @8
GetFileVersionInfoW=ZCnerzNI.GetFileVersionInfoW @9
VerFindFileA=ZCnerzNI.VerFindFileA @10
VerFindFileW=ZCnerzNI.VerFindFileW @11
VerInstallFileA=ZCnerzNI.VerInstallFileA @12
VerInstallFileW=ZCnerzNI.VerInstallFileW @13
VerLanguageNameA=ZCnerzNI.VerLanguageNameA @14
VerLanguageNameW=ZCnerzNI.VerLanguageNameW @15
VerQueryValueA=ZCnerzNI.VerQueryValueA @16
VerQueryValueW=ZCnerzNI.VerQueryValueW @17
NimMain @19 NONAME PRIVATE
이 마지막 줄은 기본적으로 링커에게 NimMain 함수의 이름을 제거하도록 지시합니다. DLL을 컴파일하고 위의 .def 파일을 링커에 전달하면 .dll의 내보내기 테이블에서 다음 항목을 확인할 수 있습니다:
