반응형


저번 Gate문제와는 달리 버퍼에 ShellCode를 저장할 수 없습니다.

그러므로 새로운 공간에 ShellCode를 넣을 필요가 있습니다.

이때 우리는 환경변수를 사용할 수 있습니다.


export shellcode=`python -c 'print SHELLCODE'`


와 같은 명령어를 통해 환경변수에 ShellCode를 넣을 수 있습니다.

그러면 이제 환경변수의 주소 위치를 알아야 합니다.


환경변수의 주소는 

환경변수 내용의 크기와 프로그램의 시작명령줄의 길이에 비례합니다.


프로그래밍을 통해 위치를 알았습니다.

#include<stdlib.h>

#include<stdio.h>

int main(int argc,char *argv[])

{

        int k,a,b;

        a=strlen(argv[0]);

        b=strlen(argv[1]);

        k=getenv("KSHMK");

        k+=2*(a-b);

        printf("0x%x\n",k);

        return 0;

}



이제 공격만 하면 됩니다.

오버플로우하는 방법은 이전 Gate와 같으므로 생략합니다.




'Pwnable > LOB' 카테고리의 다른 글

LOB 6. Wolfman  (0) 2015.09.25
LOB 5. Orc  (0) 2015.09.23
LOB 4. Goblin  (0) 2015.09.20
LOB 3. Cobolt  (0) 2015.09.17
LOB 1. Gate  (0) 2015.09.08
반응형

ReadMe

ReversingKr UnpackMe

Find the OEP

ex) 00401000


어떤 Packer로 되어있는지 확인해 보았습니다.



자작 페커를 사용하셨나 봅니다.



이부분은 409000~4094EE부분을 언펙하는 부분입니다.



IAT를 복원하고 줄줄히 밑으로 복원합니다.



마지막에 JMP를 통해 OEP로 가게 됩니다.

이런 방식의 Packer는 UPX를 약간 개조한 것 같습니다.


KEY: 00401150


'Reversing > Reversing.KR' 카테고리의 다른 글

ReversingKR ImagePrc  (0) 2015.10.22
ReversingKR Replace  (0) 2015.09.22
ReversingKR Easy ELF  (0) 2015.09.20
ReversingKR Easy KeygenMe  (0) 2015.09.11
ReversingKR Easy CrackMe  (0) 2015.09.08
반응형

ReadMe

ReversingKr KeygenMe

Find the Name when the Serial is 5B134977135E7D13



이름을 입력받아 시리얼을 만드는 모양인 것 같습니다.

IDA로 열어보았습니다.



이걸 통해 시리얼을 사용해 이름을 만드는 소스를 만들었습니다.

#include<stdio.h>

#include<string.h>

int main(void)

{

char Serial[100]={0};

char Name[100]={0};

char Seed[3]={16,32,48};

int i,k;

scanf("%s",Serial);

for(i=0,k=0;i<strlen(Serial)/2;i++,k++)

{

k%=3;

sscanf(Serial + (i * 2), "%2x", &Name[i]);

Name[i] ^= Seed[k];

}

printf("%s\n",Name);

return 0;

}


KEY: K3yg3nm3

'Reversing > Reversing.KR' 카테고리의 다른 글

ReversingKR ImagePrc  (0) 2015.10.22
ReversingKR Replace  (0) 2015.09.22
ReversingKR Easy ELF  (0) 2015.09.20
ReversingKR Easy UnpackMe  (0) 2015.09.12
ReversingKR Easy CrackMe  (0) 2015.09.08

+ Recent posts