r0 - first argument

r1 - second argument

r2 - third argument

r3 - fourth argument

[sp, #0] - fifth argument

[sp, #4] - 6-th argument

[sp, #8] - 7-th argument

[sp, #12] - 8-th argument


func(1,2,3,4,5,6,7,8)을 콜했을때의 objdump 내용:


000083e0 <main>:


    83e0:       b580            push    {r7, lr}

    83e2:       b084            sub     sp, #16

    83e4:       af04            add     r7, sp, #16

    83e6:       2305            movs    r3, #5

    83e8:       9300            str     r3, [sp, #0]

    83ea:       2306            movs    r3, #6

    83ec:       9301            str     r3, [sp, #4]

    83ee:       2307            movs    r3, #7

    83f0:       9302            str     r3, [sp, #8]

    83f2:       2308            movs    r3, #8

    83f4:       9303            str     r3, [sp, #12]

    83f6:       2001            movs    r0, #1

    83f8:       2102            movs    r1, #2

    83fa:       2203            movs    r2, #3

    83fc:       2304            movs    r3, #4

    83fe:       f7ff ffe1       bl      83c4 <func>

    8402:       4618            mov     r0, r3

    8404:       46bd            mov     sp, r7

    8406:       bd80            pop     {r7, pc}




posted by tunz

ARM 바이너리를 디버깅 하다보면, ARM(Code 32)와 Thumb(Code 16)모드가 동시에 존재한다.


Bx 명령어가 실행되면, 옵코드를 읽는 모드가 변경된다( ARM -> Thumb or Thumb -> ARM)


가끔, IDA가 이걸 캐치하지 못하고, ARM을 Thumb로, 혹은 Thumb를 ARM으로 읽으려 하는 상황이 생기는데,


그럴때는 ALT - G 를 누른후, 

T의 값을 1로 해주면, 해당코드는 Thumb로 읽게 되고,

T의 값을 0으로 해주면, ARM으로 읽게된다.

posted by tunz

gcc 기준, ELF 32bit에서는 (%esp),0x4(%esp), ... 에 넣어서 넘기는 방식인데,


ELF64에서는 레지스터에 넣어서 넘긴다.

아직도 헷갈린다.


rdi : 첫번째인자

rsi: 두번째인자

rdx: 세번째인자

rcx: 네번째인자

r8: 다섯번째인자

r9: 여섯번째인자

(%rsp): 일곱번째인자

0x8(%rsp): 여덟번째인자

.

.

.



posted by tunz
  • hea 2013.10.25 22:36

    안녕하세요 tunz님 요근래 linux 상에서의 heap exploitation쪽좀 공부해보려고 하는데
    윈도우쪽은 힙스프레이 힙풍수 uaf와 같은 문서들이 많던데 리눅스쪽은 별루 없더라구요..
    리눅스상에서의 힙공격 기법이 윈도우랑 비슷하나요? 그리고 리눅스 상에서의 heap exploitation 문서나 좋은 글 추천좀 해주시면 감사하겠습니다.

    • tunz 2013.10.29 15:35 신고

      이걸 저도 찾아보려고 했는데 잘 없더라구요..
      요즘에서야 안드로이드가 뜨면서 조금씩 나오고 있는것 같긴한데, 제가 못찾는건지 없네요.
      우선 힙스프레이는 리눅스도 똑같이 쓰이더군요. 물론 특정조건이 맞아야겟지만.
      그 외에 CTF용은 크기가 작아서 직접 해보면서 조정하는 편이구요. 리눅스 실전같은 경우는 잘 모르겠네요

카톡이 더미다로 패킹이 되어있어서, 올리디버거를 감지하면 카톡이 꺼진다.


그럴때 사용하는 플러그인



StrongOD v0.4.8.892.zip


posted by tunz