728x90

glLightfv(GL_LIGHT0, GL_POSITION, fLightPosMirror);



파라미터1 : 최소 GL_LIGHT0 ~ GL_LIGHT8 까지 8개의 광원을 개별적으로 정의&제어 할 수                   있음


파라미터2 : 특성 파라미터 아래 표 참고



파라미터3 : 광원의 색 (RGBA)

                 ex) GLfloat myLightColor[] = { 1.0, 0.0, 0.0, 1.0 };

728x90

'프로그래밍 > opengl' 카테고리의 다른 글

Ambient and Diffuse Lighting  (0) 2016.02.06
그래픽 파이프라인 모식도  (0) 2016.01.31
glOrtho 함수  (0) 2015.02.17
typedef관련  (0) 2015.02.13
728x90

glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top,                                                              GLdouble nearVal, GLdouble farVal);


종횡비를 맞추어주는 함수.





가로 500 세로 500 이던 화면에서 가로를 늘려서


가로 1000 세로 500 인 화면일때


만약 정사각형 하나가 그려졌다면 정사각형은 가로로 2배 늘어난 정사각형이 되었을 것이다.


-))) vertex는 -1.0~1.0의 좌표를 사용하는데 변형 전 가로 0.1이 25이던것이

                                                         변형 후 가로 0.1이 50이 되기때문이다.


따라서 glOrtho 함수로 종횡비를 맞추어 주어야 한다.


glOrtho(-1,1,-1,1,1,-1) 이었다면

가로2배가 늘어났으므로

glOrtho(-2,2,-1,1,1,-1) 로 하면 된다.

728x90

'프로그래밍 > opengl' 카테고리의 다른 글

Ambient and Diffuse Lighting  (0) 2016.02.06
그래픽 파이프라인 모식도  (0) 2016.01.31
glLight* 함수  (0) 2015.02.20
typedef관련  (0) 2015.02.13
728x90




typedef GLfloat GLTVector4[4];



위 같이 쓰게되면


GLTVector4 a[4];


GLfloat v = a;


이렇게 쓰는게 아니라







GLfloat a[4];


GLTVector4 v = a;


이렇게 써야한다.





typedef 특성상 형식이 먼저 오고 그 다음 변환할 형식이 오는데..


ex> typedef unsigned int _Uint


형식의 배열을 해야 할 경우


typedef unsigned int[4] _U4int 로 해야겠지만


이렇게 안되게 되어있어서 어쩔 수 없이 


typedef unsigned int _U4int[4]




이런식으로 써야 한다.

728x90

'프로그래밍 > opengl' 카테고리의 다른 글

Ambient and Diffuse Lighting  (0) 2016.02.06
그래픽 파이프라인 모식도  (0) 2016.01.31
glLight* 함수  (0) 2015.02.20
glOrtho 함수  (0) 2015.02.17
728x90


[국내]


webhacking.kr 


 reversing.kr

리버싱


suninatas.com 

웹, 시스템, 포렌식등의 워게임 사이트


pwnable.kr 

시스템, 리버싱


[국외]


hackthissite.org

진입장벽이 낮다고 한다.


overthewire.org

난이도 있는 시스템 해킹 문제


[알고리즘]


projecteuler.net


poj.org


728x90

'프로그래밍' 카테고리의 다른 글

Mark and Sweep  (3) 2020.11.16
[Linux] 파일 디스크립터  (0) 2015.04.28
728x90

올리로 열어 봅시다.




문자열이나 찾아 봅시다.




축하한다니.. 굉장히 수상하니 가 봅시다.




역시나 성공의 메시지박스를 띄우는 문자열이었습니다. 나란히 실패 메시지도 있습니다.

그리고 아마도 빨간네모로 표시한 부분이 마지막 분기점인 것 같습니다.

혹시 모르니 breakpoint를 걸어 둡시다.


위로 조금 올라가면




getDlgItemTextA함수를 호출하는 부분이 있습니다.


우리가 입력한 값을 읽기 위한 함수 일 것입니다. 역시 breakpoint 를 걸어두고 이제 실행하여


갑을 입력합시다.




저는 CrackMe라는 문자열을 입력하였습니다. 그리고 확인!



break를 걸어두었던 GetDlgItemText로 왔습니다.


근데 현재 비교문에서 헥사값61과 다르면  진행해보시면 알겠지만 종료가 됩니다.


밑에 확인해 보니



'r'입니다. 우리가 입력한 CrackMe의 두번째 바이트인 것을 알 수 있습니다. 따라서


일단 두번쨰 바이트는 헥사값61 즉 'a'라는 것을 알았습니다. 바꿔서 진행합시다.




이번에 "CarckMe"로 진해해 보면 앞선 비교문에서는 정상 진행하는 것을 볼 수 있습니다.




ECX레지스터의 위치에 입력한 값이 3번째 바이트 부터 있는 것이 보이며


밑에 00401135(실패 메시지)로 가는 분기가 있는 것을 보니


00401150 안에서 뭔가 있을 것 같습니다. follow 합시다.




쭉 보니 아까 위에서 push한 "5y"와 3,4번째 바이트를 비교하고 있습니다.


우리는 EAX를 0으로 만들어야 하므로(401150호출후 분기 TEST EAX,EAX)


입력을 다시 해 보겠습니다.






3, 4번째를 "5y"로 바꾸어 입력해서 넘어왔지만 새로운 난관이 있습니다.


이번에는 5번째바이트 부터 저기 "R3versing"이랑 비교를 합니다. 이 하 과정 생략하고


다시 입력하면




마지막 난관 처음에 break 걸어두었던 마지막 분기점으로 왔습니다. 이번에는

첫 바이트를 비교하고 있습니다. 이제 첫 바이트만 변경하면 올바른 값이 출력 될 것입니다.




요렇게!!  (답은 가려주는 센스)

728x90

'ctf + wargame > reversing.kr' 카테고리의 다른 글

Easy Keygen  (0) 2015.11.27
728x90

출처 : http://bbolmin.tistory.com/82



NEG : 2의 보수 (부호 반전)

NOT : 1의 보수 (비트 반전)

 

MUL : AX와 오퍼랜드 곱셈 -> AX또는 DX:AX에 저장

IMUL <- 부호 o

DIV : AX를 오퍼랜드로 나눔 -> 몫:AL, 나머지:AH

 DX:AX를      ''            -> 몫:AX, 나머지:DX

 

CBW : AL -> AX 확장         ex) eax에 0x12345678가 있으면 -> 0x12340078으로 됨

CWD : AX -> DX:AX 확장

 

 

SHL/SAL : 왼쪽 shift

SHR/SAR : 오른쪽 shift (SAR은 산술 shift로 최상위 비트를 유지한다고 한다.)

ROL/RCL : 회전 왼쪽 shift

ROR/RCR : 회전 오른쪽 shift

 

 

PUSHAD : 레지스터 내용을 스택에 push (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI 순서)

PUSHFD : 플래그 레지스터 내용을 스택에 push

 

REP : 뒤의 스트링 명령을 (E)CX가 0이 될때까지 반복. (E)CX는 1씩 감소.

ex) rep movs byte ptr [edi], byte ptr [esi] <- 문자열 esi값을 edi에 복사

 

SCAS :  크기에 맞게 ax와 비교.

repne scas byte ptr [edi] <- al과 비교하여 같지 않으면 빠져나감

STOS : 크기에 맞게 ax를 edi가 가리키는 주소에 저장
ex) rep stos byte ptr [EDI]

 

LODS : SI내용을 AL에 로드.

728x90
728x90

Challenges : Basic 12


Author : Basse 2002


Korean : 
Key를 구한 후 입력하게 되면 성공메시지를 볼 수 있다 
이때 성공메시지 대신 Key 값이 MessageBox에 출력 되도록 하려면 파일을 HexEdit로 오픈 한 다음 
0x???? ~ 0x???? 영역에 Key 값을 overwrite 하면 된다. 

문제 : Key값과 + 주소영역을 찾으시오 
Ex) 7777777???????? 


English : 
You will see a success message after finding the key. 
If you would want the Key itself to replace the success message in the MessageBox, 
open up a Hex Editor and overwrite the key value in the offset range 0x???? ~ 0x????. 

Q : find the key value and the offset range and write the solution in this format : key???????? 
(first ???? for the start and the next 4 ?s for the end). 

-----------------------------------------------------------------------------------------------


심플 합니다. 심플한 키젠입니다. PEiD로 확인해 보시면 알겠지만

패킹도 안되어 있습니다. 사정없이 디버거로 벗겨(?) 봅시다.




이것 저것 breakpoint를 걸어보며 살펴보았지만 제가 적은 문자열은 어디에서도 찾아볼 

수 없었습니다. 그래서 함수기능을 찾아보던중 위 화면에 "GetDlgItemInt"라는 함수가

텍스트를 정수형으로 변환하는 함수라는 것을 알게되었습니다. 그래서 저 함수에 break를

걸고 실행해 보았습니다.


입력후 Check 버튼을 누르면


함수 호출후...


반환값이 저장되는 EAX의 레지스터 값이 200

즉 10진수로 512가 저장되는 것을 확인했습니다.


그리고 밑에보니 올바른 키값일 경우의 메시지박스로 가는 분기점을 찾았고

저 분기점에서의 EAX레지스터 값을 확인해보니


그대로 였습니다. 결국 키값은 분기점에서 EAX와 비교하는 저 값인 것을 알게되었습니다.

저 값을 10진수로 변환하면 되겠죠?


그리고 문제대로 성공메시지박스의 내용을 수정합시다. (원래는 키값으로 수정)


끝!

728x90
728x90

Challenges : Basic 10


Author : ArturDents


Korean 
OEP를 구한 후 "등록성공"으로 가는 분기점의 OPCODE를 구하시오. 정답인증은 OEP + OPCODE 
EX) 00400000EB03 

English 
After finding the OEP, find the OPCODE of the branch instruction going to the "goodboy routine" 
The solution should be in this format : OEP + Serial 
EX) 00400000EB03 

-----------------------------------------------------------------------------------------------

실행해 보니 PUSHAD로 시작합니다. PEiD로 확인을 해보면



역시나 패킹이 되어있지만 이번에는 UPX가 아닌 ASPack이란 방식으로 되어있네요.

패킹 방법을 찾아보니 UPX와 크게 다르지 않습니다.



그림과 같이 1줄 진행하여 레지스터들을 스택에 넣은후

ESP에 커서를 놓고 오른쪽버튼 - Follow in Dump 를 눌러 덤프를 뜹니다.



그리고 덤프에서(왼쪽 아래창) break point 를 걸어줍니다.

이렇게 하는 이유는 PUSHAD를 했으면 언젠가 POPAD를 할 텐데

그 지점을 찾기가 힘드니까 이런식으로 break point를 거는 것 입니다.


그리고 진행을 하면 


원하는 곳으로 오게 되었습니다. 진행하여 OEP로 갑시다.



뭔가 휑 하고 이상하지만 참고 덤프를 뜨고 LordPE로 rebuild를 해줍시다.



Unpacking이 잘 되었습니다. 옵코드를 보니 덤프뜨기전 OEP의 값들과 같습니다.


all referenced text strings을 보니 Registered well done! 이라는 부분이 있습니다.

더블클릭 해서 위에 있는 분기점의 옵코드를 확인합시다. 그럼 끝!

728x90
728x90


Challenges : Basic 08


Author : Rekenmachine


Korean 
OEP를 구하시오 
Ex) 00400000 

English 
Find the OEP 
Ex) 00400000 


-----------------------------------------------------------------------------------------------

PEiD로 확인해 보면 친절히 UPX라고 알려줍니다. UPX는 이미 해봤으므로


자세한 내용은 생략합니다.

728x90
728x90


Challenges : Basic 07


Author : abex

Korean 
컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 "어떤것"으로 변경되는가 

English 

Assuming the drive name of C is CodeEngn, what does CodeEngn transform into in the process of the serial construction 

------------------------------------------------------------------------------

실행해 보니 역시나 올바른 키값을 요구합니다.

주저없이 디버거로 열어 봅시다.


코드는 생각보다 짧습니다.

문제를 보면 c드라이브의 이름을 구해서 변경하는 부분이 있을 것 같습니다.

먼저 구하는 곳을 찾아보면


이부분의 이 함수가 왠지 수상합니다. 함수를 검색해보니

드라이브 정보들의 주소를 함수의 인자들에게 리턴해 줍니다. 그중 드라이브 이름은



여기에 리턴 됩니다. 0040225C


그러나 애석하게도 드라이브에 이름따윈 지정하지 않았습니다.

그 다음 lstrcatA 함수로 드라이브이름이 저장된 문자열 다음에 요상한 시리얼 문자열을 붙입니다.


그다음 DL에 2를 넣어 루프로 40225C의 문자열의 앞 4바이트를 2씩 더합니다.

(+1씩 2번)




00402000 영역에 L2C....를 붙이고 0040225C를 붙여 제가 입력한 123456값과 비교하여


맞으면 맞았다고 틀리면 틀렸다고 메시지박스를 띄웁니다.


물론 답은 CodeEngn문자열이 변한 값이니 쉽게 유추할 수 있습니다.

728x90

+ Recent posts