반응형
반응형
반응형

Welcome_REV

50

 

32비트 elf파일인데 ida로 까보면 입력값 확인하는 함수를 확인할 수 있고, 함수 내부에 strncmp로 비교하게 되는 base64 문자열을 확인할 수 있다. 그대로 가져와서 디코딩하면 플래그가 바로 나온다.

 

 

 

 

Reversing Me

100

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <string.h>
 
int main() {
    int i;
    char *serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}";
    char enter[54];
    printf("키를 입력하시게 : ");
    scanf("%s", enter);
    if (strlen(enter) == strlen(serial)) {
        for (i = 0; i < strlen(serial) && (enter[i] ^ (i % 2)) == serial[i]; i++);
        if (i - 1 == strlen(enter))
            printf("정답일세!\n");
    }
    else
        printf("그건 아닐세...\n");
        exit(0);
}
cs

 

enter[i] ^ (i%2) == serial[i] 이어야한다.

 

xor연산은 한 번 더 해주면 원래대로 돌아간다.

 

enter[i] == serial[i] ^ (i%2)

 

파이썬으로 코드를 짜서 플래그를 얻었다.

 

1
2
3
4
5
6
serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}"
flag = ""
for i in range(len(serial)):
  flag1 =ord(serial[i]) ^ (i % 2)
  flag += chr(flag1)
print(flag)
cs

 

 

Handray

100

음..

수상해보이는 부분 공략

string[i] 이랑 array[i]를 더하나봄

 

 

Strncmp

150

 

 

Keygen

200

 

 

Static

250

 

 

BabyMIPS

400

 

xor

반응형
반응형

카토 이미지 보고싶다.

200

[문제 설명] 변태 C#
[출제자] 황수민(Xixon)

 

 

exe파일이 하나 주어진다.

Exeinfo PE로 분석해보면 .NET으로 작성된 프로그램임을 알 수 있다.

 

 

dotPeek로 열었다.

업로드 할 파일명이 kato_megumi 이어야 하는 것 같다.

 

 

빈파일 하나 만들어서 이름을 kato_megumi 으로 하고 업로드를 하니 플래그가 나왔다.

 

 

 

 

No_Reverse_No_Life

200

[문제 설명] 허허 풀어 보랑께 노겜노라 시리즈의 시작!!
[출제자] 황수민

 

 

?

반응형
반응형
Basic RCE L11
OEP를 찾으시오. Ex) 00401000 / Stolenbyte 를 찾으시오. 
Ex) FF35CA204000E84D000000 정답인증은 OEP+ Stolenbyte 
Ex ) 00401000FF35CA204000E84D000000 





stolenbyte 12byte와 OEP 00401000를 구할 수 있다. jmp는 0040100c로 하지만 stolenbyte 0xC byte 만큼 붙여주면 oep는 0040100c가 된다.



Basic RCE L12
Key를 구한 후 입력하게 되면 성공메시지를 볼 수 있다 
이때 성공메시지 대신 Key 값이 MessageBox에 출력 되도록 하려면 파일을 HexEdit로 오픈 한 다음 0x???? ~ 0x???? 영역에 Key 값을 overwrite 하면 된다. 
문제 : Key값과 + 주소영역을 찾으시오 
Ex) 7777777???????? 




참조된 문자열을 찾아서 성공 메세지를 출력하는 부분을 찾고 그 위에서 비교문과 분기점에 breakpoint를 걸고 실행했다.


key 값으로 1234를 넣었는데, 넣은 1234와 0x7A2896BF과 비교하는 것을 볼 수 있다.


0x7A2896BF == 2049480383


key 값은 2049480383이 된다.




key값이 MessageBox에 출력되도록 하려면 HxD로 열어서 Cong~~~부분을 찾는다.




성공 메세지 부분을 2049480383(\x00)으로 덮어주면 된다.[0x0D3B~0x0D45]




Basic RCE L13

정답은 무엇인가 



.NET은 DOTPEEK으로!



main을 보면, 암호화된 문자열을 복호화 한 값이랑 사용자 입력값이랑 비교한다.





코드를 추출해서 복호화된 문자열을 출력하도록 했다.







Basic RCE L14
Name이 CodeEngn 일때 Serial을 구하시오 
(이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요) 
Ex) 11111 



upx 패킹이 되어 있으므로 언패킹을 진행하고 올리디버거로 열었다.







참조된 문자열중 성공문자열을 찾고, 그 위에 분기점과 비교문에 breakpoint를 걸고 실행했다.





CodeEngn / 11111을 입력했을 때 


11111은 EAX에 들어가서 ESI값 0x129A1과 비교하게 된다



0x129A1의 10진수 값 76193을 입력해주면 성공메세지가 출력된다.




Basic RCE L15
Name이 CodeEngn일때 Serial을 구하시오 



이번에는 패킹이 되어있지 않아서 바로 올리디버거로 열었다.




참조된 문자열에서 성공메세지를 찾고 그 위 비교문에 breakpoint를 걸고 실행했다.





CodeEngn / 12345 로 입력을 했는데 입력한 12345와 24928을 비교한다.





Basic RCE L16
Name이 CodeEngn일때 Serial을 구하시오 


이번에도 패킹은 없다.




참조된 문자열에서 성공메세지를 찾아 그 위 비교문에 breakpoint를 걸고 실행했다.





CodeEngn / 11111 로 입력했더니 11111과 0xE4C60D97과 비교한다.



0xE4C60D97 의 10진수값을 시리얼로 입력해주면 된다.

반응형

'WAR GAME > CodeEngn' 카테고리의 다른 글

CodeEngn [Basic RCE] 1 ~ 10 풀이  (0) 2019.02.09
CodeEngn [Cryptology] 풀이  (8) 2019.02.09
반응형
Basic RCE L01
HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가


검색하면 나온다.






Basic RCE L02
패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겼다. 패스워드가 무엇인지 분석하시오 



실행도 안되고 디버깅 프로그램으로도 열리지 않는다. 그런데 HxD로 보면 패스워드를 확인할 수 있다.





Basic RCE L03
비주얼베이직에서 스트링 비교함수 이름은? 


IDA로 열어서 함수명들을 살펴보면 문자열 비교 함수를 찾을 수 있다. 정답 입력할 때 '_'는 빼고 입력해야 한다.





Basic RCE L04
이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가 


IDA로 열어서 main_0함수 디컴파일 하면 해당 함수의 이름을 알 수 있다.




Basic RCE L05
이 프로그램의 등록키는 무엇인가



패킹이 되어 있다.




언패킹을 해주고, 


올리디버거로 열어서 참조된 문자열 리스트에서 하단으로 내려보면 키를 확인할 수 있다.




Basic RCE L06
Unpack을 한 후 Serial을 찾으시오. 
정답인증은 OEP + Serial 
Ex) 00400000PASSWORD 



5번문제와 같이 언패킹을 해준뒤 올리디버거로 연다.


프로그램이 시작되는 주소가 OEP가 되며, serial은 참조된 문자열 확인을 통해 알 수 있다.




Basic RCE L07
컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 'ß어떤것'으로 변경되는가 


시리얼 입력을 aaaa로 하고 C 드라이브의 이름은 Acer로 되어 있는 상태에서 올리디 버거를 돌려봤다.


"Acer" + "4562-ABEX"


가 되고 Acer부분이 연산루틴을 돈 뒤에(앞 4자리만 연산한다.)

문자열 앞에 "L2C-5781"이 붙어 시리얼이 완성된다.




비교를 하는 0x4010F7에 breakpoint를 걸고 C드라이브의 이름을 CodeEngn으로 바꾼뒤에 실행해서,

생성되는 시리얼을 확인하면 된다.


이때 CodeEngn이 바뀐 부분만 정답으로 제출하면 된다.




Basic RCE L08
OEP를 구하시오 Ex) 00400000 



역시 upx 패킹이 되어 있다.

언패킹을 하고 올리디버거로 열면 oep를 구할 수 있다.




Basic RCE L09
StolenByte를 구하시오 Ex) 75156A0068352040


stolenbyte로 인해서 언패킹이 정상적으로 이루어지지 않는다. 그대로 올리디 버거로 올린 뒤에 수동 언패킹을 하듯 jmp문을 찾아준다.




그럼 그 윗부분에 stolenbyte를 찾을 수 있다. 해당 opcode를 정답으로 제출하면 된다.




Basic RCE L10
OEP를 구한 후 '등록성공' 으로 가는 분기점의 OPCODE를 구하시오. 
정답인증은 OEP + OPCODE 
EX) 00400000EB03 




이번에는 upx가 아닌 aspack으로 패킹이 되어있음을 확인할 수 있다.


언패킹 하는 방법은 디버깅 툴로 retn 0c 를 찾아서 그 다음 두 명령어에 breakpoint를 걸어 실행하면 

push 0 가 oep값으로 바뀌어서 retn을 통해 oep로 이동하는 것이다.



breakpoint를 걸어주고




실행하면 push 0 가 push 00445834로 바뀐다. oep주소다.




참조된 문자열을 찾아서 등록완료를 출력하는 부분을 찾으면 그 윗부분에서 분기점의 opcode를 찾을 수 있다.

반응형

'WAR GAME > CodeEngn' 카테고리의 다른 글

CodeEngn [Basic RCE] 11 ~ 16 풀이  (0) 2019.02.10
CodeEngn [Cryptology] 풀이  (8) 2019.02.09
반응형

SuNiNaTaS의 9번문제 풀이입니다. 


[BINARY]




파일이 하나 주어진다.




실행을 하면 입력을 하나 받는다




일단 올리디버거로 까보자


문자열들을 확인해 보았다.





정수값하나와 성공메세지 등이 보인다.


이 정수값을 입력해 보자



성공!



...그리고 아무 메세지도 없이 프로그램이 종료되었다.


설마 저 값이 authkey?


그렇다.



반응형

'WAR GAME > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS [BINARY 11번] 풀이  (0) 2018.08.01
SuNiNaTaS [BINARY 10번] 풀이  (0) 2018.07.31
SuNiNaTaS [WEB 8번] 풀이  (0) 2018.07.31
SuNiNaTaS [WEB 7번] 풀이  (0) 2018.07.31
SuNiNaTaS [WEB 6번] 풀이  (0) 2018.07.31

+ Recent posts