우선 이 코드는 MASM 코드로 작성된 것을 보고 작성했으며, 이를 C언어로 그대로 바꿔서 작성했습니다. "리버싱 핵심원리"에 나와있는 코드는 현재 Windows 10 환경에서 제대로 동작하지 않는것을 확인했습니다. 우선 MASM 코드를 살펴보고 분석해보자. [ iat32.asm ] [15] : Import Address Table (FirstThunk) 상에서 Argument로 전달되는 Target API 가 저장된 주소를 반환한다. 이 부분을 그대로 PatchAddress로 전달해 패치한다. [16] : lpOrgProc에 저장된 주소가 가리키는 참조값을 lpNewProc으로 패치한다. lpOrgProc에 저장된 주소가 가리키는 참조값에는 원래 API의 실제코드가 있다. [17, 18] : Targe..
[2] : array의 크기는 10으로 지정. (정수형이기 때문에 x4) [17] : input_data 서브루틴을 호출. 서브루틴 호출은 $ra에 다음 명령어 주소를 저장해야하기 때문에 jal을 사용. [31-32] : 홀수 출력을 통해 $a1에 1을 저장하고 서브루틴 output_data 호출. [37-38] : 짝수 출력을 통해 $a1에 0을 저장하고 서브루틴 output_data 호출. [49-52] : "1, 2, 3, 4, 5 ..." 형태의 문자열을 입력. [60-61] : $t1에 저장된 문자가 쉼표(,) , 엔터(\n) 이면 number_buffer에 저장된 문자열 "300"을 정수로 형변환해 배열에 저장하기위해 if_comma로 점프. [67-68] : $t1에 저장된 문자가 숫자(0-..
역시나 시작은 Register $zero $0 항상 0이 저장되어 있는 Register (수정할 수 없다) $at $1 명령어를 수행하는 동안 임시값이 저장되는 Register ( Assembler Temporary Register ) $v0, $v1 $2, $3 반환값 Register ($v0은 syscall 호출시 사용된다) $a0~$a3 $4~$7 인자 Register (Arguments) $t0~$t7 $8~$15 임시 Register (서브루틴 호출시 저장하지 않는다) $s0~$s7 $16~$23 저장되는 임시 Register (서브루틴 호출시 저장된다) 함수 호출시 함수 시작부분에서 해당 Register를 Stack에 저장한다. $t8, $t9 $24, $25 추가적인 임시 Register $..
MASM을 이용해 구현한 32Bit Trampoline API Hooking을 소개하고 실습을 진행해 보겠다. 32Bit Trampoline API Hooking 기법은 앞에서도 C언어로 구현하는 것을 소개했다. 기법자체는 다시 소개하지 않을 생각이다. 그냥 5Byte를 Jump문으로 Overwrite해서 API Hooking을 진행하는 기법이다. api_hooking.asm 1-12 : 이전과 같은 내용의 기본적인 선언문이다. winmm.dll의 용도는...? 14-17 : 각종 함수들의 proto를 작성한다. 19-21 : data 섹션에 필요한 문자열(DLL, API명)을 저장한다. 24-26 : bss 섹션에 필요한 것들을 미리 선언한다. 28 : DLL이 Injection되면 자동으로 호출되는 ..
사실 이걸 여기메뉴에 쓰는게 맞나 싶기는하다.. 쨋든 써보자 !! 헤헿.. ( 진짜 2시간걸려서 자세하게 써놨는데.. 이거 실습하다가 Chrome에 DLL Injection 되면서 날려먹어서 너무너무 속상한 마음으로 다시 쓴다... 흑흑 ) 날려먹어서 귀찮으니까 SetWindowsHookEx API를 이용한 Message Hooking에 대한 자료는 구글에 따로 알아보도록 하자. 사실 나뭇잎책에도 자세하게 나와있으니 이해하는데 어려움은 없을 것이다. SetWindowsHookEx API의 모양만 잠깐 확인하고 넘어가자. Point !! Message Hook이 설치되면 해당 윈도우 이벤트가 발생하면 OS는 이벤트가 발생한 Process에 Message Hook Function이 포함된 DLL 파일을 강제..
32bit MASM 환경구성 우선 MASM32를 설치하자. 다음 링크에서 다운받고 실행하면된다. http://www.masm32.com/ MASM32 SDK Description The MASM32 SDK version 11 is a working development environment for programmers who are interested in either learning or writing 32 bit Microsoft assembler (MASM). The installation is an automated process that installs the correct directory tree www.masm32.com 추가로 설정경로만 정해준 뒤 그냥 확인을 쭈욱 누르면 설치경로에 ma..