https://dreamhack.io/wargame/challenges/18
rev-basic-4 풀이
Detect it easy다운로드사이트
http://ntinfo.biz/index.html
대충 패킹/플텍없고 다른보안안보오기고 puts가보인다
디버거로 ep들어가서 문자열검색 성공열 으로들어가서
안에 내부함수안에 들어가서 기록한모습이다
저렇게 옆에 ;이나 클릭으로 주석을 작성할수있다
밑에덤프창에는 암호화된문자들이있다
암호화된값을 추출한후에
문자열
문자1 >> 4
문자2 << 4
and문자2, F0(1111 0000)
or 문자1,문자2
이규칙을 역으로 해서
암호문을 해독하면된다
사전을만들어 암호문과 비교하러했지만 사전이오류가났다
이제 저암호문을 풀기위해 다시 알고리즘을 생각해보자
그래서 암호문을 알기위해 0x21부터 0x71까지모든걸계산하는사전을만들기로했다
이걸보니 암호화로 뭘할려는지이해했다
문자열
문자1 >> 4
문자2 << 4
and문자2, F0(1111 0000)
or 문자1,문자2
여기에 예를달아서설명해본다
0x21이 바이너리(이진수)로 (0010 0001)
이걸 시프트하면
0000 0010
0010 0001 0010
and 연산으로 뒷자리날라감F0(1111 0000)
or 연산으로 문자1,문자2를하면
(0001 0010)
앞뒷 자리만바뀌었다
즉
(AAAA BBBB)를
(BBBB AAAA)로 바꾸면된다
그러다가
생각난 가장효율적인방법
암호화된 0xAB를
0xBA로바꾸면된다
아무튼 나는 코딩을해서이걸바꾸어보려고한다
끝 원본 암호화코드활용해서짬
#include <stdio.h>
#include <string.h>
#include <Windows.h>
void main()
{
byte a[] =
{
0x24, 0x27, 0x13, 0xC6, 0xC6, 0x13, 0x16, 0xE6, 0x47, 0xF5, 0x26, 0x96, 0x47, 0xF5, 0x46, 0x27,
0x13, 0x26, 0x26, 0xC6, 0x56, 0xF5, 0xC3, 0xC3, 0xF5, 0xE3, 0xE3
};
byte c;
byte d;
for (byte b = 0; b < 27; b++)
{
c = a[b] >> 4;//시프트
d = a[b] << 4;//시프트
d = (d & 0xF0);//and연산
a[b] = (c | d);
}
printf("%s", a);
system("pause");
}
0x24, 0x27, 0x13, 0xC6, 0xC6, 0x13,
0x16, 0xE6, 0x47, 0xF5, 0x26, 0x96,
0x47, 0xF5, 0x46, 0x27, 0x13, 0x26,
0x26, 0xC6, 0x56, 0xF5, 0xC3, 0xC3,
0xF5, 0xE3, 0xE3
암호화값추출후
파이썬 idle같은걸로 0x42등 거꾸로해서 노동으로 쉽게알수도있다
아니면 환경변수 설정후
pip install --upgrade pwntools
로 pwntools로 풀수도있다
'PC리버싱 > dreamhack리버싱풀이' 카테고리의 다른 글
rev-basic-5 풀이 (0) | 2020.05.29 |
---|---|
워게임 전체적인 과정 (0) | 2020.05.29 |
rev-basic-3 풀이 (0) | 2020.05.14 |
rev-basic-2 풀이 (0) | 2020.05.13 |
rev-basic-1 풀이 (0) | 2020.05.13 |