공부/리버싱
-
x64 stack frame공부/리버싱 2014. 8. 12. 13:07
32비트 cpu일떄는 함수 호출규약이 여러개 있었지만 64비트로올라오면서 한개로 통합이 되었다 기존 fastcall(함수의 인자가 레지스터로 전달되는방식)호출규약을 이용한다. 64비트 레지스터로는 기존의 레지스터에서 확장된 레지스터를 사용하고(rax, rbx ,rsp등등..)8개의 레지스터가 추가되었다 (r8~r15) 스택프레임다음과 같은 C코드를 짠다고 했을 떄 123456789long myfunc(long a, long b, long c, long d, long e, long f, long g, long h){ long xx = a * b * c * d * e * f * g * h; long yy = a * b * c * d * e * f * g * h; long zz = utilfunc(xx, yy..
-
assem 분석 2공부/리버싱 2014. 5. 12. 02:18
http://www.hackerschool.org/HS_Boards/data/Lib_system/binary1.txt 혼자 공부하는거라 틀릴수도 있습니다 for문 ---------------------------------------------------- 0x8048460 : push %ebp // 베이스 포인트 0x8048461 : mov %esp,%ebp //현재 스택상태 복사 0x8048463 : sub $0x8,%esp // 스택 확장 0x8048466 : nop //아무것도 안함 0x8048467 : movl $0x1,0xfffffffc(%ebp) // ebp에 1 (여기서는 변수 i) 0x804846e : mov %esi,%esi 0x8048470 : cmpl $0x9,0xfffffffc(%..
-
리버싱문제 패스워드 숨기기공부/리버싱 2014. 5. 6. 00:29
그냥 패스워드를 main안에서 배열로 지정할경우 int main(){ char pw [] = "password";~~~~주저리}code segment 에 소스와 같이 올라가기 떄문에 핵스 덤프만 떠도 패스워드가 나와버림E.g. (dumpbin /RAWDATA:BYTES /SECTION:.data simple.exe >filename) 하지만 #pragma를 이용해 data segment에 있는 .bbs(비초기화 데이터 영역)에 올릴경우 핵스덤프를 해도 바로 나오지 않는다.E.g.int count=0; // From now on, all the initialized variables will be // located in the .kpnc section. #pragma data_seg (."kpnc") /..
-
assem 분석 1공부/리버싱 2014. 5. 5. 18:09
http://www.hackerschool.org/HS_Boards/data/Lib_system/binary1.txt요고 보면서 정리중이건 기본적인 어셈이 정리되어있는문서+http://download.intel.com/design/processor/manuals/253665.pdfIntel® 64 and IA-32 Architectures Software Developer’s Manual V1 3장부터 보면 됩니다 개인적으로 정리하는 글입니다. 틀린부분이 있을 수 있습니다 if문 0x8048460 : push %ebp // 스택 밑바닥 0x8048461 : mov %esp,%ebp //현재 스택위치 표시 0x8048463 : sub $0x8,%esp //스택 8byte확장 0x8048466 : cmpl ..
-
펌 리버싱을 위한 어셈정리공부/리버싱 2013. 8. 13. 21:48
1.어셈블리어 Push : sp 레지스터를 조작하는 명령어중의 하나이다. 스택에 데이터를 저장하는데 쓰인다. ex:) Push eax : 스택에 Eax의 값을 스택에 저장한다. ex:) Push 20 :즉석값인 20을 스택에 저장한다. ex:) Push 401F47 : 메모리 오프셋 401F47의 값을 스택에 저장한다. Pop : 이또한 sp 레지스터를 조작하는 명령어중 하나이다. 스택에서 데이터를 꺼내는데 쓰인다. ex:) Pop eax :스택에 가장 상위에 있는 값을 꺼내애서 eax에 저장한다. 주의점 : Push 의 역순으로 값은 스택에서 Pop 된다. Mov : 메모리나 레지스터의 값을 옮길 때[로 만들 때]쓰인다. ex:) Mov eax,ebx :ebx 레지스터의 값을 eax로 옮긴다[로 만든다..
-
crackme3-abexcm3공부/리버싱 2013. 8. 6. 08:41
Crack Me 3풀이 -by jen6스타트는 역시 메시지 창이죠!시작하자 마자 key file을 찾습니다.그냥 ok를 눌렀더니이렇게 되고 꺼지더라구요올리디버거로 열어봅니다 쭉나열되어 있는데 주요 코드만 확대해서 찍어봤습니다. 이프로그램은 먼저 파일의 유무를 구별한후 파일 크기로 구분하는것 같습니다. 그래서 브레이크 포인트를 비교하는 je와 jnz 명령어의 전인 CMP 명령어에다 걸어놓았습니다. 먼저 이렇게 뜨는 이유를 확인 하기위해 이부분의 코드를 살펴보니 00401034 CMP EAX,-100401037 JE SHORT Crackme_ 00401075je(조건분기문)이 나오는걸 보니 중요한 문장 같은데....CMP명령어가 뭔지 몰라서 한참동안 고민했습니다.구글링결과 EAX값과 비교를 하는 것 이었습니..