티스토리 뷰

immlib.py를 사용하기 위해 아래와 같이 import를 시킨 후에 Debugger() 클래스를 가져와야 한다.

1
from immlib import *
imm = Debugger()
cs

imm.log("msg")

- Log 윈도우에 메시지를 남김 (Alt + L)


imm.updateLog()

- Log 윈도우 업데이트


imm.setStatusBar("msg")

- 상태창에 메시지 설정


imm.clearStatusBar()

- 상태창에 설정된 메시지 지움


imm.stepIn() - F7


imm.stepOver() - F8


imm.Run() - F9


imm.runTillRet() - Ctrl + F9


imm.setBreakpoint(0x00000000)

- 브레이크 포인트 설정


imm.deleteBreakpoint(0x00000000)

- 브레이크 포인트 해제


imm.writeMemory(self, address, buf)

- 메모리 지정한 주소에 데이터 쓰기


imm.readMemory(self, address, size)

- 메모리로 부터 지정한 크기의 데이터 읽기


imm.isvmWare()

- 현재 디버거가 vmware에서 작동 여부 확인


imm.isAnalysed(regs['EIP'])

- 코드가 분석되어져 있는지 확인


imm.openTextFile(path="")

- MDI창으로 텍스트 파일을 읽어온다.


regs = imm.getRegs()

ex) imm.log("OEP : 0x%08X " % regs['EIP'])

- 현재 레지스터를 regs 변수에 모두 넣고, regs['EIP']를 통해 현재 EIP 레지스터의 값을 로그로 출력


imm.setReg("ESP" 0 FFFFFFFF)

- ESP 레지스터에 값을 적용


imm.getDebuggedName()

- 디버깅되고 있는 process module 이름 얻기


imm.getDebuggedPid()

- 디버깅되고 있는 프로세스 아이디 얻기


imm.isAdmin()

- 디버깅이 운영자 권한으로 실행되는지 여부


imm.ps()

- 현재 활성화 된 프로세스 리스트 얻기

1
2
3
4
5
def main():
    imm = immlib.Debugger()
    pslist = imm.ps()
    for process in pslist:
        imm.Log("Process: %s - PID: %d" % (process[1],process[0]))
cs


imm.getAllThreads()

- 모든 프로세스의 thread 리스트 얻기


imm.callStack()

- Back Trace를 리스트 형으로 얻어옴


imm.markBegin(), imm.markEnd()

- 시작 마크, 종료 마크 (시간 값)


imm.inputBox(“title”)

- 입력 창 생성


imm.comboBox("title", "[list1, list2]")

- 콤보 박스 생성


imm.Search(opcode)

ex) res = imm.Search("\xAA\xBB\xCC")

입력 : OP Code 형태로 넣어줌

출력 : 찾은 주소 (리스트 형)


imm.setComment(regs[''], “comment")

주석 달기


opcode = imm.disasm(imm.getRegs()['EIP'])

if opcode.isJmp() or opcode.isConditionalJmp():

size = opcode.getOpSize() # ex) opcode가 '6A 00'이라면 size는 '2'

- 현재 EIP의 opcode를 알아온 후에 opcode가 jmp인지 jz,jnz와 같은 상태 점프문인지 확인 후 맞다면 opcode의 사이즈를 가져옴


path = imm.getModule(imm.getDebuggedName()).getPath()

- imm.getDebuggedName method로 현재 Debugging하고 있는 프로그램의 이름을 얻어오고, imm.getModule.getPath method로 그 프로그램의 정보 중 절대경로를 가져옵니다.


ispresent = imm.getAddress( "kernel32.IsDebuggerPresent" )

imm.writeMemory( ispresent, imm.Assemble( "xor eax, eax\n ret" ) )

- 현재 IsDebuggerPresent API의 주소를 가져와서 0으로 만든 후 리턴


참고 

http://codeengn.com/file/conference/02/2008_2nd_CodeEngn_[seaofglass]_practical_usage_and_implementation_of_Immunity_debugger_plug-in.pdf

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함