1
2
3
4
5
6
7
8
9
10
11
12
13
def gen_serial(name):
    serial = str()
    for i in range(len(name)):
        serial += hex(ord(name[i])^(0x10*(i%3+1)))[2:]
    return serial
 
def get_name(serial):
    name = str()
    for i in range(len(serial)/2):
        name += hex(int(serial[i*2:(i+1)*2],16)^(0x10*(i%3+1)))[2:].decode('hex')
    return name
 
print get_name("5B134977135E7D13")



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

Easy Keygen (100)  (0) 2016.11.02
Position (160)  (0) 2016.11.01

2시간 동안 풀었다.

성환이는 API 사용해서 프루트포싱 했다고 한다.

나는 분석해서 python으로 코드짜서 브포 했다.

뭔가 분석 속도가 살짝 빨라지는 느낌이다.


좀 공부 될만한 것을 보자면 아래와 같다.


  • CSimpleStringT<wchar_t,1>::GetAt : 문자열의 특정 위치 1바이트 가져오기
  • CSimpleStringT<wchar_t,1>::GetBuffer : 그냥 문자열 버퍼?(컴파일러가 만들어 주는 것이라고 생각!)
  • itow_s : 숫자 > 문자열



MFC에서 Text 내용을 가져올 때 GetWindowText 함수를 사용하며 두번째 인자가 Buffer, (Buffer - 12)는 문자열 길이(크기)!



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import itertools
 
def get_seral(name):
    serial = str()
 
    al = ord(name[0])
    ebp_20 = (al & 1+ 5
    ebp_1f = ((al >> 1& 1+ 5
    ebp_1e = ((al >> 2& 1+ 5
    ebp_1d = ((al >> 3& 1+ 5
    ebp_1c = ((al >> 4& 1+ 5
 
    al = ord(name[1])
    ebp_28 = (al & 1+ 1
    ebp_27 = ((al >> 1& 1+ 1
    bl = ((al >> 2& 1+ 1
    ebp_25 = ((al >> 3& 1+ 1
    ebp_24 = ((al >> 4& 1+ 1
 
    serial += str(ebp_20 + bl)
    serial += str(ebp_1d + ebp_25)
    serial += str(ebp_1f + ebp_24)
    serial += str(ebp_1e + ebp_28)
    serial += str(ebp_1c + ebp_27)
 
    serial += '-'
 
    al = ord(name[2])
    ebp_1c = ((al >> 4& 1+ 5
    ebp_1d = ((al >> 3& 1+ 5
    ebp_1e = ((al >> 2& 1+ 5
    ebp_1f = ((al >> 1& 1+ 5
    ebp_20 = (al & 1+ 5
 
    al = ord(name[3])
    ebp_28 = ((al & 1+ 1)
    ebp_27 = ((al >> 1& 1+ 1
    bl = ((al >> 2& 1+ 1
    ebp_25 = ((al >> 3& 1+ 1
    ebp_24 = ((al >> 4& 1+ 1
 
    serial += str(bl + ebp_20)
    serial += str(ebp_1d + ebp_25)
    serial += str(ebp_1f + ebp_24)
    serial += str(ebp_28 + ebp_1e)
    serial += str(ebp_1c + ebp_27)
 
    return serial
 
chars = "abcdefghijklmnopqrstuvwxyz"
min_len, max_len = 33
 
for n in range(min_len, max_len+1):
    for xs in itertools.product(chars, repeat=n):
        bp_str = "".join(xs)
        serial = get_seral(bp_str + 'p')
        if serial == "76876-77776":
            print bp_str + 'p', serial




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

Easy Keygen (100)  (0) 2016.11.02
Position (160)  (0) 2016.11.01

+ Recent posts

티스토리 툴바