목록분류 전체보기 (54)
모두의 dream
![](http://img1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cUeEtl/btrwGkto9Jo/KA4hh9Cc8dJr38MTG1G31K/img.png)
공부를 하며 정리한 내용으로 잘못된 내용이 있을 수 있습니다. DLL Injection: 실행중인 다른 프로세스에 특정 DLL을 강제로 삽입하는 것. DLL Injection의 전체적인 흐름. 1. 타겟 프로세스를 잡는다. (메모장, 계산기 등등) 2. DLL과 DLL injector를 제작한 후, DLL injector를 이용하여 DLL을 타겟 프로세스에 삽입한다. DLL 에는 Injection 후 행동할 코드가 들어가고, Injector에는 단순히 Injection을 시키기 위한 코드가 들어간다. DLL injection 환경 (+제작환경) Windows11 (64bit) visual studio 2019, 문자 집합: 멀티바이트 집합, x64 컴파일 DLL 제작 // Injdect_DLL.dll #..
![](http://img1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/uqgcT/btrwn45mk8n/vFjSiEKyDgb2HGqKZxtrg1/img.png)
C#으로 만들어진 프로그램이다. dnspy를 이용해서 디컴파일 했다. 코드를 보면 Button이 존재하는데 사이즈가 0으로 되어 있다. 방법: C# 프로그램을 작성한 후 컴파일하면 C# 컴파일러에 의해 IL로 변환. C# -> IL -> 기계어 -> 실행 그렇기 때문에 IL 명령어을 수정. 우클릭 -> Edit IL Instructions 으로 버튼 사이즈 값 수정. 위 방식대로 Button의 사이즈를 조정해주면 안보이던 버튼이 보인다.
![](http://img1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bQAYCP/btrwA68TMBi/wRKLwyYKXXqnPsUTIT5541/img.png)
음악을 실행시켜주는 프로그램이다. 60초가 되면 1분 미리듣기만 가능하다는 문구가 출력된다. 그래서 1분 미리듣기만 가능하다는 문구를 디버거에서 찾아보았다. 위 부분이 1분 미리듣기입니다를 출력해주는 코드이고, break point를 걸고 실행하다 보니 위에서 시간을 비교하는 것 같은 어셈블리어 코드를 발견했다. cmp eax, EA60 원래는 0xEA60(60,000/컴퓨터 시간처리 단위 ms) 이었으나 확인을 위해 0xFFFF로 변경했다. 노래는 계속 나오지만 Run-time error 가 출력된다. 오류가 뜨면서 exception이 딱 걸리는 지점. 스택을 확인해보면 00402B58 값이 스택에 PUSH 되어있다. vbaHresultCheckobj 함수에 push 된 값과 위의 값이 동일하므로 아래..
![](http://img1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Clxcm/btrwlKNCu7c/TkMq8SzWF2gNOAaAPoqXo1/img.png)
Name과 Serial 값을 입력받고, 값이 틀리면 Wrong 문자열이 출력된다. 대충 흐름을 보니 내가 입력한 Name 에 따라 Serial 값이 바뀌게 되고, 이 문제는 Serial 값이 5B134977135E7D13 일때 Name 값을 구하는게 목적이다. 입력한 값들을 순서대로 저장되어 있는 0x10, 0x20, 0x30과 XOR 연산을 진행한다. 그리고 401150의 argument 로 그 값이 전달된다. (401150 함수에서 serial key가 생성된다.) 그래서 401150 함수 내부를 분석해봤는데 도저히 어셈만으로는 분석이 불가능했다. 그래서 롸업을 찾아보다가 알아챘는데 0x10, 0x20, 0x30 과 xor 연산한 값이 아래처럼 아스키 코드값으로 저장이 되고 있었다. (hello 입력..
![](http://img1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bNikAO/btrwnQf2yXV/mJWyhrjgY6upYaclxKDYak/img.png)
패킹이 되어있고, OEP를 찾으면 된다. 쭉 내려가다 보면 특정 구간으로 jmp를 하는 어셈코드가 있다. 패킹되어 있는 코드의 마지막 구간은 대부분 이렇게 비슷하게 생겼다고 본 것 같다. 그래서 jmp를 통해 이동하면 OEP 가 나온다.
![](http://img1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bw7YAr/btrwl7BLjso/hdzraQlQ01PtYUDsXZfJ8K/img.png)
실행해보면 어떤 입력을 받고, 그 값이 틀리면 Incorrect Password 라는 문구가 출력된다. GetDlgItemTextA API 를 이용하여 사용자로부터 문자열을 받고, 저장된 문자열 중 두 번째 단어가 "a" 인지 cmp를 이용하여 확인한다. 만약 a가 아니라면 jmp를 하고 Incorrect Password 문구가 출력된다. 두 번째 단어를 "a"로 만들어주면 나오는 다음 단계이다. 401150 함수에 세 번째 단어의 주소값을 전달한다. 입력한 값 중 세 번째 단어의 값과 네번째 단어의 값을 35(5), 79(y) 값과 비교한다. 네 번째 단어부터 열두 번째 단어까지 R3versing 인지 확인하는 부분이다. (한 루프당 두 개의 단어를 비교하는 반복문이 돌아간다.) 그리고 마지막으로 첫..
![](http://img1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bTmNZV/btrr059bb67/5jtwgDk6YRfNPYPoloDej1/img.png)
CTF 문제 만들땐 릴리즈 컴파일. 디버그 모드로 컴파일 시 사용자 컴퓨터 정보가 포함될수있음. 최적화 옵션 끄고. 디버깅 정보(심볼?) 날리면 함수명 날라감. DLL 포함해서 바이너리 컴파일
![](http://img1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/M1FMX/btrr0B8AYWz/Oihjh77dzBFoFZUjqKIFi0/img.png)
극한의 삽질끝에 정리하기로 결심. python 2.7에서 완벽하게 지원이라길래 ubunut 18.04 버전에서 Cuckoo 설치 진행. 우분투 유저명은 cuckoo 1. python2, pip2 설치 sudo apt install python-minimal sudo apt install python-pip 2. cuckoo 구동에 필요한 패키치 및 라이브러리 설치 sudo apt-get install python-dev libffi-dev libssl-dev sudo apt-get install python-virtualenv python-setuptools sudo apt-get install libjpeg-dev zlib1g-dev swig 3. MongoDB 설치 ( 웹 프레임..