본문 바로가기

Programming/Hacking & Security48

[Reversing] switch, if, while, do~while 동작원리 by 용호 2010년 5월 24일 월요일 지역변수를 두개를 할당한 이유는 switch문에서 비교를 위한 변수가 하나 필요하기 때문이다. 아래의 부분에서 비교를 위한 공간을 사용한다. If문은 cmp와 jmp를 반대로 수행한다. 아래의 경우 cmp로 a와 0을 비교하는데 조건이 0보다 크거나 같은 경우이다. 이렇게 되면 if문은 그의 반대인 if(a 2010. 5. 25.
[Reversing] C언어로 작성된 코드 분석 By 용호 2010년 5월 20일 목요일 C언어로 작성된 코드(.c파일)를 컴파일하기 위해 비쥬얼 스튜디오의 CLI환경을 이용한다. CLI 환경에서 "Cl 파일명.c /link /debug /opt:icf" 명령을 수행하면 컴파일 된다. 코드를 분석하기 위해 Olldbg 툴보다는 IDA가 편하기 때문에 이제부터는 IDA 프로그램을 사용한다. ▶ 프로그램 Stdcall은 callee 방식이므로 retn 8 을 해주는데 여기서 8은 스택에 공간을 할당한 크기이고, Retn 8을 해주면 자동으로 ebp+8이 된다. Cdecl 을 할때는 eax, ecx에 값을 넣어 push를 해주고 stdcall을 할때는 edx, eax에 값을 넣어 Push를 해주는데 이것은 크게 상관이 없다. 범용 레지스터이므로 어디에 값을 넣어도 상.. 2010. 5. 21.
[Reversing] Call, Jmp By 용호 2010년 5월 18일 화요일 Call과 Jmp는 프로그램의 흐름을 변경할 수 있는 명령어, 즉 , EIP값을 변경하는 명령어이다. 두 명령어의 차이점은 RET의 유무이며 Call에는 RET가 있고 Jmp에는 없다. Jmp는 단독으로 수행되는 경우는 드물고 cmp(sub연산)와 test(and연산) 명령 이후에 사용된다. #차이점 1. Call은 EIP 값을 변경하기 전에 스택에 백업을 해 두는 반면 JMP는 백업하지 않고 바로 변경 2. Call은 조건 분기 가능한 명령어 형태가 존재하지 않으나 JMP는 조건 분기 가능한 명령어 형태가 존재한다. ex) JZ(=JE), JNZ, JA, JB, JG, JL etc ... 아래와 같은 코드에서 call이 수행되면 해당 함수로 이동한다. sumproc 부분을.. 2010. 5. 21.
[Reversing] Scas, Stos By 용호 2010년 5월 17일 월요일 Scas 를 하면 바이트 단위로 읽어와 al과 비교한다. Repne이므로 다르면 ecx만큼 계속 반복 한다. 워드 단위로 읽어 올 경우 워드 단위로 비교하는데 little endian이므로 비교한다. [문제] text BYTE "reversing", 0h 1. e -> a로 변환하는 프로그램 2. Scas, stos를 사용하라 3. Label, 조건분기 cmp, jmp 등을 이용하라 Scas, stos를 할 때 edi 값이 변한다는 것이 포인트 Jmp를 사용하기 위해서는 cmp 또는 test가 있어야 한다. ▶ 코드파일 2010. 5. 21.