-
Notifications
You must be signed in to change notification settings - Fork 2
Frankenstien Batch File Subroutine Tool
License
BillyONeal/pevFind
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This is a "frankenstein" batch file helper tool I wrote at the behest of a BleepingComputer.com and TechSupportForum.com contributor known as "sUBs" back when I was in middle/high school. It's preserved here in case people want to look at it but in no way should be considered best practices or anything like that :). pevFind is under the BSL, for it's code. As this file is documentation, the BSL is not appropriate. Therefore, I am releasing this file in the package under the Creative Commons Attribution 3.0 Unported license. For more info, see: http://creativecommons.org/licenses/by/3.0/ Note that pevFind depends on CryptoPP (under Public Domain) for it's hashing functions, InfoZIP (under InfoZip's license) for it's zipping functions, and more generally, Boost, which is also under the BSL. Unit tests depend on Google Mock and Google Test, which are Google's property. Before copying a file of this distribution into a commercial work, be sure to check the license of the file you are working with. Each file has the license and copyright holder listed a the top. :) pevFind <subprogram> <options> pevFind is a combination of an enhanced vFind and other tools. The first argument is the name of the subprogram inside of pevFind you wish to invoke. If no sub-program is specified, it will default to vFind behavior. #### Subprogram: vFind ################################################################## --c --custom Use a custom line output format #1 = SHA-1 #2 = SHA-224 #3 = SHA-256 #4 = SHA-384 #5 = MD5 #6 = SHA-512 #7 = file is PE+ (if yes, then will be 7) #8 = file (8dot3 filename) ## = literal # #a = access time #b = tab #c = creation time #d = company #e = description #f = file #g = version #h = pe header time #i = product name #j = copyright #k = original file name #l = Trademark #m = modified time #n = newline #o = Internal Name #p = PE information 123456 1 Is pe file 2 Has debug info 3 Has valid signature 4 DLL 5 Checksum valid in pe header. Valid will be considered NULL for no checksum, or equal to the calculated checksum. 6 Header time inside the PE file is valid #q = Comments #r = Private Build #s = size #t = types #u = unpadded size #v = PE signature is valid. Prints 7 for valid or - for not. #w = File is protected by windows file protection. 8 for protected, - for not. #x = Special Build #y = Header checksum in hex. Will be ten characters, 0xAAAAAAAA #z = Calculated checksum in hex. Will be ten characters, 0xAAAAAAAA Example: --custom:##c . #m #u #t #F# Will print something like 2008-01-01 17:01 . 2000-08-31 08:00 51200 --a------ C:\WINDOWS\NirCmd.exe The string must start with # and end with # -- this is what marks the bounds of the argument. Therefore, you DON'T NEED QUOTES when using --custom. --debug Displays debugging output. -e Display PE information -- This is the same as --custom:#[#p] #f# --peinfo --enable-filesystem-redirector-64 Enable WOW64's filesystem redirection functions. --fs32 -ea Choose encoding (default) -eo -eu8 -eu16 --encodingACP --encodingOEM --encodingutf8 --encodingutf16 (Note that windows doesn't take anything outside the Basic Multilingual Plane; Therefore this option could also correctly be called UCS-2.) Also note that when output is not redirected to a file, encoding has no effect -- WriteConsole will output visible console characters no matter what the codepage, etc. Windows handles that automaticly. -ex --expand Expand all vFind regex directories to remove ~ pseudo-directories. -f Show the full path, rather than the relative path --full Most of the time this command will have no effect. Whenever you prefix a regex with a path, the search will use that path. I don't like vFind's behavior on this... I don't think relative paths should ever be printed. However, because I intend this to be a drop in replacement, I had to replicate it's behavior. Using -f activates what I believe is the sane way -- it will always print the full path. If not using -f and using relative paths, do not use more than one regex. Such results are undefined. Because without this directive is designed soley to preserve compatability with vFind, and vFind supports only one regex at a time. --filelook Shows more information about the files. Same as --custom#---- #f ---- #nCompany: #d#nFile Description: #e#nFile Version: #g#nProduct Name: #h#nCopyright: #i#nOriginal file name: #j#nFile Size: #u#nCreated Time: #c#nModified Time: #m#n Accessed Time: #a#nMD5: #5#nSHA1: #1# --files[:]["]path["] Example usage: pevFind -tp --filestemp00 Example usage: pevFind -tf --files:temp00 Reads newline delimited list of files from the file specified. When used by itself, this will be the only files listed. vFind regular expressions may be used as filters, but no directory enumeration will be performed when this switch is present. Only files which match the regex will be printed. Example usage: pevFind --peinfo --files"C:\Program Files\temp00" *.exe You may use it more than once: Example usage: pevFind -tp -sd:mdate --files:temp00 --filestemp02 --files"C:\Program Files\temp00" Multiple uses will simply add the files together. -k PEV Kill mode Searches for processes that match PEV's tree, and silently terminates them. -l Use long listing matching vFind's L command. --long This is the same as --custom:##t #s #m #f# -loadline[:]["]file["] Loads commands from file and replaces that in the command line stream. --limit[:]XX Limit count to XX items -m Use short DOS filenames (Same as --custom:##8#) --short -md5[:]["]<<HASH>>["] Tests if file's MD5 matches "hash" -md5list[:]["]File["] -md5elist[:]["]File["] Loads a newline delimited list of MD5s from File to test The e list variant will return true on errors. -nrvf#regex# Creates a non-recursive VFindRegex object. This is for when you want a single regex to have non-recursive properties, as opposed to the -r switch, which changes the entire mode for pevFind. If it makes it any easier to remember, it stands for "Non Recursive Vfind Regex" -n Print summary --summary -output[:]["]<FILE>["] Directs output to <FILE> rather than stdout. -preg#<REGEX># Returns true when the file in question matches the specified perl regex (filename). Note that at least one vFind regex (or a use of the -files directive) is required to limit the scope of the search. -r Disable recursion (Do not search subdirectories) --norecursion -sa Sort ascending by NOTE: Default is UNSORTED! SIZE DATE (defaults to modified) ADATE Access Date MDATE Modified Date CDATE Created Date HDATE PE Header Date NAME INAME Case insensitive name sort. (Over 2x time of standard name sort) -sd Sort descending by SIZE DATE (defaults to modified) ADATE Access Date MDATE Modified Date CDATE Created Date HDATE PE Header Date NAME INAME Case insensitive name sort. (Over 2x time of standard name sort) Multiple sort commands will result in a lower order of sort. For example, to group items by size and then break ties by sorting by date, use something like -sa:size -sa:date. The order obtained should be the order in which the commmands are listed, if the sort commands are separated by "intersting" items, such as AND, OR, XOR, etc, the results of the sort are undefined. When a sort is performed, all entries which match the commandline's criteria will be copied into RAM. The entire sort operation is preformed in RAM, and will take at most n log n comparisons, where n is the number of found results. If running an excessively large sort, such as -tf C:\*, pevFind will not crash -- the standard list container it uses can handle more than four billion records -- but it will require quite a large amount of RAM while running. This should be fine, as this data is allowed to be cached by the Pagefile, but it would be wise to avoid using the sort methods if the results are expected to be exceedingly large. -sha1[:]["]<<HASH>>["] Tests if file's SHA1 matches "hash" -sha1list[:]["]File["] -sha1elist[:]["]File["] Loads a newline delimited list of SHA1s from File to test The elist variant will return true on error. -skip[:]"<path>" Directs pevFind to not enter <path> when calculating results. --tx --timeout Timeout after x number of ms. When this switch is present, pevFind starts a second thread which simply goes to sleep for the required time. After this time, the thread will wake up, and attempt to ask the main thread to cancel the search. The main thread will be given an additional 100ms in which to write the results to the resultant buffer. The errorlevel will be set to 1 in this case -- and the state of the resultant log will be incomplete, but otherwise valid. If the main thread is unable to finish in the additional 100ms, the sub-thread will terminate the program. In this case, errorlevel will be set to 2. -zip"filename" Entire contents of pevFind's file search are zipped into "filename" The shortest relative path which can contain all the files found will be used internally in the zip. SomeVFindRegex Any unknown sequence which has no - will be interpreted as a vFind regex. -t[:][!]... which is a type filter (Same as vfind) a Archive b 64 Bit PE file (PE+ format) c Compressed d Directory e Reparse Point (Such as a symlink on vista) f File g Signature is Valid. Note that this check relies on cryptographic services. h Hidden i Signature Present. Implies P. j PE Header Time is Valid (Valid is indicated as older than both the current system time, as well as the filesystem's modification time for the file) k Checksum Valid l DLL o SFC Protected p Valid PE File pMZ MZ header check valid executable (Possible DOS program) pLE LE format executable pNE NE format executable p2 Any format of executable where at least 2 magic numbers are valid. That is, PE, NE, and LE executables p64 PE+ (64 bit) executables r Read only s System t Temporary v Volume label w Writable -s[:][+|G|-|L|!|=] size above | below | not | equals -s[:]NUMBER-NUMBER size range -d[c|m|a][:][+|-|!|=] Date after / before / not / equals Default is modified, but c will use created and a will use access date. -d[c|m|a][:][G|L] Date more than x days ago or less than x days ago. Default is days (D) but supported suffixes are S(econds), MM(inutes), H(ours), D(ays), W(eeks), M(onths), Y(ears) At this point leap years aren't handled correctly but I don't think that's a major problem. When calculating this date, pevFind will use the UTC time and subtract the specified length from it. It will then pivot on that date as greater than or less than. Note: Date ranges are not supported because - specifies a range, but - s are used in the way dates are specified. Supporting - range would result in ambiguous cases. If you need a date range, use more than one -d argument. If you are using a absolute date which contains a space, you have an alternate method of specifying quotes which is a bit more readable. Instead of "-d+2008-01-02 11:32" you can put the quote after the +, -, !, =, G, or L, like so: -d+"2008-01-02 11:32" I find this quite a bit more readable. not Inverts the following directives and ANDs the following directives or ORs the following directives xor XORs the following directives Brackets -- That is, { } Order of operations: Brackets {} AND OR XOR Everything else Expression = andand AND andand AndAnd = orand OR orand OrAnd = xorand XOR xorand XorAnd = (Anything Else)* or { expression } or NOT expression. pevFind will attempt to be smart about inserting quotes, space, and -s in the right places. (For example, pevfind -ltf vfindregex will work just fine) However, for best results, place a space between each commandline option. A note about UNICODE: pevFind will output data in ACP strings by default. Things are handled as UTF-16 internally, but converted before things are written to the file. Errorlevels: 0 = Completed sucessfully, files found. 1 = Timeout was reached, but system was able to gracefully write results 2 = Timeout was reached, and program force-terminated. Discard the results (May be partially written) 3 = Commandline syntax error 4 = Completed sucessfully, no files were returned. #6### Subprogram: VOLUME ################################################################# This simple argumentless sub-program lists all the fixed drives on the system. Only drives which are FIXED will be enumerated. The GetDriveType function: http://msdn.microsoft.com/en-us/library/aa364939(VS.85).aspx is used to determine this. All other types are filtered. #### Subprogram: CLSID Compressor ####################################################### pevFind.exe CLSID <OPERATON> <INFILE> <OUTFILE> Operations are: C: Compress Compresses the ANSI or Unicode textfile containing CLSIDs into binary format. D: Decompress Decompresses the binary format CLSIDs into an ANSI textfile. (Uses the ACP codepage) DA: Decompress Append Decompresses the binary format CLSIDS into an ANSI textfile, appending to the existing file. #### Subprogram: Time ################################################################### pevFind.exe TIME <UTC> Displays the current time. If the argument UTC is specified, displays time in UTC. #### Subprogram: EXEC ################################################################### pevFind.exe EXEC [/w|/s|/e] <COMMANDLINE> Executes the <COMMANDLINE> following in a hidden window. Use -w or /w or -W or /W to wait for the application to terminate. /S will start the line using the LocalSystem account. /E will start the line using a new environment. This cannot be used with /s. #### Subprogram: UZIP ################################################################### pevFind.exe UZIP [/D] <INFILE> [<OUTDIR>] Unzips <INFILE> into <OUTDIR>. If <OUTDIR> is not in the commandline, the contents of the zip file are printed, rather than the file actually being inflated. Directories are normally stripped from the zipfile (same as unzip.exe -j). To use the zip's directory structure, supply the /D argument. #### Subprogram: MOVEEX ################################################################# pevFind.exe MOVEEX FILE [TARGET] Copies file to target on reboot. If no target specified, file is deleted. #### Subprogram: LINK ################################################################### pevFind.exe LINK FILE TARGET Creates a hard filesystem link linking file to target. File is the already existing file, target is to where the hard link is created. #### Subprogram: PLIST ################################################################## Lists executable paths of all processes on the system. #### Subprogram: CLIST ################################################################## Lists commandlines of all processes on the system. #### Subprogram: SC ##################################################################### CREATE: NAME BINPATH TYPE START [DISPLAYNAME] Note that type and start take numbers, not the friendly names. Look up the values here: http://msdn.microsoft.com/en-us/library/ms682450(VS.85).aspx DELETE: NAME STOP: NAME START: NAME #### Subprogram: RIMPORT ################################################################ pevFind RIMPORT [ LOOSE ] <FILE> Where <FILE> is a regscript to be merged with the registry. If errors or warnings are found in the regscript it will not be merged. Use LOOSE as the first option to force the file to be imported even in presence of errors/warnings. #### Subprogram: DDEV ################################################################### DDEV is a clone of Microsoft's DOSDEV.EXE, described at this location: http://blogs.msdn.com/adioltean/archive/2005/10/04/477164.aspx The switches are exactly the same. There are a few extensions: -N switch: DDD_NO_BROADCAST_SYSTEM flag is used when DefineDosDevice is called. #### Subprogram: LINKRESOLVE ############################################################# Resolves shell link files entered as input. When one file is entered, then the simple path of the file will be printed to the console. If more than one file is entered, then they all will be listed using the format "SOURCE -> TARGET". #### Subprogram: WAIT #################################################################### Waits the specified number of milliseconds.
About
Frankenstien Batch File Subroutine Tool
Resources
License
Stars
Watchers
Forks
Packages 0
No packages published