본문 바로가기

리버싱!

(32)
D3D Hooking 공부 D3D Hooking이란? Direct3D Hooking은 이전부터 온라인 게임분야, 특히 FPS 게임에서 Wall Hack 이라는 것으로 게임 진행에서 일반 유저들에게 심각한 피해를 입히는 Game Hack을 만들때 사용된 기술이다. 위키피디아에서는 다음과 같이 설명하고 있다. 다이렉트3D(영어: Direct3D)는 마이크로소프트의 DirectX API에서 3차원 그래픽스 연산과 출력을 담당하는 부분이다. 마이크로소프트의 윈도우 운영 체제(윈도우 95 이상)에서만 작동하며, 엑스박스와 엑스박스 360 게임 콘솔의 그래픽 API로 사용되고 있다. 다이렉트3D와 비슷한 역할을 하는 API로는 OpenGL이 있으며 역할은 같지만 각자가 서로 다른 장단점을 가지고 있다. 정리하면 3D게임이나 3D를 요구하는 ..
가상 함수 테이블(vtable) 공부 2 - 자세히 분석 자세히 분석해보기 #include class Parent { public: virtual void show1() { printf("this is parent1\n"); } virtual void show2() { printf("this is parent2\n"); } virtual void show3() { printf("this is parent3\n"); } }; class Child : public Parent { public: virtual void show1() { printf("this is child1\n"); } virtual void show3() { printf("this is child3\n"); } }; int main() { printf("main"); Parent* p = new..
가상 함수(Virtual function)와 가상 함수 테이블(vtable) 공부 오버라이딩 공부 클래스에서 선언된 함수에 대해, 해당 클래스의 자식 클래스가 정의되었을 때 자식 클래스에 서 상속받은 함수를 새롭게 정의하여 사용하는것을 오버라이딩이라 한다. 부모 클래스의 함 수에서 선언된 리턴타입과 함수 인자 구성이 똑같아야 한다.(인자갯수나 타입, 리턴타입이 다른건 오버로딩인걸로 기억)이렇게 정의된 클래스 타입으로 객체를 선언하여 사용하는 경우, 함수를 새로 정의한 자식 클래스를 타입으로 지정하여 함수를 호출했을 때는 새롭게 정의된 함수(자식)가 호출된다. #include using namespace std; class Parent { public: void show() { cout show(); a = c; a->show(); Parent 포인터 변수에 에 b나 c의 객체를 넣어도..
detours를 이용한 hooking 설치 visual studio 개발자 명령 프롬프트를 열어 실행하거나 해당 링크에서 다운받아준다. git clone https://github.com/Microsoft/Detours.git 해당 경로로 이동한뒤 makefile이 있는곳에서 nmake를 사용한다. 기본적으로 32비트 버전을 지원하는데 64비트를 하고싶으면 SET DETOURS_TARGET_PROCESSOR=X64 nmake 다음과 같이 환경변수를 설정후에 nmake를 사용하면된다. // dllmain.cpp : DLL 애플리케이션의 진입점을 정의합니다. #include "pch.h" #include "C:\Users\USER\Desktop\Detours-master\include\detours.h" #include #include #pra..
x64 Hooking 공부(메모장을 통한) // dllmain.cpp : DLL 애플리케이션의 진입점을 정의합니다. #include "pch.h" #include #include #pragma pack(push,1)//구조체 데이터 정렬크기를 1바이트로 정렬, 구조체 변수간에 공간이 있을수있기에 1바이트로 할당하는것같다. struct GOGO_NAM { BYTE opcode1; DWORD lpTarget1; DWORD opcode2; DWORD lpTarget2; BYTE opcode3; }; #pragma pack(pop)//위의 설정 이전상태로 돌림 DWORD WINAPI Hook64(); DWORD WINAPI Unhook64(); GOGO_NAM orgFP; BOOL Hooked = FALSE; INT WINAPI NewWriteFile(..
Remote Template Injection 친구 블로그를 보다가 재밌고 간단해보여서 바로 해봤다. 중국 문서형 악성코드에서 자주쓰이는 공격기법이라한다. 워드안에 있는 템플릿을 이용한 기법으로 악성코드를 안전하게 퍼트릴수있다고 한다. 템플릿을 구성하는 부분 중 템플릿설정 매크로 등이 담겨있는 .dotm파일을 이용한다. 우선 사진의 템플릿중 원하는걸 골라 만들어준다. 만든 후 새로 빈 워드를 또 만들어 준 후 매크로 기능을 열어서 macros in 을 사진처럼 골라주고 create를 해준다. Sub AutoOpen() a End Sub Sub Document_Open() a End Sub Sub a() Dim wsh As Object Set wsh = CreateObject("WScript.Shell") wsh.Run ("calc.exe") For ..
DLL Injection 공부 https://github.com/gud425/DLL_Injection 백업용 github DLL_Injection made by nam 메모장이 켜질때마다 DLL을 삽입하여 내가 원하는 작동을 하도록 실행하는 프로그램 소스해석 DLL 소스 DWORD WINAPI ThreadProc(LPVOID lparm) { int a=0, b=0, c=0; int flag = 0,return_val; while (1) { if (flag) break; for (int i = 0; i < (a * b * c) + 1; i++) { return_val=MessageBox(NULL, L"hacked by nam", L"LOL", MB_YESNOCANCEL|MB_ICONWARNING); if (return_val == ID..
방독면책-18 보호되어 있는 글입니다.