what does suitable mean
Sponsored Links
Sponsored Links
Secleted [ 0 ] software to compare
Results 1 - 15 of about 2140
Play What I Mean 0.09
Play What I Mean plays media files on a local machine based on a given set of terms found within the filenames. more>>
Play What I Mean project allows a user to, from a single commandline or terminal, enter a string, or list of strings, that represent what he/she wishes to have played by whatsoever media player he chooses, the default being MPlayer, and then having that particular item be found and played.
What this essentially means is that if I were to have a sudden hankering to listen to a particular song or video, lets say Ice Pick by The Pillows, which happens to be the song to a particular music video that I enjoy watching. Under the traditional methods of video viewing I would be stuck with two potential courses of action for playing this particular file:
- Change directories several times to that one folder somewhere that I "know" its in, or
- Point and Click my mouse until I find that same directory and then search through what could be countless files to find it.
Each of these prospective choices have their own inherent difficulties and ire. Using the commandline often requires alot of typing to arrive at the desired directory, often times nestled deep within the tree.
Once there your problems only multiply by the number of files you actually store in your "media" folder, try ls | moreing through a heavily populated folder looking for the name of that file you wanted to play sometime, it isnt too fun and further is a waste of my valuable time.
You may be thinking at this point that the second option, the graphical one, must be easier since its exciting, full of pictures, and frankly novel, I disagree. I may not be the best judge on this matter, seeing as how I cant see out of my right eye however, I feel that scanning through a large folder, or folders, full of files is quite a strain on the vision, and more importantly an unnescesary burden on what should be a simple matter.
Main features:
- Nestable Playlist support
- Multi-string arguments
- Transparent command option passing
- Cache for faster access of frequently played files
- Graphical configure
<<lessWhat this essentially means is that if I were to have a sudden hankering to listen to a particular song or video, lets say Ice Pick by The Pillows, which happens to be the song to a particular music video that I enjoy watching. Under the traditional methods of video viewing I would be stuck with two potential courses of action for playing this particular file:
- Change directories several times to that one folder somewhere that I "know" its in, or
- Point and Click my mouse until I find that same directory and then search through what could be countless files to find it.
Each of these prospective choices have their own inherent difficulties and ire. Using the commandline often requires alot of typing to arrive at the desired directory, often times nestled deep within the tree.
Once there your problems only multiply by the number of files you actually store in your "media" folder, try ls | moreing through a heavily populated folder looking for the name of that file you wanted to play sometime, it isnt too fun and further is a waste of my valuable time.
You may be thinking at this point that the second option, the graphical one, must be easier since its exciting, full of pictures, and frankly novel, I disagree. I may not be the best judge on this matter, seeing as how I cant see out of my right eye however, I feel that scanning through a large folder, or folders, full of files is quite a strain on the vision, and more importantly an unnescesary burden on what should be a simple matter.
Main features:
- Nestable Playlist support
- Multi-string arguments
- Transparent command option passing
- Cache for faster access of frequently played files
- Graphical configure
Download (0.054MB)
Added: 2006-02-01 License: LGPL (GNU Lesser General Public License) Price:
1361 downloads
Whois Ruby 0.3.0
Whois Ruby provides a Ruby class to handle whois requests. more>>
Whois Ruby provides a Ruby class to handle whois requests.
Whois Ruby is a Ruby class to obtain whois request information when provided with an IPv4/IPv6 address or hostname. It sends a whois query to a suitable server.
<<lessWhois Ruby is a Ruby class to obtain whois request information when provided with an IPv4/IPv6 address or hostname. It sends a whois query to a suitable server.
Download (MB)
Added: 2007-04-25 License: GPL (GNU General Public License) Price:
915 downloads
goldenmean 0.5
goldenmean is a GIMP plugin. more>>
goldenmean is a GIMP plugin. Will create a new image. You enter the shortest side, select portrait or landscape orientation and it will automagically calculate the longest side according to the Golden Mean. The plug-in is tested with 1.1.3.
<<less Download (MB)
Added: 2006-09-15 License: GPL (GNU General Public License) Price:
1139 downloads
Test::Simple 0.70
Test::Simple is a Perl module with basic utilities for writing tests. more>>
Test::Simple is a Perl module with basic utilities for writing tests.
SYNOPSIS
use Test::Simple tests => 1;
ok( $foo eq $bar, foo is bar );
** If you are unfamiliar with testing read Test::Tutorial first! **
This is an extremely simple, extremely basic module for writing tests suitable for CPAN modules and other pursuits. If you wish to do more complicated testing, use the Test::More module (a drop-in replacement for this one).
The basic unit of Perl testing is the ok. For each thing you want to test your program will print out an "ok" or "not ok" to indicate pass or fail. You do this with the ok() function (see below).
The only other constraint is you must pre-declare how many tests you plan to run. This is in case something goes horribly wrong during the test and your test program aborts, or skips a test or whatever. You do this like so:
use Test::Simple tests => 23;
You must have a plan.
ok
ok( $foo eq $bar, $name );
ok( $foo eq $bar );
ok() is given an expression (in this case $foo eq $bar). If its true, the test passed. If its false, it didnt. Thats about it.
ok() prints out either "ok" or "not ok" along with a test number (it keeps track of that for you).
# This produces "ok 1 - Hell not yet frozen over" (or not ok)
ok( get_temperature($hell) > 0, Hell not yet frozen over );
If you provide a $name, that will be printed along with the "ok/not ok" to make it easier to find your test when if fails (just search for the name). It also makes it easier for the next guy to understand what your test is for. Its highly recommended you use test names.
All tests are run in scalar context. So this:
ok( @stuff, I have some stuff );
will do what you mean (fail if stuff is empty)
Test::Simple will start by printing number of tests run in the form "1..M" (so "1..5" means youre going to run 5 tests). This strange format lets Test::Harness know how many tests you plan on running in case something goes horribly wrong.
If all your tests passed, Test::Simple will exit with zero (which is normal). If anything failed it will exit with how many failed. If you run less (or more) tests than you planned, the missing (or extras) will be considered failures. If no tests were ever run Test::Simple will throw a warning and exit with 255. If the test died, even after having successfully completed all its tests, it will still be considered a failure and will exit with 255.
So the exit codes are...
0 all tests successful
255 test died or all passed but wrong # of tests run
any other number how many failed (including missing or extras)
If you fail more than 254 tests, it will be reported as 254.
This module is by no means trying to be a complete testing system. Its just to get you started. Once youre off the ground its recommended you look at Test::More.
<<lessSYNOPSIS
use Test::Simple tests => 1;
ok( $foo eq $bar, foo is bar );
** If you are unfamiliar with testing read Test::Tutorial first! **
This is an extremely simple, extremely basic module for writing tests suitable for CPAN modules and other pursuits. If you wish to do more complicated testing, use the Test::More module (a drop-in replacement for this one).
The basic unit of Perl testing is the ok. For each thing you want to test your program will print out an "ok" or "not ok" to indicate pass or fail. You do this with the ok() function (see below).
The only other constraint is you must pre-declare how many tests you plan to run. This is in case something goes horribly wrong during the test and your test program aborts, or skips a test or whatever. You do this like so:
use Test::Simple tests => 23;
You must have a plan.
ok
ok( $foo eq $bar, $name );
ok( $foo eq $bar );
ok() is given an expression (in this case $foo eq $bar). If its true, the test passed. If its false, it didnt. Thats about it.
ok() prints out either "ok" or "not ok" along with a test number (it keeps track of that for you).
# This produces "ok 1 - Hell not yet frozen over" (or not ok)
ok( get_temperature($hell) > 0, Hell not yet frozen over );
If you provide a $name, that will be printed along with the "ok/not ok" to make it easier to find your test when if fails (just search for the name). It also makes it easier for the next guy to understand what your test is for. Its highly recommended you use test names.
All tests are run in scalar context. So this:
ok( @stuff, I have some stuff );
will do what you mean (fail if stuff is empty)
Test::Simple will start by printing number of tests run in the form "1..M" (so "1..5" means youre going to run 5 tests). This strange format lets Test::Harness know how many tests you plan on running in case something goes horribly wrong.
If all your tests passed, Test::Simple will exit with zero (which is normal). If anything failed it will exit with how many failed. If you run less (or more) tests than you planned, the missing (or extras) will be considered failures. If no tests were ever run Test::Simple will throw a warning and exit with 255. If the test died, even after having successfully completed all its tests, it will still be considered a failure and will exit with 255.
So the exit codes are...
0 all tests successful
255 test died or all passed but wrong # of tests run
any other number how many failed (including missing or extras)
If you fail more than 254 tests, it will be reported as 254.
This module is by no means trying to be a complete testing system. Its just to get you started. Once youre off the ground its recommended you look at Test::More.
Download (0.076MB)
Added: 2007-05-04 License: Perl Artistic License Price:
903 downloads
Klaverjas Score 0.2
Klaverjas Score is a program to keep track of the scores during a game of klaverjas (a Dutch card game). more>>
Klaverjas Score is a program to keep track of the scores during a game of klaverjas (a Dutch card game).
The program is meant to replace written score keeping, making accurate score listing much easier. It also keeps track of previous games.
Klaverjas Score is very suitable for small groups of people that play together regularly and that would like to have a record and comparison of their games.
<<lessThe program is meant to replace written score keeping, making accurate score listing much easier. It also keeps track of previous games.
Klaverjas Score is very suitable for small groups of people that play together regularly and that would like to have a record and comparison of their games.
Download (0.13MB)
Added: 2007-05-22 License: GPL (GNU General Public License) Price:
893 downloads
X Interface Monitor 1.8.4
X Interface Monitor monitors any network interface for traffic, load average, and various other statistics. more>>
X Interface Monitor (abbriviated xifmon) monitors any network interface (most suitable, the ppp# interface) for traffic, load average, and various other statistics using purly ioctl() directly to the Linux kernel.
It also has options to run `connect and `disconnect scripts, for dialup modem users who want easy connecting and disconnecting.
<<lessIt also has options to run `connect and `disconnect scripts, for dialup modem users who want easy connecting and disconnecting.
Download (0.49MB)
Added: 2005-10-13 License: GPL (GNU General Public License) Price:
1477 downloads
OPEN BEXI HTML Builder 1.6
OPEN BEXI HTML Builder is a WYSIWYG HTML editor. more>>
OPEN BEXI HTML Builder is a WYSIWYG HTML editor which allows you to create Web pages and generate HTML code from your browser without any HTML knowledge.
It lets you create, update, and remove HTML components. OPEN BEXI HTML Builder is suitable for beginners and experts.
<<lessIt lets you create, update, and remove HTML components. OPEN BEXI HTML Builder is suitable for beginners and experts.
Download (1.8MB)
Added: 2007-04-05 License: GPL (GNU General Public License) Price:
939 downloads
Crucible 1.7.1
Crucible provides a powerful, flexible backend for building automated testing systems. more>>
Crucible provides a powerful, flexible backend for building automated testing systems. Crucible allows for conducting tests on multiple machines (via NFS), including patching, rebuilding, and booting new kernels, libraries, and services.
Configuration and customization can be done through simple config files and bash scripts. It is suitable for performing tests of GUI applications, services, libraries, and kernel patches.
<<lessConfiguration and customization can be done through simple config files and bash scripts. It is suitable for performing tests of GUI applications, services, libraries, and kernel patches.
Download (0.078MB)
Added: 2006-11-11 License: GPL (GNU General Public License) Price:
1078 downloads
wyoGuide 1.0.4
wyoGuide is a guide and a tutorial for developing well-designed cross-platform applications. more>>
wyoGuide is a guide and a tutorial for developing well-designed cross-platform applications. Where possible any guideline is accompanied with sample code. The included fully working demo application applies all these guidelines and is well suited as a starting code base for your own projects.
wyoGuides main goal is to show how to develop the GUI of your application suitable for any platform. Development with these guidelines gives your application a professional set of base functionality. Application applying these guidelines should allow for ease of use, so a user might immediately feel comfortable.
There is no limitation to use these guidelines with other languages or with other frameworks. The only obstacle is you have to write any code yourself until somebody volunteers to submit code samples to wyoGuide. So far there is only code written in C++ using the wxWidgets framework.
wyoGuide is a work in progress which means not all functionality is specified yet. This leaves a lot of room for improvement if you feel so. wyoGuide is thought for helping you but its also thought for you to help others. Any suggestion for improvement is welcomed (see feedback). These guidelines should and hopefully will get to a state where they simply are just usable.
<<lesswyoGuides main goal is to show how to develop the GUI of your application suitable for any platform. Development with these guidelines gives your application a professional set of base functionality. Application applying these guidelines should allow for ease of use, so a user might immediately feel comfortable.
There is no limitation to use these guidelines with other languages or with other frameworks. The only obstacle is you have to write any code yourself until somebody volunteers to submit code samples to wyoGuide. So far there is only code written in C++ using the wxWidgets framework.
wyoGuide is a work in progress which means not all functionality is specified yet. This leaves a lot of room for improvement if you feel so. wyoGuide is thought for helping you but its also thought for you to help others. Any suggestion for improvement is welcomed (see feedback). These guidelines should and hopefully will get to a state where they simply are just usable.
Download (0.13MB)
Added: 2006-02-13 License: Open Software License Price:
1349 downloads
Smart Sign 0.0.1
This project currently provides a set of modules that enable the use of smartcard based authentication. more>>
This project provides software suitable for smartcard based digital signature and both local and remote authentication security services. It can also be used to integrate smart card technology into a working Certification Authority that issues public key certificates for the users through the web.
For example, we provide a module that is known to work with the OpenCA Certification Authority for on-board keypair generation.
Our software works with different kinds of smart cards. Actually we have modules that work with Schlumberger Cyberflex Access 16K and Cryptoflex 16K smart cards and any Java Card 2.1.1 compliant smart card (i.e. both Schlumberger Cyberflex Access 32K and Gemplus GemXpresso 211/PK).
Our software has been developed and tested with Towitokos CHIPDRIVE and Schlumbergers Reflex 72 card readers. It is known to work fine with Gemplus GCR410, GCR400FD, GemPC and Microsystems SCM readers too.
Here are some of its functionalities:
automatic storing of private key and public certificate on the smartcard during the interaction with OpenCA for the "certification process"
use of smartcard to sign e-mail and e-news from within Netscape Messenger
use of smartcard to sign/verify every kind of file with a simple shell command
smartcard-based authentication of local users to a system by means of a public key authentication protocol
smartcard-based authentication of remote users to a system by means of a smart card enabled OpenSSH
interactive command line browsing and invoking of all supported card commands for Cyberflex cards (ISO 7816 compliant and not)
<<lessFor example, we provide a module that is known to work with the OpenCA Certification Authority for on-board keypair generation.
Our software works with different kinds of smart cards. Actually we have modules that work with Schlumberger Cyberflex Access 16K and Cryptoflex 16K smart cards and any Java Card 2.1.1 compliant smart card (i.e. both Schlumberger Cyberflex Access 32K and Gemplus GemXpresso 211/PK).
Our software has been developed and tested with Towitokos CHIPDRIVE and Schlumbergers Reflex 72 card readers. It is known to work fine with Gemplus GCR410, GCR400FD, GemPC and Microsystems SCM readers too.
Here are some of its functionalities:
automatic storing of private key and public certificate on the smartcard during the interaction with OpenCA for the "certification process"
use of smartcard to sign e-mail and e-news from within Netscape Messenger
use of smartcard to sign/verify every kind of file with a simple shell command
smartcard-based authentication of local users to a system by means of a public key authentication protocol
smartcard-based authentication of remote users to a system by means of a smart card enabled OpenSSH
interactive command line browsing and invoking of all supported card commands for Cyberflex cards (ISO 7816 compliant and not)
Download (2.5MB)
Added: 2006-07-13 License: GPL (GNU General Public License) Price:
1252 downloads
LAoE 0.6.03beta3
LAoE is a rich featured graphical audiosample editor, based on multi layers, floating point samples. more>>
LAoE is a rich featured graphical audiosample editor, based on multi layers, floating point samples.
LAoE means Layer-based Audio Editor, and it is a rich featured graphical
audiosample-editor, based on multi-layers, floating-point samples, volume-masks, variable selection-intensity, and many plugins suitable to manipulate sound, such as filtering, retouching, resampling, graphical spectrogram editing by brushes and rectangles, sample-curve editing by freehand-pen and spline and other interpolation curves, effects like reverb, echo, compress, expand, pitch-shift, time-stretch, and much more... And it is free of charge!
The installation of LAoE is very simple:
if not available, install the java runtime environment jre 1.4.0 or higher
extract the file laoe_bin_vx_x_xx.tar.gz into a desired location
linux: run the script laoe to launch LAoE
windows: run the batch laoe.bat to launch LAoE
if the given user starts LAoE for the first time, a .laoe directory is automatically created in the user home directory
read the "tip of the day" to learn how to use LAoE
<<lessLAoE means Layer-based Audio Editor, and it is a rich featured graphical
audiosample-editor, based on multi-layers, floating-point samples, volume-masks, variable selection-intensity, and many plugins suitable to manipulate sound, such as filtering, retouching, resampling, graphical spectrogram editing by brushes and rectangles, sample-curve editing by freehand-pen and spline and other interpolation curves, effects like reverb, echo, compress, expand, pitch-shift, time-stretch, and much more... And it is free of charge!
The installation of LAoE is very simple:
if not available, install the java runtime environment jre 1.4.0 or higher
extract the file laoe_bin_vx_x_xx.tar.gz into a desired location
linux: run the script laoe to launch LAoE
windows: run the batch laoe.bat to launch LAoE
if the given user starts LAoE for the first time, a .laoe directory is automatically created in the user home directory
read the "tip of the day" to learn how to use LAoE
Download (1.3MB)
Added: 2006-07-19 License: GPL (GNU General Public License) Price:
1192 downloads
Math::Telephony::ErlangC 0.03
Math::Telephony::ErlangC is a Perl extension for Erlang C calculations. more>>
Math::Telephony::ErlangC is a Perl extension for Erlang C calculations.
SYNOPSIS
use Math::Telephony::ErlangC;
# Evaluate probability that a service request will have to wait
$wprob = wait_probability($traffic, $servers);
# Probability that the wait time will be less than a fixed maximum
# $mst is the mean service time
$mwprob = maxtime_probability($traffic, $servers, $mst, $maxtime);
# Average time waiting in queue
# $mst is the mean service time
$awtime = average_wait_time($traffic, $servers, $mst);
This mosule contains various functions to deal with Erlang C calculations.
The Erlang C model allows dimensioning the number of servers in a M/M/S/inf/inf model (Kendall notation):
- The input process is Markovian (Poisson in this case)
- The serving process is Markovian (ditto)
- There are S servers
- The wait line is infinite (pure wait, no loss, no renounce)
- The input population is infinite
<<lessSYNOPSIS
use Math::Telephony::ErlangC;
# Evaluate probability that a service request will have to wait
$wprob = wait_probability($traffic, $servers);
# Probability that the wait time will be less than a fixed maximum
# $mst is the mean service time
$mwprob = maxtime_probability($traffic, $servers, $mst, $maxtime);
# Average time waiting in queue
# $mst is the mean service time
$awtime = average_wait_time($traffic, $servers, $mst);
This mosule contains various functions to deal with Erlang C calculations.
The Erlang C model allows dimensioning the number of servers in a M/M/S/inf/inf model (Kendall notation):
- The input process is Markovian (Poisson in this case)
- The serving process is Markovian (ditto)
- There are S servers
- The wait line is infinite (pure wait, no loss, no renounce)
- The input population is infinite
Download (0.008MB)
Added: 2006-12-01 License: Perl Artistic License Price:
1057 downloads
TableDatabase 0.1
TableDatabase project is a small set of programs that treats HTML tables like database tables. more>>
TableDatabase project is a small set of programs that treats HTML tables like database tables.
By "HTML table", I mean any data which is in the form of
< table >
< tr >
< td > column data < /td >
...etc...
< /tr >
< /table >
This software is still in a very early stage, i.e. pre-Alpha.
<<lessBy "HTML table", I mean any data which is in the form of
< table >
< tr >
< td > column data < /td >
...etc...
< /tr >
< /table >
This software is still in a very early stage, i.e. pre-Alpha.
Download (0.013MB)
Added: 2006-11-24 License: GPL (GNU General Public License) Price:
1064 downloads
Perl::Dist::Builder 0.0.5
Perl::Dist::Builder is a Perl module to create win32 Perl installers. more>>
Perl::Dist::Builder is a Perl module to create win32 Perl installers.
SYNOPSIS
use Perl::Dist::Builder;
my $pdb = Perl::Dist::Builder->new( vanilla.yml );
$pdb->remove_image;
$pdb->build_all;
Perl::Dist::Builder is alpha software.
Perl::Dist::Builder uses a configuration file to automatically generate a complete, standalone Perl distribution in a directory suitable for bundling into an executable installer.
Perl::Dist::Builder requires Perl and numerous modules. See Perl::Dist::Bootstrap for details on how to bootstrap a Perl environment suitable for building new Perl distributions.
<<lessSYNOPSIS
use Perl::Dist::Builder;
my $pdb = Perl::Dist::Builder->new( vanilla.yml );
$pdb->remove_image;
$pdb->build_all;
Perl::Dist::Builder is alpha software.
Perl::Dist::Builder uses a configuration file to automatically generate a complete, standalone Perl distribution in a directory suitable for bundling into an executable installer.
Perl::Dist::Builder requires Perl and numerous modules. See Perl::Dist::Bootstrap for details on how to bootstrap a Perl environment suitable for building new Perl distributions.
Download (0.035MB)
Added: 2006-10-18 License: Perl Artistic License Price:
1101 downloads
Fenris 0.07-m2 build 3245
Fenris is a multipurpose tracer, debugger, and code analysis tool. more>>
Fenris is a suite of tools suitable for code analysis, debugging, protocol analysis, reverse engineering, forensics, diagnostics, security audits, vulnerability research and many other purposes.
The main logical components are:
- Fenris: high-level tracer, a tool that detects the logic used in C programs to find and classify functions, logic program structure, calls, buffers, interaction with system and libraries, I/O and many other structures. Fenris is mostly a "whats inside" tracer, as opposed to ltrace or strace, tracers intended to inspect external "symptoms" of the internal program structure. Fenris does not depend on libbfd for accessing ELF structures, and thus is much more robust when dealing with "anti-debugging" code.
- libfnprints and dress: fingerprinting code that can be used to detect library functions embedded inside a static application, even without symbols, to make code analysis simplier; this functionality is both embedded in other components and available as a standalone tool that adds symtab to ELF binaries and can be used with any debugger or disassembler.
- Aegir: an interactive gdb-alike debugger with modular capabilities, instruction by instruction and breakpoint to breakpoint execution, and real-time access to all the goods offered by Fenris, such as high-level information about memory objects or logical code structure.
- nc-aegir: a SoftICE-alike GUI for Aegir, with automatic register, memory and code views, integrated Fenris output, and automatic Fenris control (now under development).
- Ragnarok: a visualisation tool for Fenris that delivers browsable information about many different aspects of program execution - code flow, function calls, memory object life, I/O, etc (to be redesigned using OpenDX or a similar data exploration interface).
- ...and some other companion utilities.
Code analysis is not limited to debugging, quality assurance or security audits. Understanding and handling file formats or communication protocols used by proprietary solutions, a problem that many corporations face when they decide to change their base software platform from one, obsolete or insufficient solution to another, perhaps more suitable, is a task that can consume long months and millions of dollars, especially when any misjudgment or misinterpretation is made.
Because of that, accurate and complete information about existing solutions has to be obtained and evaluated in a timely manner. This project is an attempt to fill the gap between currently used tools by providing a freely available program analysis utility, suitable for black-box code audits, algorithm analysis,
rapid reconnaissance in open-source projects, tracking down bugs, evaluating security subsystems, performing computer forensics, etc.
This program does not automate the process of auditing, and does not favor any particular use. Instead of that, it is intended to be a flexible and universal application that will be a valuable solution for many advanced users. While functional, it is probably not tested sufficiently, there are many issues to fix, several known bugs, some portability problems.
It is being released primarily to get user feedback, comments, and, most important, to request development support, as my resources are very limited, both in terms of available time and development platforms. This project is and will be distributed as a free software, regardless of projected use, accompanied by complete sources, under the terms and
conditions of GPL. Why do you might need this code? Well, there are few reasons...
Human beings are, so far, the best code analysts. Unlike computer programs, they have imagination, ability to build synthetic abstract models, and yet to observe and analyze smallest details at the same time. Functionality is often being described as "doing what the program is supposed to do", security as "doing what the program is supposed to do and
nothing more". While it might sound funny, that is the most general and complete definition we have. In most real-life scenarios only humans really know what are their expectations. Building strict formal models of our expectations does not necessarily mean that models themselves are flawless, and is very time-consuming. Then, even with such models,
validating the code is not always possible, due to its computational complexity. That is why real, live programs (not including some critical developments) do not have such models, do not follow any particular coding guidelines, and cannot be formally examined without human judgment.
Unfortunately, humans are also highly inaccurate and very expensive. They work slowly, and better results can be achieved by hiring better specialists and performing more careful audit. And after all, even the best expert can overlook something in complex, hard to read code. It is almost impossible for human to perform an accurate audit of a large, complex, heterogeneous project written e.g. in C - like Sendmail, BIND, Apache - and provide results in reasonable time.
Things get even worse when humans try to understand algorithms and protocols used by complex closed-source black box solutions. They are simply too slow, and not always able to make accurate guesses about dozens of complicated, conditional parameter passes and function calls before final action is taken.
While it might sound surprising, human-driven code audit is very similar to playing chess - it is a general analysis of possible states, way too many to be implicitly projected by our conscience, a result of experience, knowledge, some unparalleled capabilities of human brain, and luck. It is also a subject to false moves and misjudgment. And there are maybe just a few hundred excellent players.
As for today, freely and commercially available audit tools both use two opposite approaches. First approach tends to minimize human role by automating the review of source code. Source code analysis methods are good in spotting known, repeatable static errors in the code - such as format string vulnerabilities. On the other hand, static tools are not able to trace and analyze all possible execution paths of complex application by
simply looking at its source.
The reason for inability to follow all execution paths lies deeply in the foundations of modern computation theory, and one of its aspects is known as "the halting problem". Speaking in more general terms, in many cases (such as complex software, or even underlying operating system), the amount of medium needed to store all possible states of a complex program exceeds significantly the number of particles in the
universe; and the amount of time needed to generate and process them sequentially is greater than the lifetime of our universe, even having a machine that works with the speed of light.
This might be changed by the development of new computation models, such as quantum computing, or by creating mathematical models that allow us to make such problems non-polynomial - but for now, we are far from this point, and static analysis is restrained in many very serious ways, even though many software suppliers tend to market their products as the ultimate, 100% solutions. Subtle, complex, conditional dynamic errors, such as privilege dropping problems, input-dependent table overflows in C and many other issues usually cannot be detected without generating a completely unacceptable number of false positives.
This kind of software is highly dependent on coding style, and specific notation or development practices might render them less efficient - for example, automated audit utilities can usually detect problems like insecure call to strcpy() function, but will very likely not notice insecure manual copy in do-while
loop. The truth is, for programs that do not have previously built formal models, static auditing utilities look for known, common problems in known, common types of code in a very limited scope.
Another issue is the applicability of this approach to algorithm analysis tasks. In the domain of automated audit tools, this problem is "reduced" to building a formal model of program behavior, or, more appropriately, generating certain predictive statements about the code. While there are very interesting developments in this direction, such as the work of professor Patrick Cousot, it is very difficult to make any detailed, accurate and abstract enough run-time predictions for complex source code that has any immediate value in the analysis of unknown algorithm.
Last but not least, static analysis of sources can be deployed only when the source code is available, which does not have to be the case. This approach is a subject to many shortcomings, tricky assertions, and is a technique of strictly limited capabilities. This is, of course, not to dismiss this method - but to demonstrate that this much favored approach is not flawless and how much it needs to be accompanied with auxiliary methods.
The second approach to be discussed here is based on a dynamic run-time program analysis. This method is usually used to provide the user with information about actual program execution path, letting him make decisions on which path to follow and giving him free will to draw any conclusions and perform all the synthetic reasoning.
This method is
applied to a live binary executed in real-time and is based on monitoring syscalls (strace), libcalls (ltrace) or functions (xtrace); in certain cases, breakpoint debuggers, such as gdb, can be used, however it is usually not feasible to use them to perform anything more than in-depth analysis of a very small portion of program functionality. Usually, such analysis provides a very useful information on what is happening, and this information is provided in uniform, reduced-output form.
A careful auditor can analyze program behavior and find interesting or potentially dangerous run-time conditions. By monitoring how a given application interacts with external world, he (or she) can determine whether some other
conditions can be triggered and eventually explore them by examining sources or re-running the program. Advantages are enormous, as such software enables the auditor to spot very subtle errors in code that "looked good", to observe actual execution, not to try to figure it out, and to find or trace down not obvious or non-schematic vulnerabilities. Run-time trace tools are primarily used for fast reconnaissance tasks and for tracing down notorious errors that are not clearly visible in the source, significantly reducing the time of such operations.
There are, however, serious drawbacks related to this method. First of all, known tracing tools do not provide the complete information. They will detect strcpy() call, but wont report if exactly the same functionality has been implemented from scratch by the author of given program. And, in some cases, the amount of produced data
can be enormous, and because of its completely unstructured character, it makes the observation of overall execution vector almost impossible. Two most important problems are: correlating trace data with actual code, and determining what occurred in the "dark matter" between two lines of trace output.
There are some attempts to combine both approaches - run-time evaluation and source code analysis - such as Purify or many other commercial development support products. Unfortunately, they all feature a limited set of capabilities that need development-side or compilation-time support and are not really suitable for comprehending black box solutions or performing a general analysis. Most of them are targeted for dynamic memory debugging and code / memory profiling.
While not mentioned above, there is also another approach to black-box code - high-level decompiler. However, the complexity of modern compilers makes it very difficult to develop an effective C decompiler or similar utility, and there are only a few (two?) projects available to accomplish it, all of them not able to deal with too complex or optimized code. Finally, there is no guarantee that generated output code will be any help in comprehending the program. For now, this approach remains almost purely theoretical,
and I am not aware of any auditors using it extensively. Why? Well, heres an example of decompiled, mildly optimized code *with* some symbolic information: http://www.backerstreet.com/rec/ex386/hdgO.rec . One may argue it is less readable than cross-referenced disassembly.
This project, Fenris, is named after the monstrous wolf, son of the Norse god Loki. It is not the ultimate answer to all questions, not a solution for all problems, and under no circumstances is intended to replace other tools and techniques. On the other hand, it makes one step forward compared to other tools, trying to support the auditor and to make his work much more effective. This is accomplished by combining a number of techniques, including partial run-time decompiler, stateful analysis, code fingerprinting, I/O analysis, high-level visualization layer, traditional interactive debugger features and run-time code modification capabilities. The goal is to provide a very detailed trace information, and, at the same time, to provide data suitable to build a model of program behavior more quickly and in more convenient way.
Fenris is not supposed to find vulnerabilities or bugs, or to guess algorithms or describe protocols. It is supposed to report and analyze the execution path - detect and describe functional blocks, monitor data flow in the program, marking its lifetime, source, migration and destination, analyze how functions work and what conditions are evaluated.
At the end, it can deliver you an execution model of traced program (or arbitrarily chosen portion of it, if complete trace results in too much noise or irrelevant information), and hint you how this model can change in different conditions. Fenris does not need source codes of analyzed application, but obviously does not keep the auditor from using them.
For many users, Fenris might be a new tool or tools, for others - just a command-line replacement or addition to strace, ltrace, gdb or similar applications (theres a brief list of other nice tools in doc/other.txt). And thats the idea - to build a tool that is simple, reusable, but also precise and smart. It is supposed to have advantages over other tools, but not to be an ultimate replacement or the final solution. Some users can just use very specific features, such as automated function fingerprinting, and use companion tools instead of the main program.
<<lessThe main logical components are:
- Fenris: high-level tracer, a tool that detects the logic used in C programs to find and classify functions, logic program structure, calls, buffers, interaction with system and libraries, I/O and many other structures. Fenris is mostly a "whats inside" tracer, as opposed to ltrace or strace, tracers intended to inspect external "symptoms" of the internal program structure. Fenris does not depend on libbfd for accessing ELF structures, and thus is much more robust when dealing with "anti-debugging" code.
- libfnprints and dress: fingerprinting code that can be used to detect library functions embedded inside a static application, even without symbols, to make code analysis simplier; this functionality is both embedded in other components and available as a standalone tool that adds symtab to ELF binaries and can be used with any debugger or disassembler.
- Aegir: an interactive gdb-alike debugger with modular capabilities, instruction by instruction and breakpoint to breakpoint execution, and real-time access to all the goods offered by Fenris, such as high-level information about memory objects or logical code structure.
- nc-aegir: a SoftICE-alike GUI for Aegir, with automatic register, memory and code views, integrated Fenris output, and automatic Fenris control (now under development).
- Ragnarok: a visualisation tool for Fenris that delivers browsable information about many different aspects of program execution - code flow, function calls, memory object life, I/O, etc (to be redesigned using OpenDX or a similar data exploration interface).
- ...and some other companion utilities.
Code analysis is not limited to debugging, quality assurance or security audits. Understanding and handling file formats or communication protocols used by proprietary solutions, a problem that many corporations face when they decide to change their base software platform from one, obsolete or insufficient solution to another, perhaps more suitable, is a task that can consume long months and millions of dollars, especially when any misjudgment or misinterpretation is made.
Because of that, accurate and complete information about existing solutions has to be obtained and evaluated in a timely manner. This project is an attempt to fill the gap between currently used tools by providing a freely available program analysis utility, suitable for black-box code audits, algorithm analysis,
rapid reconnaissance in open-source projects, tracking down bugs, evaluating security subsystems, performing computer forensics, etc.
This program does not automate the process of auditing, and does not favor any particular use. Instead of that, it is intended to be a flexible and universal application that will be a valuable solution for many advanced users. While functional, it is probably not tested sufficiently, there are many issues to fix, several known bugs, some portability problems.
It is being released primarily to get user feedback, comments, and, most important, to request development support, as my resources are very limited, both in terms of available time and development platforms. This project is and will be distributed as a free software, regardless of projected use, accompanied by complete sources, under the terms and
conditions of GPL. Why do you might need this code? Well, there are few reasons...
Human beings are, so far, the best code analysts. Unlike computer programs, they have imagination, ability to build synthetic abstract models, and yet to observe and analyze smallest details at the same time. Functionality is often being described as "doing what the program is supposed to do", security as "doing what the program is supposed to do and
nothing more". While it might sound funny, that is the most general and complete definition we have. In most real-life scenarios only humans really know what are their expectations. Building strict formal models of our expectations does not necessarily mean that models themselves are flawless, and is very time-consuming. Then, even with such models,
validating the code is not always possible, due to its computational complexity. That is why real, live programs (not including some critical developments) do not have such models, do not follow any particular coding guidelines, and cannot be formally examined without human judgment.
Unfortunately, humans are also highly inaccurate and very expensive. They work slowly, and better results can be achieved by hiring better specialists and performing more careful audit. And after all, even the best expert can overlook something in complex, hard to read code. It is almost impossible for human to perform an accurate audit of a large, complex, heterogeneous project written e.g. in C - like Sendmail, BIND, Apache - and provide results in reasonable time.
Things get even worse when humans try to understand algorithms and protocols used by complex closed-source black box solutions. They are simply too slow, and not always able to make accurate guesses about dozens of complicated, conditional parameter passes and function calls before final action is taken.
While it might sound surprising, human-driven code audit is very similar to playing chess - it is a general analysis of possible states, way too many to be implicitly projected by our conscience, a result of experience, knowledge, some unparalleled capabilities of human brain, and luck. It is also a subject to false moves and misjudgment. And there are maybe just a few hundred excellent players.
As for today, freely and commercially available audit tools both use two opposite approaches. First approach tends to minimize human role by automating the review of source code. Source code analysis methods are good in spotting known, repeatable static errors in the code - such as format string vulnerabilities. On the other hand, static tools are not able to trace and analyze all possible execution paths of complex application by
simply looking at its source.
The reason for inability to follow all execution paths lies deeply in the foundations of modern computation theory, and one of its aspects is known as "the halting problem". Speaking in more general terms, in many cases (such as complex software, or even underlying operating system), the amount of medium needed to store all possible states of a complex program exceeds significantly the number of particles in the
universe; and the amount of time needed to generate and process them sequentially is greater than the lifetime of our universe, even having a machine that works with the speed of light.
This might be changed by the development of new computation models, such as quantum computing, or by creating mathematical models that allow us to make such problems non-polynomial - but for now, we are far from this point, and static analysis is restrained in many very serious ways, even though many software suppliers tend to market their products as the ultimate, 100% solutions. Subtle, complex, conditional dynamic errors, such as privilege dropping problems, input-dependent table overflows in C and many other issues usually cannot be detected without generating a completely unacceptable number of false positives.
This kind of software is highly dependent on coding style, and specific notation or development practices might render them less efficient - for example, automated audit utilities can usually detect problems like insecure call to strcpy() function, but will very likely not notice insecure manual copy in do-while
loop. The truth is, for programs that do not have previously built formal models, static auditing utilities look for known, common problems in known, common types of code in a very limited scope.
Another issue is the applicability of this approach to algorithm analysis tasks. In the domain of automated audit tools, this problem is "reduced" to building a formal model of program behavior, or, more appropriately, generating certain predictive statements about the code. While there are very interesting developments in this direction, such as the work of professor Patrick Cousot, it is very difficult to make any detailed, accurate and abstract enough run-time predictions for complex source code that has any immediate value in the analysis of unknown algorithm.
Last but not least, static analysis of sources can be deployed only when the source code is available, which does not have to be the case. This approach is a subject to many shortcomings, tricky assertions, and is a technique of strictly limited capabilities. This is, of course, not to dismiss this method - but to demonstrate that this much favored approach is not flawless and how much it needs to be accompanied with auxiliary methods.
The second approach to be discussed here is based on a dynamic run-time program analysis. This method is usually used to provide the user with information about actual program execution path, letting him make decisions on which path to follow and giving him free will to draw any conclusions and perform all the synthetic reasoning.
This method is
applied to a live binary executed in real-time and is based on monitoring syscalls (strace), libcalls (ltrace) or functions (xtrace); in certain cases, breakpoint debuggers, such as gdb, can be used, however it is usually not feasible to use them to perform anything more than in-depth analysis of a very small portion of program functionality. Usually, such analysis provides a very useful information on what is happening, and this information is provided in uniform, reduced-output form.
A careful auditor can analyze program behavior and find interesting or potentially dangerous run-time conditions. By monitoring how a given application interacts with external world, he (or she) can determine whether some other
conditions can be triggered and eventually explore them by examining sources or re-running the program. Advantages are enormous, as such software enables the auditor to spot very subtle errors in code that "looked good", to observe actual execution, not to try to figure it out, and to find or trace down not obvious or non-schematic vulnerabilities. Run-time trace tools are primarily used for fast reconnaissance tasks and for tracing down notorious errors that are not clearly visible in the source, significantly reducing the time of such operations.
There are, however, serious drawbacks related to this method. First of all, known tracing tools do not provide the complete information. They will detect strcpy() call, but wont report if exactly the same functionality has been implemented from scratch by the author of given program. And, in some cases, the amount of produced data
can be enormous, and because of its completely unstructured character, it makes the observation of overall execution vector almost impossible. Two most important problems are: correlating trace data with actual code, and determining what occurred in the "dark matter" between two lines of trace output.
There are some attempts to combine both approaches - run-time evaluation and source code analysis - such as Purify or many other commercial development support products. Unfortunately, they all feature a limited set of capabilities that need development-side or compilation-time support and are not really suitable for comprehending black box solutions or performing a general analysis. Most of them are targeted for dynamic memory debugging and code / memory profiling.
While not mentioned above, there is also another approach to black-box code - high-level decompiler. However, the complexity of modern compilers makes it very difficult to develop an effective C decompiler or similar utility, and there are only a few (two?) projects available to accomplish it, all of them not able to deal with too complex or optimized code. Finally, there is no guarantee that generated output code will be any help in comprehending the program. For now, this approach remains almost purely theoretical,
and I am not aware of any auditors using it extensively. Why? Well, heres an example of decompiled, mildly optimized code *with* some symbolic information: http://www.backerstreet.com/rec/ex386/hdgO.rec . One may argue it is less readable than cross-referenced disassembly.
This project, Fenris, is named after the monstrous wolf, son of the Norse god Loki. It is not the ultimate answer to all questions, not a solution for all problems, and under no circumstances is intended to replace other tools and techniques. On the other hand, it makes one step forward compared to other tools, trying to support the auditor and to make his work much more effective. This is accomplished by combining a number of techniques, including partial run-time decompiler, stateful analysis, code fingerprinting, I/O analysis, high-level visualization layer, traditional interactive debugger features and run-time code modification capabilities. The goal is to provide a very detailed trace information, and, at the same time, to provide data suitable to build a model of program behavior more quickly and in more convenient way.
Fenris is not supposed to find vulnerabilities or bugs, or to guess algorithms or describe protocols. It is supposed to report and analyze the execution path - detect and describe functional blocks, monitor data flow in the program, marking its lifetime, source, migration and destination, analyze how functions work and what conditions are evaluated.
At the end, it can deliver you an execution model of traced program (or arbitrarily chosen portion of it, if complete trace results in too much noise or irrelevant information), and hint you how this model can change in different conditions. Fenris does not need source codes of analyzed application, but obviously does not keep the auditor from using them.
For many users, Fenris might be a new tool or tools, for others - just a command-line replacement or addition to strace, ltrace, gdb or similar applications (theres a brief list of other nice tools in doc/other.txt). And thats the idea - to build a tool that is simple, reusable, but also precise and smart. It is supposed to have advantages over other tools, but not to be an ultimate replacement or the final solution. Some users can just use very specific features, such as automated function fingerprinting, and use companion tools instead of the main program.
Download (1.1MB)
Added: 2005-04-18 License: GPL (GNU General Public License) Price:
1657 downloads
Secleted [ 0 ] software to compare
Copyright Notice:
Software piracy is theft, Using crack, password, serial numbers, registration codes, key generators is illegal and prevent future software development. The above what does suitable mean search only lists software in full, demo and trial versions for free download. Download links are directly from our mirror sites or publisher sites, torrent files or links from rapidshare.com, yousendit.com or megaupload.com are not allowed