보안 스터디/reversing

리버싱 문제를 푸는데 도움이 되는 z3 사용법을 간단히 적어보려 한다먼저 z3는 원하는 수식들을 넣으면 계산해주는 계산기와 같은 기능을 하는 python 모듈이다. z3 명령어 python 에서 from z3 import* 로 모듈을 불러옴 s = Solver()s라는 변수에 원하는 수식을 넣어줄 준비과정 BitVec()변수에 넣고싶은 수와 비트수를 설정#정수 선언은 x = Int('x'), 실수 선언은 x = Real('x')로 함 s.add()계산하고자 하는 수식을 추가 s.check()값이 존재하는지 확인하고 존재하면 sat, 존재하지 않으면 unsat를 반환 s.model()값이 존재할 경우 값을 구하고 존재하지 않을 경우 에러를 반환 주로 위의 함수들을 사용하며그 외의 함수는 아래와 같다 app..
정적분석을 연습하려고 디버깅을 하지 않고 ida로 어셈코드만 보기로했다 까보니 코드가 짧길래 별다른 행동 없이 string검색을 통해 성공구문을 찾고 이동했다 이동 후 그래프뷰로 분기문을 봤는데대충 보니 반복하며 특정 주소에 있는 값과 xor연산을 하고 비교하는 듯 하다 헥스레이로 디컴파일 해보니 입력한 name을 v6에 적재되어있는 16과 ^연산을 하고 다른 공간에 저장하고 이후 입력한 serial과 비교한다 스택에 v6로 이동해보니 v7,v8과 나란히 있다16,32,48과 반복해서 ^연산을 진행하여 명시되어있는 시리얼과 매칭되는 name을 알아냈다
Static library란 링크 단계에서 라이브러리 파일을 포함시키는 것이다 장점이라면 라이브러리 함수들을 별도의 터치없이 사용할 수 있다는 점.하지만 정적 라이브러리는 프로그램의 크기가 커질수록 실행 파일들의 크기도 비효율적으로 커지며 메모리 공간활용 효율이 떨어진다는 단점이 있다 Dynamic library란 유동적으로 링크시켜 사용하는 lib로 사용이 필요한 경우 그 부분만 링크하거나 로드하여 사용하는 것이다그렇기 때문에 메모리 공간활용 효율이 좋다는 장점이 있다
핸드레이 연습을 하려고 흔히 돌아다니는 문제 Easy_Crack을 가져와봤다 일단 OLLY에 올려보자 텍스트 입력부분을 생략하고 바로 비교문으로 왔다cmp비교문이 먼저 보인다 esp+5를 찾아가보면 내가 입력한 두번째 문자에 도달한다 그리구 00406078에 5y가 push됨 이후 test비교문이 나오는데 함수에 들어가보진 않았지만 "5y"문자열을 비교하고 같으면 eax에 0을 반환하는거 같다 이부분은 돌려보면서 esi와 eax를 따라가보니 입력한 5번째 문자부터 R3versing과 하나씩 비교한다보면 ds:[eax]와 ds:[esi]를 2씩 add하며 비교하는 것을 알 수 있다 마지막으로 입력한 첫번째 문자를 E와 비교하고 아래에는 성공과 실패 메세지를 띄워줌 결론적으로 정리해보면 이정도인듯 하다c언어..
호다닥 코드를 짜고리버싱 입문책의 가장 앞에있는 문자열 패치를 해보자 경고가 뜨길래 보니까 EP가 code section 영역 밖에있을때 뜬다고 한다컴파일을 Debug가 아닌 Release로 하고 Release폴더에 있는 실행파일을 올리면경고가 ㅅ ㅏ라진다근데 사실 크게상관없다 올리에 올린다고 당연히 원하는 메인함수 어셈이가 바로뜨진 않는다메인함수를 찾자 [F8]로 진행해보다가 친절하게 main이라고 적혀있길래 bp걸고들어가보니 OFFSET값이 PUSH되고 printf함수가 호출되는걸 볼수 있다stack window로 ㄱ ㅏ보니 현 esp에 오프셋값이 있당Dump window에서 오프셋값으로 주소를 검색해보니 hello world!바꿔준다 짠 modify한 실행파일을 저장하고싶으묜 우클릭->copy to..
32비트 실행파일(.EXE)을 올리디버거에 올리면 위와 같은 화면이 나온다.왼쪽 위부터 시계방향으로 code window register window Dump window stack window code window디버깅에 기본이 되는 디스어셈블 코드가 표시됨어셈블리어 코드를 수정할 수도 있음jump로 이동되는 주소로 선이 이어지고, 오른쪽엔 주석이 표시됨break point를 걸 시 주소에 빨간마크가 새겨짐 register windowcpu 레지스터들이 표시됨일부 레지스터는 수정도 가능 Dump window메모리에 적재되어있는 raw hex값이 표시됨아스키코드값으로도 표시되며 수정도 가능하다 stack windowesp가 가리키는 스택메모리 공간을 표시해줌 다음은 내가 올리를 사용하여 디버깅을 할때 주..
정적 분석일반적으로 런타임환경에서 수행되지 않는다. 프로그램 코드에서 가능한 모든 런타임동작을 검사하고 코딩 결함, 잠재적인 악성 코드를 찾는다.기본적으로 어셈블리어 언어에 대한 공부가 필요하며 잘 알려진 디스어셈블 툴로 ida가 존재함 정적 분석은 동적 분석에서 나타나지 않을 미래의 오류를 먼저 찾을 수 있다 동적 분석프로그램을 실행시키며 나타나는 변화를 체크하며 분석하는 것시스템 메모리, 응답 시간과 같은 시스템의 전반적인 성능을 모니터링 동적 분석은 정적 분석을 통해 알기 힘든 미묘한 결함이나 취약성을 드러낼 수 있으며 보다 편한 방법일 수 있다. 하지만 동적 분석에서는 실제로 실행되는 코드 부분에서만 결함을 찾는다는 단점이 있다.
뚱졍뚱졍
'보안 스터디/reversing' 카테고리의 글 목록