[reversing.kr] Easy Unpack 풀이 이번 문제는 실행파일의 OEP를 찾는 문제로 시작은 GetProcAddress 함수 호출로 이루어져 있다. 원래 실시간 바이러스 겁사를 계속 꺼주었다 켜주었다 하는게 귀찮아서 Windows7 가상머신에서 문제를 푸는 편인데 이번 파일은 윈7에서 실행시키니 자꾸 GetProcAddress에서 함수를 못찾고 0을 리턴해서 윈10에서 풀기로 했다. 보통 OEP를 찾기 위한 방법으로 pushad&popad(OEP로 점프하기 전에 처음 레지스터 상태를 스택에 보원해놓고 백업하기 위함)를 찾고 popad 밑에있는 jmp문을 확인하는 방식이 있는데 너무 많다. 많은건 둘째치고 앞에 몇개정도 테스트해봤는데 정상적인 popad 코드가 아니거나 실행 루틴에 포함이 안되..
간단한 IDA 사용법이라고 할지... 개인적으로 분석할 때 알고있으면 유용하다고 생각하는 팁들을 정리해보려 한다. (+ 아직 몇가지 밖에 없는데 생각날 때마다 계속 추가될 예정이다) 함수 관련 함수 설정 (Create Function) 가끔 함수 시작지점이 맞는데 함수 지정이 안되어 있어서 함수로 인식이 안되는 경우가 있다. 이럴 경우 프롤로그 시작부분에 커서를 놓고 마우스 우클릭을 하면 'Create function'이 있는데 이걸 클릭해주면 된다. 이전 분기 찾기 아래와 같이 분기가 상당히 복잡한데 예를들어 원하는 블록의 이전 블록을 찾고싶다면 복잡한 화살표를 일일이 눈으로 따라서 찾아가지 않고도 화살표를 두번 클릭하면 자동으로 이전 블록이 찾아진다. 코드 관련 옵코드 보기 옵코드를 같이 보고 싶다면..
reversing.kr Easy Keygen 풀이 "Easy Keygen.exe"를 실행시키면 아래와 같이 Name을 입력받고 Serial 값도 입력받는다. 그리고 이번 문제에는 README에 문제가 아예 설명되어 있는데 "Find the Name when the Serial is 5B134977135E7D13" 이다. Name을 사용해서 시리얼값을 생성하는데 역으로 시리얼 값을 주고 맞는 Name을 찾아내는 문제이다. 코드 작성이 필수일 것 같다. 먼저 IDA에서 "Correct!"와 같이 시리얼 생성 함수에서 사용될 것 같은 문자열을 찾은 후 해당 문자열을 호출하는 함수로 가보았다. 이런 시리얼 생성 알고리즘과 관련한 문제는 먼저 헥스레이로 전체적인 구조?를 파악한 후 세부 알고리즘은 어셈으로 하나하..
2017년에 풀기 시작한 reversing.kr 문제들을 여기로 옮기려 하는데, 풀이가 엉망인게 많아서 결국 다시 풀게됐다. 옛날에 Position까지 풀고나서 연구실 일을 하느라 바빠서 풀지 못했는데 Position까지 다 옮기고 나면 간간히 한문제씩 풀어보려고 한다. reversing.kr은 리버싱 워게임 중에서도 난이도가 있는 편에 속하고 심지어 문제도 따로 없이 바이너리만 주어지는 경우도 있기 때문에 문제 의도가 뭔지 알기 힘든 것도 많다. 그래서 소제목도 좀 통일성이 없고 양식을 통일하기도 힘들 것 같아서 크게 신경쓰지 않고 줄글 느낌으로 쓰기로 했다. reversing.kr Easy Crack 풀이 먼저 Easy Crack 파일을 실행시켜 보면, 아래와 같이 어떤 값을 입력받고 있다. 정답 시..
드디어 코드엔진 Basic RCE 마지막 문제이다. 2017년도에 풀었던 풀이를 옮기는데 이상하게 생각한 것도 있고 별로 효율적이지 못한 방법을 사용한 것도 많고 해서 풀이를 많이 수정했다. CodeEngn Basic RCE L20 문제 확인 이번 문제는 Cracked by: 뒤에 CodeEngn! 이 출력되려면 crackme3.key 파일 안의 데이터가 무엇이어야 하는지 구하는 문제이다. 파일을 실행시켜보면 지금은 알맞는 key파일이 없기 때문에 아래와 같이 아무런 문구도 뜨지 않는다. CodeEngn Basic RCE L20 풀이 /* 앞부분에 삽질이 좀 있어서 알맞는 풀이는 밑으로 쭉쭉 내려서 마지막 부분을 보시기 바랍니다 */ 제일 처음, 만들어진 CRACKME3.KEY 파일을 생성한 후 Read..
CodeEngn Basic RCE L19 문제 확인 이번 문제는 처음 보는 유형의 문제이다. 파일을 실행시켜 보면, 아래와 같이 창이 하나 뜨고 곧 종료된다. CodeEngn Basic RCE L19 풀이 먼저 해당 문제는 UPX 패킹이 되어있기 때문에 언팩을 해줘야 한다. UPX 언팩과 관련해선 다른 문제에서도 반복적으로 계속 다뤘으므로 여기선 패스한다. 일단, 프로그램 밀리세컨드 체크를 수행하는 함수가 어떤 것이 있는지를 먼저 알아야 한다. 구글링한 후 문제의 파일에서 임포트하고 있는 함수 중에 실제로 실행되고 있는 함수를 거르니 timeGetTime이 남았다. 호출부분을 찾으면 끝이겠거니 했는데 호출 부분이 상당히 많다. IDA로 하나하나 보면서, 비교구문 없이 그냥 끝나버리거나 혹은 코드로는 있지..
CodeEngn Basic RCE L18 문제 확인 L18 문제는 Name이 CodeEngn일 때 시리얼 값을 구하는 문제이다. 파일을 실행시켜보면, 아래와 같이 Name과 시리얼 값을 입력받고 있다. CodeEngn Basic RCE L18 풀이 L17 문제에서 삽질을 많이 한 것과는 달리 이번 문제는 상당히 쉽다. Name에 CodeEngn을 넣어주고 문자열 비교하는 부분에 bp를 걸어 정답 시리얼 값을 확인하면 된다. 이번에도 역시 문자열에서부터 시리얼 값을 체크하는 함수를 찾아주었다. 딱봐도 lpString1,2 중에 하나가 정답 시리얼 값이다. lstrcmpiA 함수 호출부분에 bp를 건 후 실행시키면 정답 시리얼 값을 확인할 수 있다. 그리고 해당 시리얼 값을 Name이 CodeEngn일 때 ..
일치하는 콘텐츠 단위란? 신경을 전혀 안쓰고 있었는데 일치하는 콘텐츠 광고가 활성화되었다. 진리의 케바케 사바사이지만 본문 하단에는 일치하는 콘텐츠 광고를 넣는 것이 제일 수익 향상에 좋다는 말(당연히 객관적으로 증명된 사실은 NO)이 있기 때문에 당장 하단의 디스플레이 광고를 일치하는 콘텐츠로 변경하기로 했다. 일치하는 콘텐츠는 여태까지 넣었던 일반적인 광고와는 다르게 관련성 높은 다른 글을 홍보해 페이지 조회수와 사이트 이용 시간을 늘리는 데 도움이 되는 서비스이다. 클릭에 따른 수익은 없을지라도 조회수와 머무르는 시간이 올라가면서 자연스럽게 다른 광고 클릭률도 향상될 수 있다. "페이지 조회수가 9% 증가" "사이트 이용 시간이 10% 증가" 구글의 일치하는 콘텐츠 관련 설명을 보면, 실험 결과 일..
머신러닝을 공부하고 코드를 작성하다 보면 (케라스를 사용하는 사람도 있지만) tensorflow 프레임워크 사용이 거의 필수적이다. tensorflow는 tensorflow-cpu와 tensorflow-gpu를 설치하는 과정이 전혀 다른데, gpu 버전은 cpu에 비해 상대적으로 설치가 좀 까다롭다. 이번 포스팅에서는 설치가 쉬운 윈도우 tensorflow-cpu 버전 설치 과정을 알아본다. 윈도우 아나콘다(Anaconda) 설치 아나콘다는 파이썬 가상환경을 지원하는 일종의 프로젝트로 tensorflow 포함 여러 패키지가 포함되어 있다. 가상환경이기 때문에 나중에 tensorflow-cpu와 tensorflow-gpu를 왔다갔다 하기도 편하고 관리가 쉬워서 윈도우에서는 tensorflow 사용 시 대다..
QEMU에 펌웨어를 올릴 수 있다면 좋겠지만, 그럴 수 없다면 UART해킹을 통해 쉘획득을 하는 방법을 사용할 수 있다. 래빗을 사용해서 PC 상에서 UART 기기 쉘획득을 하려면, IPcam -> 래빗(rabbit) -> PC 순서대로 연결을 해주어야 한다. 필요한 장비는 아래와 같다. - UART 기기 (ex. 포스팅에서는 IPCam을 사용) - 래빗 (rabbit) : PC와 UART 기기를 연결하기 위함 - 점퍼케이블 : 래빗과 UART 기기를 연결하기 위함 - 기타... (드라이버..?) UART 기기의 UART 핀 위치 확인 먼저 기기를 뜯어서 UART 핀 위치를 확인해준다. 보통 4핀 배열이면 UART 핀이라고 의심할 수 있는데 4핀 배열이 여러개 있는 장비도 있는 듯 하다. 나는 직접 Io..
CodeEngn Basic RCE L17 문제 확인 앞선 문제들이 Name이 주어졌을 때 시리얼이나 키값을 구하는 문제들이었다면 17번 문제는 Key값이 주어지고 이때의 Name 값이 무엇인지 묻고있다. 이번 문제는 Name이 한자리인 것에서도 삽질을 좀 하고 4바이트를 넘어가는 연산이라는 것을 생각하지 못해서도 삽질을 하고... 삽질을 좀 많이 했다. 파일을 실행시켜 보니 아래와 같이 Name과 Key 값을 입력받고 있다. CodeEngn Basic RCE L17 풀이 문자열에서 Key를 체크하는 함수에서 사용될 것 같은 'Good Boy!!!'와 'Well done!'을 발견하고 사용되는 함수로 가보았다. 해당 문자열이 쓰인 부분 위의 베이직 블락을 보니 LstrCmp 함수 호출로 두 문자열을 비교하..
binwalk 펌웨어 추출 시 sasquatch 에러 binwalk를 사용해 펌웨어를 추출하다 보면 가끔 " WARNING: Extractor.execute failed to run external extractor 'sasquatch -p 1 -le -d '%%squashfs-root%%' '%e'': [Errno 2] No such file or directory " 와 같은 에러가 발생할 때가 있다. 아마도 squashfs 파일시스템과 관련해서만 발생하는 에러인 것 같다. 해당 에러는 아래 깃허브의 sasquatch를 설치해서 해결할 수 있다. sasquatch 설치 깃허브 devttys0/sasquatch Contribute to devttys0/sasquatch development by cre..