사람이 누르는것 처럼 12345를 랜덤하게 입력하고, 딜레이를 줌

관리자 권한으로 실행 필수

on/off는 F2

E8 00 00 00 00 이 실행되면 스택에 다음 명령어의 EIP가 push되므로, pop으로 꺼내 쓰면 됨.

C에서 XML 생성 및 파싱 정도만 원한다면 사용해보세요.

다운로드 사이트 : http://michaelrsweet.github.io/mxml/mxml.html#3_2


압축을 풀고 mxml 디렉토리에서 config.in.h를 config.h로 변경합니다.


개발 프로젝트에 추가되어야 할 h 및 c 파일

mxml.h

mxml-private.h

config.h

mxml-attr.c

mxml-entity.c

mxml-file.c

mxml-index.c

mxml-node.c

mxml-private.c

mxml-search.c

mxml-set.c

mxml-string.c


개발 소스에는 #include <mxml.h> 만 하시면 됩니다.


아래는 XML트리 생성 예제




ida에서 __usercall로 해석되는 함수의 경우는 2~3개 정도의 인자를 불특정 레지스터에 저장하고 사용하기 때문에
C에서 제공하는 calling convention으로 함수를 정의할 수 없었습니다.
(있다면 댓글로 자비좀 베풀어주세요.. )

어쩔 수 없이 naked형태로 후킹 함수를 구현하였습니다.


후킹 대상인 __usercall 함수는 4개의 인자를 사용하고 있습니다.
int __usercall 대상함수(int a1@<edx>, int a2@<esi>, int a3, int a4)
호출 시 레지스터는 유지하고, a3, a4만 push합니다.
호출이 끝나면 push한 만큼 esp를 복원해주고(hook함수 종료 시 mov esp, ebp를 해주니 복원할 필요가 없을듯하나 습관적으로 해주는것이 좋을듯) , 리턴값이 담긴 eax를 백업합니다.
esi와 edx는 __usercall 함수 내부에서 retn전에 pop을 해주기 때문에 따로 백업하지 않아도 됩니다.

이후에 각종 파라미터를 빼내는 함수를 호출하는데, __stdcall로 선언했으므로 따로 스택정리는 하지 않았습니다. 

 pTrampoline는 jmp 다음 명령어를 가리키도록 해주면 됩니다.



다른 컴파일러로 개발할 일 생기면 추가 예정


 

 Visual C

 

GCC 

 

 Bit

32 

64 

32 

64 

 INT 

 4

 LONG

 4

 FLOAT

 4

8

 DOUBLE

 4

8

8

8


멀티 소스로 개발시 LONG형이 문제가 될 수 있다. 특히 long 으로 리턴받는 api사용 시 주의.


8바이트를 쓰고자 한다면, int64_t / __int64_t 로 선언하면 어느 쪽에서도 확실하게 8바이트를 사용할 수 있다.

ScanBase64Function.dll


메모리에서 base64의 인코딩 및 디코딩 테이블을 검색한 후, 해당 테이블 주소를 text섹션에서 참조하는 코드 주소를 찾아냅니다.

char MimeBase64[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' };   char(혹은 int) DecodeMimeBase64[256] = { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63, 52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14, 15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1, -1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40, 41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1 };  


사용 방법 : 플러그인 메뉴에서 Scan을 클릭하면, 검색 결과를 로그에 출력합니다.

속도가 매우 느립니다. (-_-)


실행 결과 예시: 

jscript.dll의 0x3F1E8630에서 base64 테이블을 검색하였습니다. encode용도일 가능성이 있습니다.

해당 주소를 6개의 코드에서 참조하고 있습니다.


개선해야할 내용

- 테이블을 사용하지 않는 BASE64 함수 검색

- encode / decode 용도 정확하게 구분하기

- 패커 (더미다 등) 적용시 확인해보지 못하였음




다운로드 페이지 : https://bonobogitserver.com/

테스트 환경 : Windows 2012 r2 Datacenter / bonobo 5.1.1


1.     관리에서 역할 및 기능 추가선택


2.     위 그림의 창이 뜰 때까지 다음을 클릭하고 웹 서버(IIS)”를 선택 후 다음클릭


3.     “ASP.NET 4.5”를 선택하고 다음클릭


4.     “ASP.NET 4.5”를 선택하고 다음 클릭


5.     필요한 경우 자동으로 대상 서버 다시 시작선택 후 설치클릭


6.     c:\inetpub\wwwroot에 압축을 해제한 후 c:\inetpub\wwwroot\Bonobo.Git.Server\App_Data 폴더를 마우스 우 클릭 후 속성” -> “보안” 탭을 클릭한 후 편집을 클릭



7.     “IIS_IUSRS” 선택 후 모든 권한허용을 선택한 후 확인을 클릭


8.     도구에서 “IIS(인터넷 정보 서비스) 관리자클릭


9.     좌측 트리 메뉴를 위 그림과 같이 펼친 후 “Bonobo.Git.Server”를 마우스 우 클릭한 후 응용 프로그램으로 변환클릭


10.     선택을 클릭


11.     “.NET v4.5”를 선택하고 확인


12.     브라우저에서 http://localhost/Bonobo.Git.Server 를 입력하여 접속이 되는지 확인한다.




APMSetup에서 SSL(https)을 구축하는 방법을 설명합니다.


1. APMSETUP 설치

기본 값으로 설치합니다.

http://www.apmsetup.com/download.php


2. Openssl 설치

아래 파일을 다운로드하여 c:\openssl에 압축 해제합니다.

openssl.zip

본 포스팅에서는 스스로가 인증기관(CA)이 되어 셀프 서명한 루트 공개키 인증서를 만들어서 사용합니다.


1) 개인키/공개키 만들기

인증기관(CA)의 키를 생성합니다.

>> openssl genrsa -out CA_Private.pem


2) 인증서 서명 요청서 만들기

인증기관에 요청할 요청서(CSR)를 만듭니다.

>> openssl req -new -key CA_Private.pem -out CA_Request.pem

지역, 회사명 등을 순서대로 기입합니다. 마지막 아래 2칸은 비워도 무방합니다.


3) 공개키 인증서 만들기

요청서를 가지고 인증기관의 개인키를 사용하여 공개키 인증서를 만듭니다.


3. APACHE 설정파일 수정

1) c:\APM_Setup\Server\Apache\conf\httpd.conf

아래 2줄을 찾아서 주석을 삭제합니다. 

#LoadModule ssl_module modules/mod_ssl.so 

#Include conf/extra/httpd-ssl.conf 


2) C:\APM_Setup\Server\Apache\conf\extra\httpd-ssl.conf 

- Webroot 경로명 수정
DocumentRoot "C:/APM_Setup/Server/Apache/htdocs" 을 "C:/APM_Setup/htdocs"으로 수정합니다.

키파일 경로명 수정
SSLCertificateFile "C:/APM_Setup/Server/Apache/conf/server.crt" 을 "C:/openssl/bin/CA_Cert.pem"으로 수정합니다.
SSLCertificateKeyFile "C:/APM_Setup/Server/Apache/conf/server.key" 을 "C:/openssl/bin/CA_Private.pem"으로 수정합니다.


4. 구동 및 확인


C:\APM_Setup\Server\Apache\bin\ApacheMonitor.exe을 실행하여 재시작한 뒤 빨간 밑줄과 같이 ssl이 올라왔는지 확인합니다.

접속 후 인증서를 확인해봅니다.


개발환경 : Visual Studio 2013 / Windows 7 x64

Active X, 후킹모듈과 같은 브라우저용 DLL을 개발하다보면 로그 처리 및 타 프로세스와 연동할 일이 생기는데 기본적으로 브라우저는 낮은 Integrity를 가지고 있으므로 temp폴더 정도의 자원만 사용할 수 있습니다.

제가 만든 프로그램 (PIPESERVER.exe - High Integrity)에서 생성한 파이프는 브라우저(iexplore.exe - Low Integrity)에서 사용할 수 없습니다.

이를 해결하기 위해 각종 핸들(PIPE 등)을 생성할 때 SECURITY 관련 속성을 인자로 주어야 합니다. 

아래 예제 소스는 RPC 파이프를 이용하여 브라우저 DLL에서 EXE의 함수를 호출하는 것을 보여줍니다.

(아래 참조사이트들을 참고하여 작성하였습니다.)

# EXE (서버) Side


# DLL (클라이언트) Side

주의하여야 할 점은 RpcStringBindingCompose 함수의 인자로 local을 의미하는 "\\\\."을 사용하였는데 일반적인 경우는 "localhost"를 사용해도 상관 없지만 브라우저 DLL의 경우 반드시 "\\\\."을 사용해야 정상 동작합니다.


도움이 되는 참조 사이트

RPC 기본 샘플 예제

http://www.codeproject.com/Articles/4837/Introduction-to-RPC-Part

VISTA에서 Active X와 통신

https://www.blackhat.com/presentations/bh-usa-08/Kim/BH_US_08_Kim_Vista_and_ActiveX_control_WhitePaper.pdf



+ Recent posts