본문 바로가기

IA-32 opcode map-1 일단 지금 하고 있는것이 기계어-> 어셈블리어로 변환시키는 방법이므로 intel이 어떻게 기계어 구조를 만들었는지를 알기 위해서 Intel에서 제공해준 공식 메뉴얼을 봐봤습니다. 이 메뉴얼은 intel공식 홈페이지를 가서 메뉴얼 다운로드를 하면 나옵니다. 먼저 인텔 기계어의 가장 기본적인 구조입니다.1)Instruction Prefixes: 1바이트로 Opcode를 보조하는 역할을 합니다.(선택적: 없어도 됨)2) Opcode : 1,2,3 바이트로 어떤 명령어인지를 알려줍니다.3) ModR/M : 1바이트로 각각의 bit가 Mod, Reg/Opcode,R/M으로 되있으며 Opcode가 원하는 그 어셈블리어에서 명령어 뒤에 나오는 값이 라고 생각하면 됩니다.(선택적)4) SIB : 1바이트로 각각의 bi.. 더보기
EP찾기 RAW=RVA-VA+PointerToRawData라는것을 이용해서EP의 RVA를 OptionalHeader구조체서 참조해오고,VA와PointerToRawData를 code부분의 Sectionheader구조체서 참조해오고,그것을 계산시킨값을 code라는부분에 저장시켜봤습니다.일단 이상태는 기계어(어셈블리어가 아님)일테니까 실험적으로 20바이트만 출력해보도록 해봤습니다. 그러니 이렇게 기계어가 막 튀어나오는데 실제 이 기계어는 올리디버거의 Opcode와 똑같습니다. 다음번에는 이제 IA-32의 instruction과 함께 이 기계어로부터 어셈블리어로 변환시키는 작업을 해보겠습니다. 더보기
Junior CTF Level2 오랜만에 해커스쿨을 좀 돌아보고 있었는데 멍멍님이 올리신 Junior CTF가 있더라고요.그래서 한번 풀어봤습니다.현재 예선전이 끝났으므로 풀이를 올려도 상관없을거라 생각해서 올립니다.문제가 있을시 덧글로 알려주시면 감사하겠습니다. 이렇게 문제가 주어지는데요.파일을 다운로드 해서 실행해보겟습니다. 이런식으로 패스워드를 입력하라고 한다음 맞음,틀림을 구분한다음 그 결과에 해당하는 메시지박스를 출력합니다. 일단 가장 간단한 리버싱기법인 Back To User 기법을 사용해보겟습니다. 그러니 이렇게 메시지박스를 만드는 부분이 있고,그 위로 password를 검사하는 부분이 있습니다. 이런 식으로 password가 있는데 이 어셈블리어를 자세히 읽어보면 A(레지스터값)을 99와 xor한뒤 그 값이 0xF1,0x.. 더보기