실습> python 디버깅
파이썬 코드 : VScode 를 사용하지 않고 디버깅 하는 방법
pdb 를 이용한다.
사용법 : python -m pdb 소스파일
help : 도움말
break (b) : BP 설정
run (r) : 프로그램 실행 (VSCode F5)
next (n) : 다음 실행문으로 이동 (VScode F10)
step (s) : Step Into 로 함수, 클래스 안으로 들어가면서 실행문으로 이동 (VScode F11)
list (l, ll) : 소스코드 출력
continu (c) : 다음 BP까지 계속 실행 (VScode Shift + F11)
print (p) : 변수의 값을 출력
quit (q) : pdb 프로그램 종료
Attacker# vi pdbTest1.py
-- pdbTest1.py --
#!/usr/bin/python3
i = 1
j = 2
hap = i + j
print(hap)
print('프로그램 종료')
-- pdbTest1.py --
파이썬 코드를 실행권한을 설정하지 않고 코드를 실행하는 방법
Attacker# python3 pdbTest1.py
3
프로그램 종료
파이썬 코드를 실행권한을 설정하고 코드를 실행하는 방법
Attacker# chmod 755 pdbTest1.py
Attacker# ./pdbTest1.py
3
프로그램 종료
Attacker ~# python3 -m pdb pdbTest1.py
> /root/pdbTest1.py(3)<module>()
-> i = 1
(Pdb)
(Pdb) help
Documented commands (type help <topic>):
========================================
EOF c d h list q rv undisplay
a cl debug help ll quit s unt
alias clear disable ignore longlist r source until
args commands display interact n restart step up
b condition down j next return tbreak w
break cont enable jump p retval u whatis
bt continue exit l pp run unalias where
Miscellaneous help topics:
==========================
exec pdb
각 명령어의 도움말 확인하기
(Pdb) help next
n(ext)
Continue execution until the next line in the current function
is reached or it returns.
(Pdb) help p
p expression
Print the value of the expression.
소스코드의 리스트를 확인한다.
list, l, ll
(Pdb) list
1 #!/usr/bin/python3
2
3 -> i = 1
4 j = 2
5 hap = i + j
6 print(hap)
7 print('프로그램 종료')
8
[EOF]
(Pdb) ll
1 #!/usr/bin/python3
2
3 -> i = 1
4 j = 2
5 hap = i + j
6 print(hap)
7 print('프로그램 종료')
8
(Pdb) n
> /root/pdbTest1.py(4)<module>()
-> j = 2
(Pdb) ll
1 #!/usr/bin/python3
2
3 i = 1
4 -> j = 2
5 hap = i + j
6 print(hap)
7 print('프로그램 종료')
8
변수 i에 저장된 값을 확인한다.
print, p 명령어를 사용할 수 있다.
(Pdb) print(i)
1
(Pdb) p i
1
n 을 이용해서 4번 라인의 코드를 실행한다.
(Pdb) n
> /root/pdbTest1.py(5)<module>()
-> hap = i + j
ll을 이용해서 현재 위치를 확인한다.
(Pdb) ll
1 #!/usr/bin/python3
2
3 i = 1
4 j = 2
5 -> hap = i + j
6 print(hap)
7 print('프로그램 종료')
8
(Pdb)
(Pdb) p j
2
n 을 이용해서 5번 라인의 코드를 실행한다.
(Pdb) n
> /root/pdbTest1.py(6)<module>()
-> print(hap)
ll을 이용해서 현재 위치를 확인한다.
(Pdb) ll
1 #!/usr/bin/python3
2
3 i = 1
4 j = 2
5 hap = i + j
6 -> print(hap)
7 print('프로그램 종료')
8
(Pdb) p hap
3
(Pdb) c
3
프로그램 종료
The program finished and will be restarted
> /root/pdbTest1.py(3)<module>()
-> i = 1
pdb를 종료한다.
(Pdb) q
Attacker ~# python3 -m pdb pdbTest1.py
> /root/pdbTest1.py(3)<module>()
-> i = 1
(Pdb) ll
1 #!/usr/bin/python3
2
3 -> i = 1
4 j = 2
5 hap = i + j
6 print(hap)
7 print('프로그램 종료')
8
6번 라인에 BP를 설정한다.
(Pdb) b 6
Breakpoint 1 at /root/pdbTest1.py:6
(Pdb) ll
1 #!/usr/bin/python3
2
3 -> i = 1
4 j = 2
5 hap = i + j
6 B print(hap)
7 print('프로그램 종료')
8
r 을 이용해서 프로그램을 실행한다.
BP 설정되어 있는 곳까지 실행하고 BP 없으면 프로그램을 끝까지 실행한다.
(Pdb) r
> /root/pdbTest1.py(6)<module>()
-> print(hap)
(Pdb) ll
1 #!/usr/bin/python3
2
3 i = 1
4 j = 2
5 hap = i + j
6 B-> print(hap)
7 print('프로그램 종료')
8
변수 i, j, hap에 저장된 값을 확인한다.
(Pdb) p i, j, hap
(1, 2, 3)
n 을 이용해서 6번 라인의 코드를 실행한다.
(Pdb) n
3
> /root/pdbTest1.py(7)<module>()
-> print('프로그램 종료')
(Pdb) ll
1 #!/usr/bin/python3
2
3 i = 1
4 j = 2
5 hap = i + j
6 B print(hap)
7 -> print('프로그램 종료')
8
n 을 이용해서 7번 라인의 코드를 실행한다.
(Pdb) n
프로그램 종료
--Return--
> /root/pdbTest1.py(7)<module>()->None
-> print('프로그램 종료')
q를 이용해서 pdb를 종료한다.
(Pdb) q
'Linux > 모의해킹' 카테고리의 다른 글
| DNS Spoofing 공격 (0) | 2022.01.08 |
|---|---|
| ARP Redirect 공격 (0) | 2022.01.08 |
| arpspoof2.py 분석하기 (0) | 2022.01.08 |
| arpspoof 공격 스크립트 작성하기 (0) | 2022.01.06 |
| ARP spoofing (스푸핑) (0) | 2022.01.06 |