사용자 입력부분
키젠 알고리즘의 결과가 push 되는 곳
소문자를 대문자로 바꾸어 주는 알고리즘
push에 들어가는 인자값을 하나씩 역으로 분석하는 것이 빠르다.
name에 ABCD를 입력하고 분석 하였다.
edi = 0x0012f538
arg10 : ebp-40 :
int ebp_40;
int edi = 1242424; //0x0012f538
ebp_40 = edi * 3;
printf("ebp_40 = %X\n", ebp_40);
arg9 : ebp-3c :
int edx;
int ebp_3c;
int ebp_2c;
ebp_2c = strlen(input);
edx = ebp_2c;
ebp_3c = edx * 2;
printf("ebp_3c = %X\n", ebp_3c);
arg8 : ebp-44 :
int ebp_44 = strlen(input)+edi;
printf("ebp_44 = %X\n", ebp_44);
arg7 : ebp-38 :
int ebp_38;
int ebx = 0;
int ecx;
int esi;
edx = strlen(input)-1;
edi = 0;
ecx = input[0];
esi = ecx;
ebx += esi;
ebx *= ecx;
edx--;
do{
ecx = input[edi];
esi = input[edi+1];
edi++;
ebx += esi;
ebx *= ecx;
}while(edx--);
ebp_38 = ebx;
printf("ebp_38 = %X\n", ebp_38);
arg6 : ebp-4c :
int ebp_4c;
ebp_4c = 0x0012f538 + 4;
printf("ebp-4c = %X\n", ebp_4c);
arg5 :
int ebp_48;
ebp_48 = strlen(input) + 5;
printf("ebp-48 = %X\n", ebp_48);
arg4 : ebp-54 :
int ebp_54;
eax = 0;
ebx = 0;
ecx = 0;
edx = 0;
do{
eax = input[ecx];
edx = eax * 6;
eax ^=edx;
ebx += eax;
ecx++;
}while(ecx != strlen(input));
ebx += ebp_50;
ebp_54 = ebx;
printf("ebp-54 = %X\n", ebp_54);
arg3 : ebp-50 :
int ebp_50;
unsigned int eax;
ecx = 0;
edx = 0;
ebx = 0;
eax = 0;
do{
eax = input[ecx];
eax += ecx;
ebx += eax;
ecx++;
}while(ecx != strlen(input));
eax <<= 1;
eax = eax ^ 0x1e240;
ebp_50 = eax;
printf("ebp_50 = %X\n", ebp_50);
arg2 :
"%lX%lu-%lu%lX-%lu%lu-%lX%lX"
arg1 :
char keygen[] ={0, };
PUSH되는 인자값들을 올리디버거로 실행하면서 코드의 오류를 찾기위해
printf를 이용하여 값들을 확인하며 작업했음
C코드로 작성후 실행화면
실행파일에 키 적용
알고리즘 분석 및 키젠파일 만들기 성공
'정보보안 > Reversing' 카테고리의 다른 글
BufferOverFlow(memcpy),shellcode 작성 (323) | 2020.08.05 |
---|---|
Buffer Over Flow Stack 구조 (344) | 2020.08.05 |
Keygenning4newbies CrackMe Keygen 프로그래밍 (319) | 2020.08.05 |
CrackMe 4번 문제 암호화 알고리즘 분석 (371) | 2020.08.05 |
함수호출규약, Win API (320) | 2020.08.05 |