From 838721b544cdb219163fb7820c5f5033d75baab7 Mon Sep 17 00:00:00 2001 From: Patrick Neumann Date: Fri, 27 Nov 2020 23:50:54 +0100 Subject: [PATCH] manual installed 3rd party tools --- usr/local/bin/framework/__init__.py | 0 .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 153 bytes .../__pycache__/addrspace.cpython-38.pyc | Bin 0 -> 3591 bytes .../__pycache__/newobj.cpython-38.pyc | Bin 0 -> 10283 bytes .../__pycache__/object.cpython-38.pyc | Bin 0 -> 3277 bytes .../__pycache__/types.cpython-38.pyc | Bin 0 -> 1270 bytes usr/local/bin/framework/addrspace.py | 147 +++++ usr/local/bin/framework/newobj.py | 320 +++++++++ usr/local/bin/framework/object.py | 171 +++++ usr/local/bin/framework/types.py | 65 ++ usr/local/bin/framework/win32/__init__.py | 0 .../win32/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 159 bytes .../win32/__pycache__/hashdump.cpython-38.pyc | Bin 0 -> 8848 bytes .../win32/__pycache__/rawreg.cpython-38.pyc | Bin 0 -> 1861 bytes usr/local/bin/framework/win32/domcachedump.py | 135 ++++ usr/local/bin/framework/win32/hashdump.py | 311 +++++++++ usr/local/bin/framework/win32/lsasecrets.py | 179 ++++++ usr/local/bin/framework/win32/rawreg.py | 73 +++ usr/local/bin/kcpass.py | 51 ++ usr/local/bin/print_plist_entry.py | 115 ++++ usr/local/bin/pwdump.py | 31 + usr/local/bin/sigfind | Bin 0 -> 291848 bytes usr/local/bin/sigfind.cpp | 607 ++++++++++++++++++ 23 files changed, 2205 insertions(+) create mode 100644 usr/local/bin/framework/__init__.py create mode 100644 usr/local/bin/framework/__pycache__/__init__.cpython-38.pyc create mode 100644 usr/local/bin/framework/__pycache__/addrspace.cpython-38.pyc create mode 100644 usr/local/bin/framework/__pycache__/newobj.cpython-38.pyc create mode 100644 usr/local/bin/framework/__pycache__/object.cpython-38.pyc create mode 100644 usr/local/bin/framework/__pycache__/types.cpython-38.pyc create mode 100755 usr/local/bin/framework/addrspace.py create mode 100644 usr/local/bin/framework/newobj.py create mode 100644 usr/local/bin/framework/object.py create mode 100644 usr/local/bin/framework/types.py create mode 100644 usr/local/bin/framework/win32/__init__.py create mode 100644 usr/local/bin/framework/win32/__pycache__/__init__.cpython-38.pyc create mode 100644 usr/local/bin/framework/win32/__pycache__/hashdump.cpython-38.pyc create mode 100644 usr/local/bin/framework/win32/__pycache__/rawreg.cpython-38.pyc create mode 100644 usr/local/bin/framework/win32/domcachedump.py create mode 100644 usr/local/bin/framework/win32/hashdump.py create mode 100644 usr/local/bin/framework/win32/lsasecrets.py create mode 100644 usr/local/bin/framework/win32/rawreg.py create mode 100755 usr/local/bin/kcpass.py create mode 100755 usr/local/bin/print_plist_entry.py create mode 100755 usr/local/bin/pwdump.py create mode 100755 usr/local/bin/sigfind create mode 100644 usr/local/bin/sigfind.cpp diff --git a/usr/local/bin/framework/__init__.py b/usr/local/bin/framework/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/usr/local/bin/framework/__pycache__/__init__.cpython-38.pyc b/usr/local/bin/framework/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e5c8f3f7fef5e9dca21fd529736b5d42f81100e GIT binary patch literal 153 zcmWIL<>g`kg68+fVnFm`5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HWenx(7s(wys za%Ng;k-kfQd0tL_VoI@oa#3nZN@;F^xo&P^aS2c=ttc@!wLHHlTR%QNGcU6wK3=b& V@)n0pZhlH>PO2Tq+|NMF000UVC7A#K literal 0 HcmV?d00001 diff --git a/usr/local/bin/framework/__pycache__/addrspace.cpython-38.pyc b/usr/local/bin/framework/__pycache__/addrspace.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a18cd4237d656a5a20e59fbfb9851d16653a9656 GIT binary patch literal 3591 zcmaJ@Pjef^5}(-}NvoA?oZ!UaU!EZ3f%s!nKmnDaz#-s3ky0r9fGSm}t@X~zR=nOd zGb@LvRwr}f5K?>s`s!m*ng>Wve@XXq1Clzr7OUx${IK| za4OQ;WNl~oySwfW(w#(IYZc}Cb(O@e@BAnYm3G&oeh|hwEJts4zG>YI<52lg>#M;Q z23xlZf!5orZ?zKDihRs-*MlTZ{U9x;`S*(D)(;Yl_oGnX*J-$?SA%5FT~E}uANPkC zNaAa)Z%dKZW+CIc*Q36#TRkl9M^Vd{QiWQ#^u8a2+I@`Uvra(tWSOX^18&Hm7S^@o zvQY^qb;#;ZtSe+qI;bnME?v}B*^o`tHMt-cQ9JS}xrDkd&&l(sUHLSWb|GKdz!|O= zKsE_SZmF$}K%788Z31xvzrF^N@r-!|<*9|9b!dTOr{ZqqsG9L(8n0!xdhf)jBiSZ< z#5?VJUg^dDUYLu5Ci`KW*LpjCEF-+!_Woki=VPYO@0$UYx^VL;~7yT&O(( za0#6$0A94M%$kC+l>-^lZMdtRMzd`fhy*D|ErT?(mVF+3*{?^O(eQehYvIS6naE%!}8&?XF@lk0VlDtPI#8)i3nYkf*1!|F-sr#{m9>n!ZD^$e+;oPo>$MtGe7B+wNKpwQUXN~Xp3KB zyNC*HtD{SBcQhClq9iNp@7EZ5q_Xa=2S}Y)3d1P<&>z&oC5V^i&~y>-hD1 zAd^IcT#R&K7a167X2E1$jzr_gI!3C}l?~K2*@Pt*^X1R`2jQ$K=DdM0-k`lGq7?Zg zMN~Yb%wbLSZ=3jTFy~^+*WuVZDwuZS@aEj4v)i;LMG6Ym!xzrN^5j500c8R;PuU7w zbft9AXRv0Q=k6!BZr}LQ+x(*Y**I8N4oqyExlQ6AP4+hl4lT=&G0p@-Qm4}`ZBEBC z>iHD`B!z-fc9C6TBatE9QhNp5XUzo~RftFZi)>WIbvManRLg3T?K zrl7iv^Pm>XY~;lMDW!Hu<)zfGxSH0Hoz*A+kDScW53t6A@!ZUTxACel zr&wX5dMc!yRSvCB+4nz=T!XBB%qPhH!koV{M_MUc#(99|^8(F7rv5H2;dq~vVV_3U zc*ynT%znt#fA}M-N_$se#)H}Y!HdmWF=5E6C5Bds zfve2u#2I7As>haD8|QC}B47cg3G?lWdIJ_yt3+NWVp3Gag!6W@i2HAXpI4FCx6_@j z7=|k8HhO)9H_cX*1iR=AqNr%=ZaoTnsh1ptDzEI5dv#r%4thP0GFP`AhxZT&!Oktu zE4pTQ_DT?pZ}ID|Kq$p6^QPsZcDRGu;lgr|_NXVUqNYAc5UqmOq#7**63lSl#FGnrz#vuT-N z`5Hz$_%%HeV1MD*?z>J!5x-r{Yn~^Q!1Gic{X+c|#tJtlnG?sEESftX7U}FGdWD&l MMFVTwi&usHe}%XLH~;_u literal 0 HcmV?d00001 diff --git a/usr/local/bin/framework/__pycache__/newobj.cpython-38.pyc b/usr/local/bin/framework/__pycache__/newobj.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f78a97ea4ccb6f790f0a29cdbe45e0e074540913 GIT binary patch literal 10283 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 U-~YNRzK8dke=`Vz1^=D@0Uc}fTL1t6 literal 0 HcmV?d00001 diff --git a/usr/local/bin/framework/__pycache__/types.cpython-38.pyc b/usr/local/bin/framework/__pycache__/types.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..289955d04a597fb81232e7cadc83f93658be23d0 GIT binary patch literal 1270 zcmZuv+iuf95Oq@LQm1k6r9c4#1t}73Due`r3Z*0_Epn1SR-< zBOystG9{XzNjlO_w3Ad8Hbv8MoDnuF?5N-sVRLkh=3{>Zs?}Z=aQupH6LGimE`#n^ zEyta)dh${itqHM;pEH}it%2k z5|wE^M9doK9!}?OFA4kida{|I_Zw1S@$`#QB4Kdo@#orLz2eNJ#MLUEL)@h*Iktm9 zDLHnFxjqv~)!L3$WiI2y(YC{VAT?uBw$=AwLCWEoK;@mFe;X@(P)~JR(Z?X)Zbfm{k2}#Yh}Iv2s2j@ zo*+C!SVbryR1nq?-XItNg=voW;&?AJZxBD&<95KBc8Bpv+)HnRI5#lI8sYvX>z2LH z4g4rKhz#3@V04!_Aw%DsDj(VoUAK=}ogFYJY%w$2V670EcB53;A--=aTjY}%kC_8M z-i7&?;}FEXhV0pfn4p>2^Z3VI7?YK3H!u`KGfEGx=#)(+t5{I3$nQOEG-Me)$< zu%Z*TY`Al=;+?pTN2p(HaYkv_IeNO(fx!ZGz~PNg;0ndK%koh-%C2@i8anJH>i6pa laweI`UizuO)5^s?HKAVO&$HE^>DfW1`Zt}5y?^QN{{bHuQV0M5 literal 0 HcmV?d00001 diff --git a/usr/local/bin/framework/addrspace.py b/usr/local/bin/framework/addrspace.py new file mode 100755 index 0000000..fe42d57 --- /dev/null +++ b/usr/local/bin/framework/addrspace.py @@ -0,0 +1,147 @@ +# Volatility +# Copyright (C) 2007 Volatile Systems +# +# Original Source: +# Copyright (C) 2004,2005,2006 4tphi Research +# Author: {npetroni,awalters}@4tphi.net (Nick Petroni and AAron Walters) +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or (at +# your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +""" +@author: AAron Walters +@license: GNU General Public License 2.0 or later +@contact: awalters@volatilesystems.com +@organization: Volatile Systems + +Alias for all address spaces +""" + +# pylint: disable=missing-docstring + +import os +import struct + + +class FileAddressSpace: + def __init__(self, fname, mode='rb', fast=False): + self.fname = fname + self.name = fname + self.fhandle = open(fname, mode) + self.fsize = os.path.getsize(fname) + + if fast: + self.fast_fhandle = open(fname, mode) + + def fread(self, len): + return self.fast_fhandle.read(len) + + def read(self, addr, len): + self.fhandle.seek(addr) + return self.fhandle.read(len) + + def read_long(self, addr): + string = self.read(addr, 4) + (longval,) = struct.unpack('L', string) + return longval + + def get_address_range(self): + return [0, self.fsize - 1] + + def get_available_addresses(self): + return [self.get_address_range()] + + def is_valid_address(self, addr): + return addr < self.fsize - 1 + + def close(self): + self.fhandle.close() + + +# Code below written by Brendan Dolan-Gavitt + +BLOCK_SIZE = 0x1000 + + +class HiveFileAddressSpace: + def __init__(self, fname): + self.fname = fname + self.base = FileAddressSpace(fname) + + def vtop(self, vaddr): + return vaddr + BLOCK_SIZE + 4 + + def read(self, vaddr, length, zero=False): + first_block = BLOCK_SIZE - vaddr % BLOCK_SIZE + full_blocks = ((length + (vaddr % BLOCK_SIZE)) // BLOCK_SIZE) - 1 + left_over = (length + vaddr) % BLOCK_SIZE + + paddr = self.vtop(vaddr) + if paddr is None and zero: + if length < first_block: + return "\0" * length + else: + stuff_read = "\0" * first_block + elif paddr is None: + return None + else: + if length < first_block: + stuff_read = self.base.read(paddr, length) + if not stuff_read and zero: + return "\0" * length + else: + return stuff_read + + stuff_read = self.base.read(paddr, first_block) + if not stuff_read and zero: + stuff_read = "\0" * first_block + + new_vaddr = vaddr + first_block + for __ in range(0, full_blocks): + paddr = self.vtop(new_vaddr) + if paddr is None and zero: + stuff_read = stuff_read + "\0" * BLOCK_SIZE + elif paddr is None: + return None + else: + new_stuff = self.base.read(paddr, BLOCK_SIZE) + if not new_stuff and zero: + new_stuff = "\0" * BLOCK_SIZE + elif not new_stuff: + return None + else: + stuff_read = stuff_read + new_stuff + new_vaddr = new_vaddr + BLOCK_SIZE + + if left_over > 0: + paddr = self.vtop(new_vaddr) + if paddr is None and zero: + stuff_read = stuff_read + "\0" * left_over + elif paddr is None: + return None + else: + stuff_read = stuff_read + self.base.read(paddr, left_over) + return stuff_read + + def read_long_phys(self, addr): + string = self.base.read(addr, 4) + (longval,) = struct.unpack('L', string) + return longval + + def is_valid_address(self, vaddr): + paddr = self.vtop(vaddr) + if not paddr: + return False + return self.base.is_valid_address(paddr) diff --git a/usr/local/bin/framework/newobj.py b/usr/local/bin/framework/newobj.py new file mode 100644 index 0000000..1a28972 --- /dev/null +++ b/usr/local/bin/framework/newobj.py @@ -0,0 +1,320 @@ +# This file is part of creddump. +# +# creddump is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# creddump is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with creddump. If not, see . + +""" +@author: Brendan Dolan-Gavitt +@license: GNU General Public License 2.0 or later +@contact: bdolangavitt@wesleyan.edu +""" + +# pylint: disable=missing-docstring,invalid-name,no-else-return,arguments-differ,unused-argument + +from operator import itemgetter +from struct import unpack + +from framework.object import get_obj_offset, builtin_types, read_value, read_unicode_string, read_string, read_obj +from framework.types import regtypes as types + + +def get_ptr_type(structure, member): + """Return the type a pointer points to. + + Arguments: + structure : the name of the structure from vtypes + member : a list of members + + Example: + get_ptr_type('_EPROCESS', ['ActiveProcessLinks', 'Flink']) => ['_LIST_ENTRY'] + """ + if len(member) > 1: + _, tp = get_obj_offset(types, [structure, member[0]]) + if tp == 'array': + return types[structure][1][member[0]][1][2][1] + else: + return get_ptr_type(tp, member[1:]) + else: + return types[structure][1][member[0]][1][1] + + +class Obj(object): + """Base class for all objects. + + May return a subclass for certain data types to allow + for special handling. + """ + + def __new__(cls, name, address, space): + if name in globals(): + # This is a bit of "magic" + # Could be replaced with a dict mapping type names to types + return globals()[name](name, address, space) + elif name in builtin_types: + return Primitive(name, address, space) + else: + obj = object.__new__(cls) + return obj + + def __init__(self, name, address, space): + self.name = name + self.address = address + self.space = space + + # Subclasses can add fields to this list if they want them + # to show up in values() or members(), even if they do not + # appear in the vtype definition + self.extra_members = [] + + def __getattribute__(self, attr): + try: + return object.__getattribute__(self, attr) + except AttributeError: + pass + + if self.name in builtin_types: + raise AttributeError("Primitive types have no dynamic attributes") + + try: + off, tp = get_obj_offset(types, [self.name, attr]) + except: + raise AttributeError("'%s' has no attribute '%s'" % (self.name, attr)) + + if tp == 'array': + a_len = types[self.name][1][attr][1][1] + l = [] + for i in range(a_len): + a_off, a_tp = get_obj_offset(types, [self.name, attr, i]) + if a_tp == 'pointer': + ptp = get_ptr_type(self.name, [attr, i]) + l.append(Pointer(a_tp, self.address + a_off, self.space, ptp)) + else: + l.append(Obj(a_tp, self.address + a_off, self.space)) + return l + elif tp == 'pointer': + # Can't just return a Obj here, since pointers need to also + # know what type they point to. + ptp = get_ptr_type(self.name, [attr]) + return Pointer(tp, self.address + off, self.space, ptp) + else: + return Obj(tp, self.address + off, self.space) + + def __truediv__(self, other): + if isinstance(other, (tuple, list)): + return Pointer(other[0], self.address, self.space, other[1]) + elif isinstance(other, str): + return Obj(other, self.address, self.space) + else: + raise ValueError("Must provide a type name as string for casting") + + def members(self): + """Return a list of this object's members, sorted by offset.""" + + # Could also just return the list + membs = [(k, v[0]) for k, v in list(types[self.name][1].items())] + membs.sort(key=itemgetter(1)) + return list(map(itemgetter(0), membs)) + self.extra_members + + def values(self): + """Return a dictionary of this object's members and their values""" + + valdict = {} + for k in self.members(): + valdict[k] = getattr(self, k) + return valdict + + def bytes(self, length=-1): + """Get bytes starting at the address of this object. + + Arguments: + length : the number of bytes to read. Default: size of + this object. + """ + + if length == -1: + length = self.size() + return self.space.read(self.address, length) + + def size(self): + """Get the size of this object.""" + + if self.name in builtin_types: + return builtin_types[self.name][0] + else: + return types[self.name][0] + + def __repr__(self): + return "<%s @%08x>" % (self.name, self.address) + + def __eq__(self, other): + if not isinstance(other, Obj): + raise TypeError("Types are incomparable") + return self.address == other.address and self.name == other.name + + def __ne__(self, other): + return not self.__eq__(other) + + def __hash__(self): + return hash(self.address) ^ hash(self.name) + + def is_valid(self): + return self.space.is_valid_address(self.address) + + def get_offset(self, member): + return get_obj_offset(types, [self.name] + member) + + +class Primitive(Obj): + """Class to represent a primitive data type. + + Attributes: + value : the python primitive value of this type + """ + + def __new__(cls, *args, **kwargs): + obj = object.__new__(cls) + return obj + + def __init__(self, name, address, space): + super(Primitive, self).__init__(name, address, space) + length, fmt = builtin_types[name] + data = space.read(address, length) + if not data: + self.value = None + else: + self.value = unpack(fmt, data)[0] + + def __repr__(self): + return repr(self.value) + + def members(self): + return [] + + +class Pointer(Obj): + """Class to represent pointers. + + value : the object pointed to + + If an attribute is not found in this instance, + the attribute will be looked up in the referenced + object.""" + + def __new__(cls, *args, **kwargs): + obj = object.__new__(cls) + return obj + + def __init__(self, name, address, space, ptr_type): + super(Pointer, self).__init__(name, address, space) + ptr_address = read_value(space, name, address) + if ptr_type[0] == 'pointer': + self.value = Pointer(ptr_type[0], ptr_address, self.space, ptr_type[1]) + else: + self.value = Obj(ptr_type[0], ptr_address, self.space) + + def __getattribute__(self, attr): + # It's still nice to be able to access things through pointers + # without having to explicitly dereference them, so if we don't + # find an attribute via our superclass, just dereference the pointer + # and return the attribute in the pointed-to type. + try: + return super(Pointer, self).__getattribute__(attr) + except AttributeError: + return getattr(self.value, attr) + + def __repr__(self): + return "" % (self.value.name, self.value.address) + + def members(self): + return self.value.members() + + +class _UNICODE_STRING(Obj): + """Class representing a _UNICODE_STRING + + Adds the following behavior: + * The Buffer attribute is presented as a Python string rather + than a pointer to an unsigned short. + * The __str__ method returns the value of the Buffer. + """ + + def __new__(cls, *args, **kwargs): + obj = object.__new__(cls) + return obj + + def __str__(self): + return self.Buffer + + # Custom Attributes + def getBuffer(self): + return read_unicode_string(self.space, types, [], self.address) + + Buffer = property(fget=getBuffer) + + +class _CM_KEY_NODE(Obj): + def __new__(cls, *args, **kwargs): + obj = object.__new__(cls) + return obj + + def getName(self): + return read_string(self.space, types, ['_CM_KEY_NODE', 'Name'], + self.address, self.NameLength.value) + + Name = property(fget=getName) + + +class _CM_KEY_VALUE(Obj): + def __new__(cls, *args, **kwargs): + obj = object.__new__(cls) + return obj + + def getName(self): + return read_string(self.space, types, ['_CM_KEY_VALUE', 'Name'], + self.address, self.NameLength.value) + + Name = property(fget=getName) + + +class _CHILD_LIST(Obj): + def __new__(cls, *args, **kwargs): + obj = object.__new__(cls) + return obj + + def getList(self): + lst = [] + list_address = read_obj(self.space, types, + ['_CHILD_LIST', 'List'], self.address) + for i in range(self.Count.value): + lst.append(Pointer("pointer", list_address + (i * 4), self.space, + ["_CM_KEY_VALUE"])) + return lst + + List = property(fget=getList) + + +class _CM_KEY_INDEX(Obj): + def __new__(cls, *args, **kwargs): + obj = object.__new__(cls) + return obj + + def getList(self): + lst = [] + for i in range(self.Count.value): + # we are ignoring the hash value here + off, __ = get_obj_offset(types, ['_CM_KEY_INDEX', 'List', i * 2]) + lst.append(Pointer("pointer", self.address + off, self.space, + ["_CM_KEY_NODE"])) + return lst + + List = property(fget=getList) diff --git a/usr/local/bin/framework/object.py b/usr/local/bin/framework/object.py new file mode 100644 index 0000000..d11243d --- /dev/null +++ b/usr/local/bin/framework/object.py @@ -0,0 +1,171 @@ +# Volatools Basic +# Copyright (C) 2007 Komoku, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or (at +# your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# + +# pylint: disable=invalid-name,missing-docstring + +""" +@author: AAron Walters and Nick Petroni +@license: GNU General Public License 2.0 or later +@contact: awalters@komoku.com, npetroni@komoku.com +@organization: Komoku, Inc. +""" + +import struct + +builtin_types = { + 'int': (4, 'i'), + 'long': (4, 'i'), + 'unsigned long': (4, 'I'), + 'unsigned int': (4, 'I'), + 'address': (4, 'I'), + 'char': (1, 'c'), + 'unsigned char': (1, 'B'), + 'unsigned short': (2, 'H'), + 'short': (2, 'h'), + 'long long': (8, 'q'), + 'unsigned long long': (8, 'Q'), + 'pointer': (4, 'I'), +} + + +def obj_size(types, objname): + if objname not in types: + raise Exception('Invalid type %s not in types' % (objname)) + + return types[objname][0] + + +def builtin_size(builtin): + if builtin not in builtin_types: + raise Exception('Invalid built-in type %s' % (builtin)) + + return builtin_types[builtin][0] + + +def read_value(addr_space, value_type, vaddr): + """ + Read the low-level value for a built-in type. + """ + + if value_type not in builtin_types: + raise Exception('Invalid built-in type %s' % (value_type)) + + type_unpack_char = builtin_types[value_type][1] + type_size = builtin_types[value_type][0] + + buf = addr_space.read(vaddr, type_size) + if buf is None: + return None + (val,) = struct.unpack(type_unpack_char, buf) + + return val + + +def read_unicode_string(addr_space, types, member_list, vaddr): + offset = 0 + if len(member_list) > 1: + (offset, __) = get_obj_offset(types, member_list) + + buf = read_obj(addr_space, types, ['_UNICODE_STRING', 'Buffer'], vaddr + offset) + length = read_obj(addr_space, types, ['_UNICODE_STRING', 'Length'], vaddr + offset) + + if length == 0x0: + return "" + + if buf is None or length is None: + return None + + readBuf = read_string(addr_space, types, ['char'], buf, length) + + if readBuf is None: + return None + + try: + readBuf = readBuf.decode('UTF-16').encode('ascii') + except Exception: # pylint: disable=broad-except + return None + + return readBuf + + +def read_string(addr_space, types, member_list, vaddr, max_length=256): + offset = 0 + if len(member_list) > 1: + (offset, __) = get_obj_offset(types, member_list) + + val = addr_space.read(vaddr + offset, max_length) + + return val + + +def read_null_string(addr_space, types, member_list, vaddr, max_length=256): + string = read_string(addr_space, types, member_list, vaddr, max_length) + + if string is None: + return None + + return string.split('\0', 1)[0] + + +def get_obj_offset(types, member_list): + """ + Returns the (offset, type) pair for a given list + """ + member_list.reverse() + + current_type = member_list.pop() + + offset = 0 + + while member_list: + if current_type == 'array': + current_type = member_dict[current_member][1][2][0] + if current_type in builtin_types: + current_type_size = builtin_size(current_type) + else: + current_type_size = obj_size(types, current_type) + index = member_list.pop() + offset += index * current_type_size + continue + + elif current_type not in types: + raise Exception('Invalid type ' + current_type) + + member_dict = types[current_type][1] + + current_member = member_list.pop() + if current_member not in member_dict: + raise Exception('Invalid member %s in type %s' % (current_member, current_type)) + + offset += member_dict[current_member][0] + + current_type = member_dict[current_member][1][0] + + return (offset, current_type) + + +def read_obj(addr_space, types, member_list, vaddr): + """ + Read the low-level value for some complex type's member. + The type must have members. + """ + if len(member_list) < 2: + raise Exception('Invalid type/member ' + str(member_list)) + + (offset, current_type) = get_obj_offset(types, member_list) + return read_value(addr_space, current_type, vaddr + offset) diff --git a/usr/local/bin/framework/types.py b/usr/local/bin/framework/types.py new file mode 100644 index 0000000..cbf8b4f --- /dev/null +++ b/usr/local/bin/framework/types.py @@ -0,0 +1,65 @@ +# This file is part of creddump. +# +# creddump is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# creddump is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with creddump. If not, see . + +# pylint: disable=invalid-name + +""" +@author: Brendan Dolan-Gavitt +@license: GNU General Public License 2.0 or later +@contact: bdolangavitt@wesleyan.edu +""" + +regtypes = { + '_CM_KEY_VALUE': [0x18, { + 'Signature': [0x0, ['unsigned short']], + 'NameLength': [0x2, ['unsigned short']], + 'DataLength': [0x4, ['unsigned long']], + 'Data': [0x8, ['unsigned long']], + 'Type': [0xc, ['unsigned long']], + 'Flags': [0x10, ['unsigned short']], + 'Spare': [0x12, ['unsigned short']], + 'Name': [0x14, ['array', 1, ['unsigned short']]], + }], + '_CM_KEY_NODE': [0x50, { + 'Signature': [0x0, ['unsigned short']], + 'Flags': [0x2, ['unsigned short']], + 'LastWriteTime': [0x4, ['_LARGE_INTEGER']], + 'Spare': [0xc, ['unsigned long']], + 'Parent': [0x10, ['unsigned long']], + 'SubKeyCounts': [0x14, ['array', 2, ['unsigned long']]], + 'SubKeyLists': [0x1c, ['array', 2, ['unsigned long']]], + 'ValueList': [0x24, ['_CHILD_LIST']], + 'ChildHiveReference': [0x1c, ['_CM_KEY_REFERENCE']], + 'Security': [0x2c, ['unsigned long']], + 'Class': [0x30, ['unsigned long']], + 'MaxNameLen': [0x34, ['unsigned long']], + 'MaxClassLen': [0x38, ['unsigned long']], + 'MaxValueNameLen': [0x3c, ['unsigned long']], + 'MaxValueDataLen': [0x40, ['unsigned long']], + 'WorkVar': [0x44, ['unsigned long']], + 'NameLength': [0x48, ['unsigned short']], + 'ClassLength': [0x4a, ['unsigned short']], + 'Name': [0x4c, ['array', 1, ['unsigned short']]], + }], + '_CM_KEY_INDEX': [0x8, { + 'Signature': [0x0, ['unsigned short']], + 'Count': [0x2, ['unsigned short']], + 'List': [0x4, ['array', 1, ['unsigned long']]], + }], + '_CHILD_LIST': [0x8, { + 'Count': [0x0, ['unsigned long']], + 'List': [0x4, ['unsigned long']], + }], +} diff --git a/usr/local/bin/framework/win32/__init__.py b/usr/local/bin/framework/win32/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/usr/local/bin/framework/win32/__pycache__/__init__.cpython-38.pyc b/usr/local/bin/framework/win32/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce0d731a2ae06c1bbedd5e6bf59722fbe9ba2cf1 GIT binary patch literal 159 zcmWIL<>g`kg68+fVnFm`5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!HEenx(7s(wys za%Ng;k-kfQd0tL_VoI@oa#3nZN@;F^xo&P^aS2c=ttc@!wLHHlTfaOr&)7&mK0Y%q bvm`!Vub}c4hfQvNN@-529mw?0K+FID_e3Xw literal 0 HcmV?d00001 diff --git a/usr/local/bin/framework/win32/__pycache__/hashdump.cpython-38.pyc b/usr/local/bin/framework/win32/__pycache__/hashdump.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a572862058a6d64a51034d377f941fa0a7cfa137 GIT binary patch literal 8848 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. + +""" +@author: Brendan Dolan-Gavitt +@license: GNU General Public License 2.0 or later +@contact: bdolangavitt@wesleyan.edu +""" + +from framework.win32.rawreg import * +from framework.addrspace import HiveFileAddressSpace +from framework.win32.hashdump import get_bootkey +from framework.win32.lsasecrets import get_secret_by_name,get_lsa_key +from Crypto.Hash import HMAC +from Crypto.Cipher import ARC4, AES +from struct import unpack + +def get_nlkm(secaddr, lsakey, vista): + return get_secret_by_name(secaddr, 'NL$KM', lsakey, vista) + +def decrypt_hash(edata, nlkm, ch): + hmac_md5 = HMAC.new(nlkm,ch) + rc4key = hmac_md5.digest() + + rc4 = ARC4.new(rc4key) + data = rc4.encrypt(edata) + return data + +def decrypt_hash_vista(edata, nlkm, ch): + """ + Based on code from http://lab.mediaservice.net/code/cachedump.rb + """ + aes = AES.new(nlkm[16:32], AES.MODE_CBC, ch) + + out = bytearray() + for i in range(0, len(edata), 16): + buf = edata[i : i+16] + if len(buf) < 16: + buf += (16 - len(buf)) * b"\00" + + out += aes.decrypt(buf) + return out + +def parse_cache_entry(cache_data): + (uname_len, domain_len) = unpack(". + +# pylint: disable=invalid-name,missing-docstring + +""" +@author: Brendan Dolan-Gavitt +@license: GNU General Public License 2.0 or later +@contact: bdolangavitt@wesleyan.edu +""" + +from struct import unpack, pack +import binascii + +from Crypto.Hash import MD5 +from Crypto.Cipher import ARC4, DES, AES + +from framework.win32.rawreg import get_root, open_key, values, subkeys +from framework.addrspace import HiveFileAddressSpace + +odd_parity = [ + 1, 1, 2, 2, 4, 4, 7, 7, 8, 8, 11, 11, 13, 13, 14, 14, + 16, 16, 19, 19, 21, 21, 22, 22, 25, 25, 26, 26, 28, 28, 31, 31, + 32, 32, 35, 35, 37, 37, 38, 38, 41, 41, 42, 42, 44, 44, 47, 47, + 49, 49, 50, 50, 52, 52, 55, 55, 56, 56, 59, 59, 61, 61, 62, 62, + 64, 64, 67, 67, 69, 69, 70, 70, 73, 73, 74, 74, 76, 76, 79, 79, + 81, 81, 82, 82, 84, 84, 87, 87, 88, 88, 91, 91, 93, 93, 94, 94, + 97, 97, 98, 98, 100, 100, 103, 103, 104, 104, 107, 107, 109, 109, 110, 110, + 112, 112, 115, 115, 117, 117, 118, 118, 121, 121, 122, 122, 124, 124, 127, 127, + 128, 128, 131, 131, 133, 133, 134, 134, 137, 137, 138, 138, 140, 140, 143, 143, + 145, 145, 146, 146, 148, 148, 151, 151, 152, 152, 155, 155, 157, 157, 158, 158, + 161, 161, 162, 162, 164, 164, 167, 167, 168, 168, 171, 171, 173, 173, 174, 174, + 176, 176, 179, 179, 181, 181, 182, 182, 185, 185, 186, 186, 188, 188, 191, 191, + 193, 193, 194, 194, 196, 196, 199, 199, 200, 200, 203, 203, 205, 205, 206, 206, + 208, 208, 211, 211, 213, 213, 214, 214, 217, 217, 218, 218, 220, 220, 223, 223, + 224, 224, 227, 227, 229, 229, 230, 230, 233, 233, 234, 234, 236, 236, 239, 239, + 241, 241, 242, 242, 244, 244, 247, 247, 248, 248, 251, 251, 253, 253, 254, 254 +] + +# Permutation matrix for boot key +p = [0x8, 0x5, 0x4, 0x2, 0xb, 0x9, 0xd, 0x3, + 0x0, 0x6, 0x1, 0xc, 0xe, 0xa, 0xf, 0x7] + +# Constants for SAM decrypt algorithm +aqwerty = b"!@#$%^&*()qwertyUIOPAzxcvbnmQQQQQQQQQQQQ)(*@&%\0" +anum = b"0123456789012345678901234567890123456789\0" +antpassword = b"NTPASSWORD\0" +almpassword = b"LMPASSWORD\0" + +empty_lm = binascii.unhexlify("aad3b435b51404eeaad3b435b51404ee") +empty_nt = binascii.unhexlify("31d6cfe0d16ae931b73c59d7e0c089c0") + + +def str_to_key(s): + key = bytearray() + key.append(s[0] >> 1) + key.append(((s[0] & 0x01) << 6) | ((s[1]) >> 2)) + key.append(((s[1] & 0x03) << 5) | ((s[2]) >> 3)) + key.append(((s[2] & 0x07) << 4) | ((s[3]) >> 4)) + key.append(((s[3] & 0x0F) << 3) | ((s[4]) >> 5)) + key.append(((s[4] & 0x1F) << 2) | ((s[5]) >> 6)) + key.append(((s[5] & 0x3F) << 1) | ((s[6]) >> 7)) + key.append(s[6] & 0x7F) + for i in range(8): + key[i] = (key[i] << 1) + key[i] = odd_parity[key[i]] + return key + + +def sid_to_key(sid): + s1 = bytearray() + s1.append(sid & 0xFF) + s1.append((sid >> 8) & 0xFF) + s1.append((sid >> 16) & 0xFF) + s1.append((sid >> 24) & 0xFF) + s1.append(s1[0]) + s1.append(s1[1]) + s1.append(s1[2]) + s2 = bytearray([s1[3], s1[0], s1[1], s1[2]]) + s2.append(s2[0]) + s2.append(s2[1]) + s2.append(s2[2]) + + return str_to_key(s1), str_to_key(s2) + + +def find_control_set(sysaddr): + root = get_root(sysaddr) + if not root: + return 1 + + csselect = open_key(root, ["Select"]) + if not csselect: + return 1 + + for v in values(csselect): + if v.Name == b"Current": + return v.Data.value + + return 1 + + +def get_bootkey(sysaddr): + cs = find_control_set(sysaddr) + lsa_base = ["ControlSet%03d" % cs, "Control", "Lsa"] + lsa_keys = ["JD", "Skew1", "GBG", "Data"] + + root = get_root(sysaddr) + if not root: + return None + + lsa = open_key(root, lsa_base) + if not lsa: + return None + + bootkey = [] + + for lk in lsa_keys: + key = open_key(lsa, [lk]) + class_data = sysaddr.read(key.Class.value, key.ClassLength.value) + hex_string = class_data.decode('utf-16-le') + hex_data = binascii.unhexlify(hex_string) + for h in hex_data: + bootkey.append(h) + + bootkey_scrambled = [] + for i in range(len(bootkey)): + bootkey_scrambled.append(bootkey[p[i]]) + + return bytes(bootkey_scrambled) + + +def get_hbootkey(samaddr, bootkey): + sam_account_path = ["SAM", "Domains", "Account"] + + root = get_root(samaddr) + if not root: + return None + + sam_account_key = open_key(root, sam_account_path) + if not sam_account_key: + return None + + F = None + for v in values(sam_account_key): + if v.Name == b'F': + F = samaddr.read(v.Data.value, v.DataLength.value) + if not F: + return None + + revision = F[0x00] + if revision == 2: + md5 = MD5.new() + md5.update(F[0x70:0x80] + aqwerty + bootkey + anum) + rc4_key = md5.digest() + + rc4 = ARC4.new(rc4_key) + hbootkey = rc4.encrypt(F[0x80:0xA0]) + + return hbootkey + + if revision == 3: + iv = F[0x78:0x88] + encryptedHBootKey = F[0x88:0xA8] + cipher = AES.new(bootkey, AES.MODE_CBC, iv) + hbootkey = cipher.decrypt(encryptedHBootKey) + + return hbootkey[:16] + + print("Unknown revision: %d" % revision) + return None + +def get_user_keys(samaddr): + user_key_path = ["SAM", "Domains", "Account", "Users"] + + root = get_root(samaddr) + if not root: + return [] + + user_key = open_key(root, user_key_path) + if not user_key: + return [] + + return [k for k in subkeys(user_key) if k.Name != b"Names"] + + +def decrypt_single_hash(rid, hbootkey, enc_hash, lmntstr): + if enc_hash == "": + return "" + (des_k1, des_k2) = sid_to_key(rid) + d1 = DES.new(des_k1, DES.MODE_ECB) + d2 = DES.new(des_k2, DES.MODE_ECB) + md5 = MD5.new() + md5.update(hbootkey[:0x10] + pack(". + +# pylint: disable=missing-docstring + +""" +@author: Brendan Dolan-Gavitt +@license: GNU General Public License 2.0 or later +@contact: bdolangavitt@wesleyan.edu +""" + +from Crypto.Hash import MD5, SHA256 +from Crypto.Cipher import ARC4, DES, AES + +from framework.win32.rawreg import get_root, open_key, subkeys, unpack +from framework.addrspace import HiveFileAddressSpace +from framework.win32.hashdump import get_bootkey, str_to_key + + +def get_lsa_key(secaddr, bootkey, vista): + root = get_root(secaddr) + if not root: + return None + + if vista: + enc_reg_key = open_key(root, ["Policy", "PolEKList"]) + else: + enc_reg_key = open_key(root, ["Policy", "PolSecretEncryptionKey"]) + + if not enc_reg_key: + return None + + enc_reg_value = enc_reg_key.ValueList.List[0] + if not enc_reg_value: + return None + + obf_lsa_key = secaddr.read(enc_reg_value.Data.value, + enc_reg_value.DataLength.value) + if not obf_lsa_key: + return None + + if not vista: + md5 = MD5.new() + md5.update(bootkey) + for __ in range(1000): + md5.update(obf_lsa_key[60:76]) + rc4key = md5.digest() + rc4 = ARC4.new(rc4key) + lsa_key = rc4.decrypt(obf_lsa_key[12:60]) + lsa_key = lsa_key[0x10:0x20] + else: + lsa_key = decrypt_aes(obf_lsa_key, bootkey) + lsa_key = lsa_key[68:100] + + return lsa_key + + +def decrypt_secret(secret, key): + """Python implementation of SystemFunction005. + + Decrypts a block of data with DES using given key. + Note that key can be longer than 7 bytes.""" + decrypted_data = bytearray() + j = 0 # key index + for i in range(0, len(secret), 8): + enc_block = secret[i:i + 8] + block_key = key[j:j + 7] + des_key = str_to_key(block_key) + + des = DES.new(des_key, DES.MODE_ECB) + decrypted_data += des.decrypt(enc_block) + + j += 7 + if len(key[j:j + 7]) < 7: + j = len(key[j:j + 7]) + + (dec_data_len,) = unpack(". + +""" +@author: Brendan Dolan-Gavitt +@license: GNU General Public License 2.0 or later +@contact: bdolangavitt@wesleyan.edu +""" + +from framework.newobj import Obj,Pointer +from struct import unpack + +ROOT_INDEX = 0x20 +LH_SIG = unpack(" 0: + tam -= tam_xor + magic += magic_static +print u'\tUsed Magic Xor: 0x{}.'.format(magic) + +i = 0 +while i < len(kcpasswd): + charkc = kcpasswd[i] + kcpasswd[i+1] + charkch = int(charkc, 16) + charm = magic[i] + magic[i+1] + charmh = int(charm, 16) + r = charkch ^ charmh + pwd += chr(r) + if r == 0: + print '\n\tThe password is: "{}".\n'.format(pwd.rstrip('\0')) + break + i += 2 diff --git a/usr/local/bin/print_plist_entry.py b/usr/local/bin/print_plist_entry.py new file mode 100755 index 0000000..da97a16 --- /dev/null +++ b/usr/local/bin/print_plist_entry.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python3 +#=============================================================================== +# DIRECTORY: +# /usr/local/bin +# +# FILE: +# print_plist_entry.py +# +# USAGE: +# ./print_plist_entry.py +# OR +# python3 print_plist_entry.py +# +# OPTIONS: +# none +# +# DESCRIPTION: +# Prints key-value pair of key in plist +# +# REQUIREMENTS: +# python3 and python-plistlib +# +# BUGS: +# --- +# +# NOTES: +# Tested on: +# - Arch Linux +# +# AUTHOR: +# Patrick Neumann, patrick@neumannsland.de +# +# COMPANY: +# (privately) +# +# VERSION: +# 0.9 (beta) +# +# LINK TO THE MOST CURRENT VERSIONS: +# https://... +# +# CREATED: +# 17.11.2020 +# +# COPYRIGHT (C): +# 2015-2020 - Patrick Neumann +# +# LICENSE: +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# WARRANTY: +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# TODO: +# --- +# +# HISTORY: +# 0.9 - Patrick Neumann - Initial (public) release +# +#=============================================================================== + +import os.path +import plistlib +import sys + +# short help for new users +def usage(): + print( "\nUsage: python print_plist_entry.py \n" ) + print( " (use the \"ALL\" to list all entries.)\n" ) + +# check for first parameter +try: + plist = sys.argv[1] +except IndexError: + print( "\nError: No (file) given!" ) + usage() + sys.exit( 1 ) + +# check if first parameter is a file +if not os.path.isfile( plist ): + print( "\nError: plist (file) does not exist!\n" ) + sys.exit( 1 ) + +# check for second parameter +try: + key = sys.argv[2] +except IndexError: + print( "\nError: No (string) given!" ) + usage() + sys.exit( 1 ) + +# plist has to be a XML file +try: + with open( plist, 'rb' ) as fp: + content = plistlib.load( fp ) +except: + print( "\nError: plist is not a XML file!\n" ) + sys.exit( 1 ) + +try: + print( key + ":", content[ key ] ) +except: + print( "\nError: key not found!\n" ) + sys.exit( 1 ) + +sys.exit( 0 ) diff --git a/usr/local/bin/pwdump.py b/usr/local/bin/pwdump.py new file mode 100755 index 0000000..462df85 --- /dev/null +++ b/usr/local/bin/pwdump.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python + +# This file is part of creddump. +# +# creddump is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# creddump is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with creddump. If not, see . + +""" +@author: Brendan Dolan-Gavitt +@license: GNU General Public License 2.0 or later +@contact: bdolangavitt@wesleyan.edu +""" + +import sys +from framework.win32.hashdump import dump_file_hashes + +if len(sys.argv) < 3: + print("usage: %s " % sys.argv[0]) + sys.exit(1) + +dump_file_hashes(sys.argv[1], sys.argv[2]) diff --git a/usr/local/bin/sigfind b/usr/local/bin/sigfind new file mode 100755 index 0000000000000000000000000000000000000000..690d331608395b614e362befa875557ae79bc0e3 GIT binary patch literal 291848 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

F)6JG|!F>X4XgsA+BgMUVn1n-gN<4x)` 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 sleuthkit [dot] org] + * Copyright (c) 2004 Brian Carrier. All rights reserved + * + * sigfind + * + * This software is distributed under the Common Public License 1.0 + */ + +#include "tsk/tsk_tools_i.h" + +#include +#include +#include +#include +#include +#include +#include + +static char *progname; + +int opterr = 1, /* if error message should be printed */ +optind = 1, /* index into parent argv vector */ +optopt, /* character checked for validity */ +optreset; /* reset getopt */ +char *optarg; /* argument associated with option */ + +#define BADCH (int)'?' +#define BADARG (int)':' +#define EMSG "" + + +void printSectorMd5(TSK_MD5_CTX *md){ + + unsigned char hash[16]; + + TSK_MD5_Final(hash, md); + printf("MD5: "); + for (int x = 0; x < 16; x++) { + printf("%x%x", (hash[x] >> 4) & 0xf, hash[x] & 0xf); + } + printf("\n"); + +} + + +uint8_t* changeEndian(uint8_t* sig, int sig_size){ + uint8_t tmp; + + if (sig_size == 2) { + tmp = sig[1]; + sig[1] = sig[0]; + sig[0] = tmp; + } + else if (sig_size == 3) { + tmp = sig[2]; + sig[2] = sig[0]; + sig[0] = tmp; + } + else if (sig_size == 4) { + tmp = sig[3]; + sig[3] = sig[0]; + sig[0] = tmp; + + tmp = sig[2]; + sig[2] = sig[1]; + sig[1] = tmp; + } + return sig; +} + +/* +* getopt -- +* Parse argc/argv argument vector. +*/ +int +getopt(int nargc, char * const nargv[], const char *ostr) +{ + static char *place = EMSG; /* option letter processing */ + const char *oli; /* option letter list index */ + + if (optreset || !*place) { /* update scanning pointer */ + optreset = 0; + if (optind >= nargc || *(place = nargv[optind]) != '-') { + place = EMSG; + return (-1); + } + if (place[1] && *++place == '-') { /* found "--" */ + ++optind; + place = EMSG; + return (-1); + } + } /* option letter okay? */ + if ((optopt = (int)*place++) == (int)':' || + !(oli = strchr(ostr, optopt))) { + /* + * if the user didn't specify '-' as an option, + * assume it means -1. + */ + if (optopt == (int)'-') + return (-1); + if (!*place) + ++optind; + if (opterr && *ostr != ':') + (void)printf("illegal option -- %c\n", optopt); + return (BADCH); + } + if (*++oli != ':') { /* don't need argument */ + optarg = NULL; + if (!*place) + ++optind; + } + else { /* need an argument */ + if (*place) /* no white space */ + optarg = place; + else if (nargc <= ++optind) { /* no arg */ + place = EMSG; + if (*ostr == ':') + return (BADARG); + if (opterr) + (void)printf("option requires an argument -- %c\n", optopt); + return (BADCH); + } + else /* white space */ + optarg = nargv[optind]; + place = EMSG; + ++optind; + } + return (optopt); /* dump back option letter */ +} + +void +usage() +{ + fprintf(stderr, + "%s [-b bsize] [-o offset] [-t template] [-lV] [hex_signature] file\n", + progname); + fprintf(stderr, "\t-b bsize: Give block size (default 512)\n"); + fprintf(stderr, + "\t-o offset: Give offset into block where signature should exist (default 0)\n"); + fprintf(stderr, "\t-l: Signature will be little endian in image\n"); + fprintf(stderr, "\t-V: Version\n"); + fprintf(stderr, "\t-r: rsize: Give the block size to read (default 512)\n"); + fprintf(stderr, + "\t-t template: The name of a data structure template:\n"); + fprintf(stderr, + "\t\tdospart, ext2, ext3, ext4, fat, hfs, hfs+, ufs1, ufs2\n"); + fprintf(stderr, + "\t\t * New templates: gpt, fat32, fat12or16, exfat, ntfs, refs, hfsx, apfs\n\n"); + fprintf(stderr, + "Modified version running on Windows, also included more advanced Windows FS templates\n"); + fprintf(stderr, + "Modified by Rune Nordvik - 2015/12/17\n"); + exit(1); +} + +// @@@ Should have a big endian flag as well +int +main(int argc, char **argv) +{ + int ch; + uint8_t sig[4] = { 0, 0, 0, 0 }; + uint8_t sig2[4] = { 0, 0, 0, 0 }; // Another signature + uint8_t block[4096]; + + char **err = NULL; + TSK_IMG_INFO *img_info; + TSK_OFF_T cur_offset; + int sig_offset = 0, rel_offset = 0; + int read_size=512, bs = 512; + int sig2_offset = 0, rel2_offset = 0; // Added offsets for sig 2 + bool hasHits = false; // Since prec_hit is unsigned we can not use -1 for it + TSK_DADDR_T i, prev_hit; // Must be unsigned because of the large number of sectors + TSK_DADDR_T * sectors64bitInVolume = NULL; + int sig_size = 0; + int sig2_size = 0; + uint8_t lit_end = 0; + int sig_print = 0, sig2_print = 0; + TSK_MD5_CTX md; + + + + progname = argv[0]; + + while ((ch = getopt(argc, argv, "b:r:lo:t:V")) > 0) { + switch (ch) { + case 'b': + bs = strtol(optarg, err, 10); + if ((bs == 0) || (errno == EINVAL)) { + fprintf(stderr, "Error converting block size: %s\n", + optarg); + exit(1); + } + + if (bs % 512) { + fprintf(stderr, "Invalid block size\n"); + exit(1); + } + break; + case 'l': + lit_end = 1; + break; + + case 'o': + + /* Get the sig_offset in the sector */ + sig_offset = strtol(optarg, err, 10); + if ((sig_offset == 0) || (errno == EINVAL)) { + fprintf(stderr, "Error converting offset value: %s\n", + optarg); + exit(1); + } + break; + + case 't': + if ((strcmp(optarg, "ext2") == 0) || + (strcmp(optarg, "ext3") == 0) || + (strcmp(optarg, "ext4") == 0)) { + lit_end = 1; + sig[0] = 0x53; + sig[1] = 0xef; + sig_size = 2; + sig_offset = 56; + bs = 512; + } + else if (strcmp(optarg, "apfs") == 0) { + lit_end = 1; + sig[0] = 0x4E; // N + sig[1] = 0x58; // X + sig[2] = 0x53; // S + sig[3] = 0x42; // B + sig_size = 4; + sig_offset = 32; + bs = 512; + } + else if ((strcmp(optarg, "dospart") == 0) || + (strcmp(optarg, "fat") == 0)) { + lit_end = 1; + sig[0] = 0x55; + sig[1] = 0xaa; + sig_size = 2; + sig_offset = 510; + bs = 512; + } + else if (strcmp(optarg, "gpt") == 0) { + lit_end = 1; + sig[0] = 0x55; + sig[1] = 0xaa; + sig2[0] = 0x45; // E + sig2[1] = 0x46; // F + sig2[2] = 0x49; // I + sig2[3] = 0x20; // + sig_size = 2; + sig2_size = 4; + sig_offset = 510; + sig2_offset = 0; + bs = 512; + + } + else if (strcmp(optarg, "ntfs") == 0) { + lit_end = 1; + sig[0] = 0x55; + sig[1] = 0xaa; + sig2[0] = 0x4e; // N + sig2[1] = 0x54; // T + sig2[2] = 0x46; // F + sig2[3] = 0x53; // S + sig_size = 2; + sig2_size = 4; + sig_offset = 510; + sig2_offset = 3; + bs = 512; + + } + else if (strcmp(optarg, "fat32") == 0) { + lit_end = 1; + sig[0] = 0x55; + sig[1] = 0xaa; + sig2[0] = 0x46; // F + sig2[1] = 0x41; // A + sig2[2] = 0x54; // T + sig2[3] = 0x33; // 3 + sig_size = 2; + sig2_size = 4; + sig_offset = 510; + sig2_offset = 82; + bs = 512; + } + else if (strcmp(optarg, "fat12or16") == 0) { + lit_end = 1; + sig[0] = 0x55; + sig[1] = 0xaa; + sig2[0] = 0x46; // F + sig2[1] = 0x41; // A + sig2[2] = 0x54; // T + sig2[3] = 0x31; // 1 + sig_size = 2; + sig2_size = 4; + sig_offset = 510; + sig2_offset = 54; + bs = 512; + } + else if (strcmp(optarg, "exfat") == 0) { + lit_end = 1; + sig[0] = 0x55; + sig[1] = 0xaa; + sig2[0] = 0x45; // E + sig2[1] = 0x58; // X + sig2[2] = 0x46; // F + sig2[3] = 0x41; // A + sig_size = 2; + sig2_size = 4; + sig_offset = 510; + sig2_offset = 3; + bs = 512; + } + else if (strcmp(optarg, "refs") == 0) { + lit_end = 1; + sig[0] = 0x52; // R + sig[1] = 0x65; // e + sig[2] = 0x46; // F + sig[3] = 0x53; // S + sig2[0] = 0x46; // F(ile) + sig2[1] = 0x53; // S(ystem) + sig2[2] = 0x52; // R(ecognition) + sig2[3] = 0x53; // S(tructure) + sig_size = 4; + sig2_size = 4; + sig_offset = 3; + sig2_offset = 16; + bs = 512; + } + else if (strcmp(optarg, "ufs1") == 0) { + lit_end = 1; + sig[0] = 0x54; + sig[1] = 0x19; + sig[2] = 0x01; + sig[3] = 0x00; + sig_size = 4; + /* Located 1372 into SB */ + sig_offset = 348; + bs = 512; + } + else if (strcmp(optarg, "ufs2") == 0) { + lit_end = 1; + sig[0] = 0x19; + sig[1] = 0x01; + sig[2] = 0x54; + sig[3] = 0x19; + sig_size = 4; + /* Located 1372 into SB */ + sig_offset = 348; + bs = 512; + } + else if (strcmp(optarg, "hfs+") == 0) { + lit_end = 1; + sig[0] = 0x48; + sig[1] = 0x2b; + sig[2] = 0x00; + sig[3] = 0x04; + sig_size = 4; + /* Located 1024 into image */ + sig_offset = 0; + bs = 512; + } + else if (strcmp(optarg, "hfsx") == 0) { + lit_end = 1; + sig[0] = 0x48; // H + sig[1] = 0x58; // X + sig[2] = 0x00; + sig[3] = 0x05; // 5 - Version for HFSX + sig_size = 4; + /* Located 1024 into image */ + sig_offset = 0; + bs = 512; + } + else if (strcmp(optarg, "hfs") == 0) { + lit_end = 1; + sig[0] = 0x42; + sig[1] = 0x44; + sig_size = 2; + /* Located 1024 into image */ + sig_offset = 0; + bs = 512; + } + else { + fprintf(stderr, "Invalid template\n"); + exit(1); + } + break; + + case 'V': + tsk_version_print(stdout); + exit(0); + case 'r': + // Size of block to read + read_size = strtol(optarg, err, 10); + if ((read_size == 0) || (errno == EINVAL)) { + fprintf(stderr, "Error converting block size: %s\n", + optarg); + exit(1); + } + break; + default: + usage(); + } + } + + + /* If we didn't get a template then check the cmd line */ + if (sig_size == 0) { + if (optind + 1 > argc) { + usage(); + } + /* Get the hex value */ + sig_size = 0; + for (i = 0; i < 9; i++) { + uint8_t tmp; + tmp = argv[optind][i]; + + if (tmp == 0) { + if (i % 2) { + fprintf(stderr, + "Invaild signature - full bytes only\n"); + exit(1); + } + break; + } + + /* Digit */ + if ((tmp >= 0x30) && (tmp <= 0x39)) { + tmp -= 0x30; + } + /* lowercase a-f */ + else if ((tmp >= 0x61) && (tmp <= 0x66)) { + tmp -= 0x57; + } + else if ((tmp >= 0x41) && (tmp <= 0x46)) { + tmp -= 0x37; + } + else { + fprintf(stderr, "Invalid signature value: %c\n", tmp); + exit(1); + } + + /* big nibble */ + if (0 == (i % 2)) { + sig[sig_size] = 16 * tmp; + } + else { + sig[sig_size] += tmp; + sig_size++; + } + } + optind++; + + /* Check the signature length */ + if (i == 9) { + fprintf(stderr, + "Error: Maximum supported signature size is 4 bytes\n"); + exit(1); + } + + + /* Need to switch order */ + if (lit_end) { + // call change endian order + uint8_t* pointerToSig = 0; + pointerToSig = changeEndian(sig, sig_size); + for (int i = 0; i < sig_size; i++) + sig[i] = pointerToSig[i]; + if (0 != sig2[0]){ + pointerToSig = changeEndian(sig2, sig2_size); + for (int i = 0; i < sig2_size; i++) + sig2[i] = pointerToSig[i]; + } + } + } + + if (sig_offset < 0) { + fprintf(stderr, "Error: negative signature offset\n"); + exit(1); + } + + + /* Check that the signature and offset are not larger than a block */ + if ((sig_offset + sig_size) > bs) { + fprintf(stderr, + "Error: The offset and signature sizes are greater than the block size\n"); + exit(1); + } + +// read_size = 512; + /* If our signature crosses the 512 boundary, then read 1k at a time */ + if ((sig_offset / 512) != ((sig_offset + sig_size - 1) / 512)) { + read_size = 4096; + } + + /* Get the image */ + if (optind + 1 != argc) { + usage(); + } + + if ((img_info = + tsk_img_open_utf8_sing(argv[optind], + TSK_IMG_TYPE_DETECT, 0)) == NULL) { + tsk_error_print(stderr); + exit(1); + } + + /* Make a version that can be more easily printed */ + for (i = 0; i < sig_size; i++) { + sig_print |= (sig[i] << ((sig_size - 1 - i) * 8)); + } + + for (i = 0; i < sig2_size; i++) { + sig2_print |= (sig2[i] << ((sig2_size - 1 - i) * 8)); + } + + if (0 != sig2[0]){ + printf("Block size: %d\nOffset1: %d Signature1: %X\nOffset2: %d Signature2: %X\n\n", bs, sig_offset, + sig_print, sig2_offset, sig2_print); + + } + else{ + printf("Block size: %d\nOffset: %d Signature: %X\n\n", bs, sig_offset, + sig_print); + } + /* Loop through by blocks - we will read in block sized chunks + * so that we can be used on raw devices + */ + cur_offset = (sig_offset / 512) * 512; + rel_offset = sig_offset % 512; + rel2_offset = sig2_offset % 512; + //prev_hit = -1; + for (i = 0;; i++) { + ssize_t retval; + + /* Read the signature area */ + retval = tsk_img_read(img_info, cur_offset, + (char *)block, read_size); + if (retval == 0) { + break; + } + else if (retval == -1) { + fprintf(stderr, "error reading bytes %lu\n", + (unsigned long) i); + exit(1); + } + + /* Check the sig */ + if ((block[rel_offset] == sig[0]) && + ((sig_size < 2) || (block[rel_offset + 1] == sig[1])) && + ((sig_size < 3) || (block[rel_offset + 2] == sig[2])) && + ((sig_size < 4) || (block[rel_offset + 3] == sig[3]))) { + if( 0 == sig2[0]){ // Only one signature + if (! hasHits){ + printf("Block: %lu (-)\t", (unsigned long)i); + hasHits = !hasHits; + } + else{ + printf("Block: %lu (+%lu)\t", (unsigned long)i, + (unsigned long)(i - prev_hit)); + } // inner if else + + prev_hit = i; // only update if a hit + TSK_MD5_Init(&md); + TSK_MD5_Update(&md, block, bs); + printSectorMd5(&md); // Prints the md5 hash value of current sector + + + }else{ // We have a signature number two + if ((block[rel2_offset] == sig2[0]) && + ((sig2_size < 2) || (block[rel2_offset + 1] == sig2[1])) && + ((sig2_size < 3) || (block[rel2_offset + 2] == sig2[2])) && + ((sig2_size < 4) || (block[rel2_offset + 3] == sig2[3]))) { + if (!hasHits){ + printf("Block: %lu (-)\t", (unsigned long)i); + hasHits = !hasHits; + } + else{ + printf("Block: %lu (+%lu)\t", (unsigned long)i, + (unsigned long)(i - prev_hit)); + } // inner else if + + prev_hit = i; // only update if a hit + TSK_MD5_Init(&md); + TSK_MD5_Update(&md, block, bs); + printSectorMd5(&md); // Prints the md5 hash value of current sector + // Perhaps count the sectors in volume + //sectors64bitInVolume = (TSK_DADDR_T*)&block[40]; + //printf("Sectors in Volume: %lu\t", (unsigned long)*sectors64bitInVolume); + //sectors64bitInVolume = NULL; // Best practice + } // inner if + + + } // if else + + } + cur_offset += bs; + } + + tsk_img_close(img_info); + exit(0); +}