1. import os
  2. import sys
  3.  
  4. if os.getuid() != 0:
  5.         print "[-] You are not root"
  6.         sys.exit(-1)
  7.  
  8. if len(sys.argv) < 2:
  9.         print "python attach.py [binary name] [script]"
  10.  
  11. output = os.popen('ps aux | grep '+sys.argv[1]).read()
  12.  
  13. outputs = output.split('\n')
  14. lastline = ""
  15. i=len(outputs)-2
  16. while i>= 0:
  17.         try:
  18.                 pid = outputs[i].split(None)[1]
  19.         except:
  20.                 i -= 1
  21.                 continue
  22.         if int(pid) < os.getpid():
  23.                 lastline = outputs[i]
  24.                 break
  25.         i -= 1
  26.  
  27. pid = lastline.split(None)[1]
  28.  
  29. print "[*] Attach to "' '.join(lastline.split(None)[-2:]) +" ("+pid+")"
  30.  
  31. if len(sys.argv) == 3:
  32.         print "gdb -q --pid="+pid+" -x "+sys.argv[2]
  33.         os.system("gdb -q --pid="+pid+" -x "+sys.argv[2])
  34. else:
  35.         print "gdb -q --pid="+pid
  36.         os.system("gdb -q --pid="+pid)


http://pastebin.com/GbBk2ADG


fork 프로그램 디버깅할때 ps로 pid 찾아서 attach 하는게 귀찮아서 만듬.

python attach.py 프로그램명

으로 실행하면, 프로그램명중 pid가 가장 큰걸 자동으로 attach

(프로그램명은 꼭 풀로 안써도 됌, grep으로 잡기때문에)

'Computer Security > Other' 카테고리의 다른 글

afl-fuzz for javascript  (1) 2015.02.13
gdb automatic attach python script  (0) 2013.11.27
posted by tunz

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