Files
Kiran Bandla d4d64da866 Added 1.73
2013-03-25 21:58:56 -04:00

130 lines
4.6 KiB
Python
Executable File

#!/usr/bin/env python
"""
(c) Immunity, Inc. 2004-2007
U{Immunity Inc.<http://www.immunityinc.com>}
"""
import immlib
import getopt
__VERSION__ = '1.1'
DESC= "Static Analysis: Mark the tiny ones"
def usage(imm):
""" All the options"""
imm.Log("!mark search and mark given function")
imm.Log("!mark [-f NAME ] [-c COMMENT] [-m MODULE]")
imm.Log("Example: mark with DANGER_MOUSE string all the strcpy ones")
imm.Log("!mark -f strcpy -c DANGER_MOUSE -m ALL")
def main(args):
imm = immlib.Debugger()
if not args:
imm.Log("### Immunity's Mark the tiny ones script###",focus=1)
imm.Log("Command ok, but no args, using defaults")
try:
opts, argo = getopt.getopt(args, "f:c:m:")
except getopt.GetoptError: #get args, if error, show usage
usage(imm)
return "Bad argument %s" % args[0]
#tiny ones default list
tinyones=[]
tinyones.append("strcpy")
tinyones.append("memcpy")
tinyones.append("memmov")
module=None
function=None
function_address=0
comment="default comment"
#parsing args
for o,a in opts:
if o == "-f":
try:
function = a
function_address=imm.getAddress(function)
imm.Log("%s address: 0x%8x" % (function,function_address),focus=1)
except ValueError, msg:
imm.Log("No function given, using the tiny ones")
if o == "-c":
comment = a
imm.Log("Comment: %s" %comment)
if o == "-m":
if a and a != "ALL":
try:
module = imm.getModule(a)
if not module:
return "Invalid module: %s" % a
else:
imm.Log("module: %s" %module.getName())
base = module.getBase()
except ValueError, msg:
return "Invalid module: %s" % a
else:
regs=imm.getRegs()
module = imm.findModule(regs['EIP']) # if no module given, use the one we are standing on
if not module:
return "Module?"
else:
imm.Log("module: %s" %module[0])
base=module[1]
#all data, find and mark
if module == "ALL":
mods = imm.getAllModules()
for mod in mods:
refaddr=imm.getInterCalls(mod.getBase())
for a in refaddr.keys():
op = imm.Disasm(a)
#imm.Log("op: %s"% op.comment)
decoded=imm.decodeAddress(refaddr[a][0][2]) # decode destination
if function_address != 0:
if function in decoded: #and ask if function name is in destination
imm.Log("From: 0x%08x - to 0x%08x" %(a,refaddr[a][0][0]))
imm.Log("Decoded destination: %s" % decoded)
imm.setComment(a,comment) #so, set your comment
else:
for function in tinyones:
if function in decoded: #and ask if function name is in destination
imm.Log("From: 0x%08x - to 0x%08x" %(a,refaddr[a][0][0]))
imm.Log("Decoded destination: %s" % decoded)
imm.setComment(a,comment) #so, set your comment
else:
regs=imm.getRegs()
refaddr=imm.getInterCalls(regs['EIP'])
for a in refaddr.keys():
op = imm.Disasm(a)
#imm.Log("op: %s"% op.comment)
decoded=imm.decodeAddress(refaddr[a][0][2]) # decode destination
if function_address != 0:
if function in decoded: #and ask if function name is in destination
imm.Log("From: 0x%08x - to 0x%08x" %(a,refaddr[a][0][0]))
imm.Log("Decoded destination: %s" % decoded)
imm.setComment(a,comment) #so, set your comment
else:
for function in tinyones:
if function in decoded: #and ask if function name is in destination
imm.Log("From: 0x%08x - to 0x%08x" %(a,refaddr[a][0][0]))
imm.Log("Decoded destination: %s" % decoded)
imm.setComment(a,comment) #so, set your comment
return "mark finished executing"