어셈블리(JE&JZ)

2020. 1. 12. 06:50정보보안

@ 어셈블리(JE&JZ)

1. if 구문

 - 조건에 만족되면 코드가 실행되는 조건문이다.
 - 만약, 조건에 만족하지 않으면 다른 코드를 실행하거나 프로그램을 종료한다.
 - if 구문 형식은 다음과 같다.

if (조건 1)
{
// 조건1이 만족하면 실행하는 코드
// 만약, 조건1이 만족하지 않으면 'else if'로 넘어간다.
}
else if (조건 2)
{
// 조건2이 만족하면 실행하는 코드
// 만약, 조건2이 만족하지 않으면 'else'로 넘어간다.
}
else 
{
// 조건2이 만족하지 않으면 실행하는 코드
// 만약, 여기 조건도 만족하지 않으면 종료한다.
}


2. JE/JZ

 - 형식 : JZ [Code Address]
 - 내용 : 비교 결과 값이 '0'이면(ZF=1 설정된 경우), 해당 주소로 점프한다.
 - 예제 : JZ 401140
 - 해석 : ZF=1 인 경우, 401140으로 점프한다.
 - 조건 : Operand 1 == Operand 2

 1) VS 2008을 이용하여 'je.exe' 파일을 제작한다.

 - 파일 -> 새로 만들기 -> 프로젝트 -> 빈 프로젝트 -> 위치(04_테스트) & 이름(je) -> 확인
 - '소스 파일' 우클릭 -> 추가 -> 새 항목 -> 'C++ 파일(.cpp)' 선택 -> 이름(je) -> 추가

#include 
#include 
#pragma comment(lib, "user32")

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmd, int nCmd)
{
int num1 = 6;
int num2 = 6;

if(num1!=num2) {
MessageBox(NULL, "Operand1 != Operand2(ZF=0) -> Next Code", "JE 명령어(점프X)", MB_OK);
} else {
MessageBox(NULL, "Operand1 == Operand2(ZF=1) -> Jump", "JE 명령어(점프O)", MB_OK);
}
return 0;
}


 - 파일 -> 모두 저장 -> 닫기


 2) 'cl' 명령어를 이용한 최적화 컴파일 실시

C:\리버싱\04_테스트\je\je>cl je.cpp /link /debug /opt:icf,ref
Microsoft (R) 32비트 C/C++ 최적화 컴파일러 버전 15.00.30729.01(80x86)
Copyright (c) Microsoft Corporation.  All rights reserved.

je.cpp
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:je.exe
/debug
/opt:icf,ref
je.obj

C:\리버싱\04_테스트\je\je>dir


3. 올리디버거를 이용한 'je.exe' 분석

 - 메모리 주소, 레지스터 저장 값, 스택 내용, 메모리 덤프 내용, 비교 및 분기 내용 확인























'정보보안' 카테고리의 다른 글

어셈블리(JLE)  (0) 2020.01.12
어셈블리(JNE&JNZ)  (0) 2020.01.12
어셈블리(IDIV)  (0) 2020.01.12
어셈블리(IMUL)  (0) 2020.01.12
어셈블리(sub)  (0) 2020.01.12