본문 바로가기

Reversing16

혼동되는 어셈블리 명령어 NEG : 2의 보수 (부호 반전) NOT : 1의 보수 (비트 반전) MUL : AX와 오퍼랜드 곱셈 -> AX또는 DX:AX에 저장 IMUL 몫:AL, 나머지:AH DX:AX를 '' -> 몫:AX, 나머지:DX CBW : AL -> AX 확장 ex) eax에 0x12345678가 있으면 -> 0x12340078으로 됨 CWD : AX -> DX:AX 확장 SHL/SAL : 왼쪽 shift SHR/SAR : 오른쪽 shift (SAR은 산술 shift로 최상위 비트를 유지한다고 한다.) ROL/RCL : 회전 왼쪽 shift ROR/RCR : 회전 오른쪽 shift PUSHAD : 레지스터 내용을 스택에 push (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI 순서) PUSHFD.. 2012. 10. 7.
어셈블리어의 주소 지정 방식 1) 레지스터 주소 지정 MOV DX, BX 2) 직접 메모리 주소 지정 MOV AL, DS:[8088h] MOV DS:[1234h], DL 3) 레지스터 간접 주소 지정 MOV AL, [BX] MOV AL, [BP] 4) 인덱스 주소 지정 MOV AL, [BX+20h] MOV AL, [BP+20h] 5) 베이스 인덱스 주소 지정 MOV AL, [BX+SI] MOV AL, [BX][SI] MOV AL, [BP+SI] 6) 변위를 갖는 베이스 인덱스 주소 지정 MOV AL, [BX+SI+20h] MOV AL, [BP+SI+20h] Ref - 정보 보안 개론과 실습(시스템 해킹과 보안) 2012. 9. 10.
C코드->어셈코드 분석 [if, for, while] 어셈코드에 익숙해지기 위해서 c언어에서 if, for, while을 컴파일한 후 ollydbg로 어셈코드 형태를 알아보겠습니다. 1. if문 위와 같은 형태를 볼 수 있습니다. 즉 if문은 (조건 분기) - 연산 수행 - (무조건 분기) - 연산 수행 의 형태를 가집니다. [else 없이 if하나만 사용한다면 (조건 분기) - 연산 수행이 되겠죠] 2. for문 어셈 코드를 보기 전에 for문의 동작을 먼저 생각해보면, 1. i=0 - 비교(i 2012. 7. 28.
upx 언패킹하기 - MUP(Manual UnPacking) upx로 패킹된 프로그램을 MUP로 upacking하는 방법을 알아보겠습니다. 예제 프로그램은 CodeEngn Basic 6번 문제로 하겠습니다. 파일 : 실행 화면은 아래와 같습니다. peid와 stud_pe로 패킹되어 있는지 확인해보면 UPX로 패킹된 것을 볼 수 있습니다. - peid - - stud pe- 위와 같은 툴 없이도 올리디버거로 확인해 볼 수 있습니다. 올리디버거를 열면 "Compressed code?"라는 메시지를 띄어줍니다. 이걸로 패킹에 대한 의심을 해볼 수 있습니다. ..... 그리고 코드 부분을 보면 위쪽에 pushad, 아래쪽에 popad와 jmp를 볼 수 있습니다. pushad가 있다면 패킹된 것으로 보면 됩니다. 패킹되어있더라도 프로그램을 실행하면 정상동작하기 위해 패킹을.. 2012. 7. 12.