본문 바로가기

ios앱분석 툴 Class-dump-z 설치 (ios 13) Class-dump-z 설치 기존의 설치방식대로 했을 때 ios13 기준으로 동작하지 않음. https://github.com/DreamDevLost/classdumpios/releases deb파일 다운받아서 디바이스에 넣고 dpkg -i deb파일로 설치. ios13 기준 classdumpios 잘 돌아가는 것 확인!
[Anyburn 4.3 x86] SEH Unicode Exploit 분석 [Anyburn 4.3 x86] SEH Unicode Exploit https://www.exploit-db.com/exploits/46507 스택기반은 원인 근처에서 터지므로 딱히 원인분석이라 하기도 민망하다. Image file name에서 BOF 취약점 발생. 때려박아 넣자. [원인] 1. 입력값의 길이는 계산 되었으나 2. 목적지와의 크기 검증이 없음. 입력값의 크기가 계산된 후 _write_string 함수를 호출하는데, 목적지 크기와의 검증이 없다. 입력값의 크기가 loop counter로 들어와 wchar 한글자씩 옮기는 loop. 1. 목적지 버퍼와의 크기 검증이 없어 목적지 버퍼를 훨씬 넘어서는 스택을 다 덮어버리고 2. 스택 끝까지 도달하여 강제 예외발생. 3. 덮어쓴 SEH를 통해 E..
immunity debugger 가젯 검색 팁 immunity debugger 가젯 검색 팁 1. 보통 mona.py 를 이용해서 rop, seh, stackpivot 등 원하는 가젯 찾는 자동화 기능 지원, 2. 또한 !mona findwild -s "명령어 # 명령어 # 명령어" 등으로도 찾기 가능. (r32, * 와일드카드 제공) 3. 디버거 옵션으로도 찾아보자. Search for All Sequences 에서 CONST, R32 등 와일드카드를 이용하여 add esp, CONST; pop R32; ret; 이런식으로 이뮤니티 디버거 혹은 올리디버거 내에서 순차적으로 검색 가능. [모나 메뉴얼] https://www.corelan.be/index.php/2011/07/14/mona-py-the-manual/ mona.py – the manua..
ascii to unicode 변환 (codepage별 정리) Ascii to Unicode 변환 (Codepage 별로 정리) 많은 사람들이 ascii에 그냥 00붙는 거 아니냐? 하곤 한다. - ex) 0x01 --> 0x01 0x00 - ex) 0x0a --> 0x0a 0x00 절반만 맞다. int MultiByteToWideChar( UINT CodePage, --- 어떤 unicode로 변환할래? DWORD dwFlags, LPCSTR lpMultiByteStr, --- 변환 할 문자열이 담긴 곳 int cbMultiByte, LPWSTR lpWideCharStr, --- 변환 결과 문자열이 담길 곳 int cchWideChar ); ascii -> unicode로 변환은 MultiByteToWideChar 함수를 통하는데, 여기서 CodePage에 따라 ..
CLD (clear DF) assembly (x86) CLD 어셈블리 명령어 clear direction flag 즉 DF=0으로 설정하는 어셈블리 명령어 REP prefix가 붙어서 MOVS, LODS< SCAS, ... 등의 명령어가 사용되는데, 반복 횟수는 ECX레지스터에 담기지만, 데이터가 담긴 곳의 주소는 알아서 증감한다. (ESI, EDI) 이 때 자동으로 증감하는 방향을 결정하는 플래그가 DF(direction flag)다. DF=0이라면 incrementing DF=1이라면 decrementing 방향으로 증감한다.
c언어 cmd 콘솔 출력 색상 바꾸기 c언어 작성 중, 콘솔 출력 색상을 변경하고 싶다면, SetConsoleTextAttribute( GetStdHandle ( STD_OUTPUT_HANDLE ), 색상표번호 ); 로 색상을 바꾼 뒤 printf문을 호출하면 호출한 이후 부분부터 색상이 바뀐 채로 출력되는 것을 볼 수 있다. cmd 창에서 color /? 라고 치면 색상 표를 볼 수 있다. 0 = Black 검정 8 = Gray 회색 1 = Blue 파랑 9 = Light Blue 밝은 파랑 2 = Green 초록 10 = Light Green 밝은 초록 3 = Aqua 옥색 11 = Light Aqua 밝은 옥색 4 = Red 빨강 12 = Light Red 밝은 빨강 5 = Purple 자주 13 = Light Purple 밝은 자주 ..
rep stos rep stos rep : 반복한다. ecx 레지스터에 담긴 카운터 횟수만큼 stos : eax 레지스터 값을 edi레지스터에 담긴 주소안에 값으로 저장. rep stos stos를 반복한다. 얼마만큼? ecx레지스터에 담긴 카운터 횟수만큼. ex) rep stos dword ptr [edi] ==> 보통 - lea edi, 주소 - mov ecx, 카운터횟수 - mov eax, 넣을 값 - rep stos [edi] 명령어 세트로 많이 나옴.
shift 연산으로 원하는 값 만들기 팁 shift 크기를 내가 마음대로 결정할 수 있는 경우가 있다. shift 연산이야 그냥 하면 되는데 왜 이런 글을 썼을까? 32비트 기준으로 맨오른쪽에 있는 비트 1이 맨왼쪽끝으로 오려면 shl 31 할 때이다. 즉 shl 32 부터는 32비트 레지스터에 담겨있던 기존의 모든 값이 shift 연산으로 날아간다. 그래서 0이 되는 것이 아닌가? 했는데 결과가 그렇지 않아서 의문이 생겼다. x86 guide에 따르면 다음과 같다. “shifts counts of greater than 31 are performed modulo 32” 따라서 mov eax, 1 shl eax, 89 결과는 0x200이 된다.