2-7-------------
시저 암호화
알파벳의 패턴을 쉬프트하여 +3의 위치에 있는 것을 입력한다.
\\\\\\\ C코드\\\\\\\\\\\\\\\\\\\
#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
int len;
for( len = 0 ; lpCmd[len] ; len++ );
char * p = (char * ) malloc(len+1); // ( 강제 형 변환 )
len = 0;
while(lpCmd[len]){
if( lpCmd[len] >= 'A' && lpCmd[len] <= 'Z')
char ch = 'A';
else if(lpCmd[len] <= 'a' && lpCmd[len] <= 'z')
ch = 'a';
else if( lpCmd[len] == ' '){
p[len] = lpCmd[len]; // null값을 담는다.
len++;
continue;
}
else
return 0;
p[len]= (lpCmd[i] - ch + 3) % 0x1A + ch;
//기존 알파벳에서 RSHIFT 3을 진행한 뒤 26(알파벳수)으로 나눈 나머지에 문자 A를 최초도 더한다. A일 시 D가 됨.
len++;
}
return 0;
}
\\\\\\\\\\\\\\\\\\\\\\\\
# new, malloc : 동적할당의 경우 동적할당이 된(call) 부분에서 확인할 수 없고 최초로 쓰이는 부분에서 어떤 자료형으로 쓰였는지 확인할 수 있다. malloc은 void자로형(형이 없는 것)이기에 형변환을 통해 데이터형식을 정해줘야한다.
# IDIV ECX : 나머지를 구하는 것으로 EAX에 입력된 수와 ECX를 나누기 한 후 나머지를 EDX에 저장하고 몫은 ECX에 저장한다.
'리버싱' 카테고리의 다른 글
11일차, caller, callee 복귀주소(RETN) (0) | 2013.04.22 |
---|---|
10일차, 브레이크 포인트, Frame Pointer Omission (0) | 2013.04.20 |
8일차, malloc, strcmp (0) | 2013.04.17 |
7일차 리버싱의 오묘한맛 (0) | 2013.04.16 |
6일차, (0) | 2013.04.15 |