PC리버싱/dreamhack리버싱풀이

rev-basic-4 풀이

Lamed_Dhhd 2020. 5. 14. 18:28
반응형

https://dreamhack.io/wargame/challenges/18
rev-basic-4 풀이

rev basic 4 decrypt.zip
0.06MB


Detect it easy다운로드사이트
http://ntinfo.biz/index.html

.:NTInfo:.

ntinfo.biz


대충 패킹/플텍없고 다른보안안보오기고 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