debuggers
Sponsored Links
Sponsored Links
Secleted [ 0 ] software to compare
Results 1 - 15 of about 134
DSP5600x disassembly library 1.1
DSP5600x disassembly library is a code disassembly library for the Motorola DSP5600x. more>>
lib5600x is a library implementing Motorola DSP5600x disassembler. Its an ANSI C link library that should be useful for people writing debuggers, memory monitors etc for DSP5600x chips.
Usage
1. First you call two initialization functions in the library. This step is mandatory:
make_masks();
make_masks2();
You pass nothing and check for no results -- these functions are guaranteed to succeed.
2. Now you have to allocate memory for a structure that will be used for passing data to/from the library. You may do that on the stack
struct disasm_data dis, *d = &dis;
Yes, the pointer will be useful, too. The disasm_data structure is defined in 5600x_disasm.h file. Lets take a closer look:
#define LINE_SIZE 256
struct disasm_data
{
unsigned char *memory;
char line_buf[LINE_SIZE];
char *line_ptr;
char words;
};
First member -- "memory" -- should point to the opcode you want disassembled. IMPORTANT! The library expects it to be a 24-bit word, so if your assembler creates 32-bit words, youll have to make a simple conversion. Take a look at test.c to see how it is done. Whats more, the library may wish to evaluate two words at a time, so you have to account for that -- this is also demonstrated in the example source.
3. After properly setting up disasm_data struct (i.e. "memory" pointer), you call following function:
int disassemble_opcode(struct disasm_data *);
This function takes pointer to the struct youve just prepared as an argument. When it returns, disasm_data structs "line_buf" member contains the disassembled opcode as a string of ASCII characters. "line_ptr" should be of no interest to you (it is merely a internal variable) and "words" holds the number of 24-bit words you should advance your memory pointer by. This variable is also available as a return value of above function. Again, I
shall refer you to the example source.
4. Repeat step 3 until you run out of code to disassemble.
Testing
First, check out the makefile and make sure it contains proper flags and defines for your architecture. Big endian users should add -DBIGENDIAN to CFLAGS (Id appreciate if someone created Autoconf script to avoid such tricks). Following that, type
make
./test example_dsp_binary
and compare the output (visually) with example.a56 which is a source code I used to create example_dsp_binary and which contains all instructions and addressing modes described in DSP56000/DSP56001 Digital Signal Processor Users Manual. You can also diff your output and supplied example.out file to check if there are any differences (there should be none).
<<lessUsage
1. First you call two initialization functions in the library. This step is mandatory:
make_masks();
make_masks2();
You pass nothing and check for no results -- these functions are guaranteed to succeed.
2. Now you have to allocate memory for a structure that will be used for passing data to/from the library. You may do that on the stack
struct disasm_data dis, *d = &dis;
Yes, the pointer will be useful, too. The disasm_data structure is defined in 5600x_disasm.h file. Lets take a closer look:
#define LINE_SIZE 256
struct disasm_data
{
unsigned char *memory;
char line_buf[LINE_SIZE];
char *line_ptr;
char words;
};
First member -- "memory" -- should point to the opcode you want disassembled. IMPORTANT! The library expects it to be a 24-bit word, so if your assembler creates 32-bit words, youll have to make a simple conversion. Take a look at test.c to see how it is done. Whats more, the library may wish to evaluate two words at a time, so you have to account for that -- this is also demonstrated in the example source.
3. After properly setting up disasm_data struct (i.e. "memory" pointer), you call following function:
int disassemble_opcode(struct disasm_data *);
This function takes pointer to the struct youve just prepared as an argument. When it returns, disasm_data structs "line_buf" member contains the disassembled opcode as a string of ASCII characters. "line_ptr" should be of no interest to you (it is merely a internal variable) and "words" holds the number of 24-bit words you should advance your memory pointer by. This variable is also available as a return value of above function. Again, I
shall refer you to the example source.
4. Repeat step 3 until you run out of code to disassemble.
Testing
First, check out the makefile and make sure it contains proper flags and defines for your architecture. Big endian users should add -DBIGENDIAN to CFLAGS (Id appreciate if someone created Autoconf script to avoid such tricks). Following that, type
make
./test example_dsp_binary
and compare the output (visually) with example.a56 which is a source code I used to create example_dsp_binary and which contains all instructions and addressing modes described in DSP56000/DSP56001 Digital Signal Processor Users Manual. You can also diff your output and supplied example.out file to check if there are any differences (there should be none).
Download (0.012MB)
Added: 2005-03-07 License: BSD License Price:
1693 downloads
Evolvica 0.6.3.2
Evolvica is a Java evolutionary computation framework. more>>
Evolvica is a Java Framework for evolutionary algorithms. It is the successor of eaLib, which has been developed at the Department of Electronic Circuits & Systems of the Technical University of Ilmenau, Germany from 2000 to 2002. The development on eaLib has been stopped and focuses now on Evolvica. However, eaLib is still available here.
There were quite some things in eaLib that were too complicated to be used. Therefore efforts have been undertaken to simplify the eaLib structure while preserving its flexibility. In addition the internal structure of genetic operators have changed in a way to support a creation of algorithms via a graphical user interface.
The goal for the future is to provide a complete development environment for evolutionary algorithms, including visual algorithm composer, Java editor, debugger and visual result analysis. This would be quite a lot of work but fortunately there is no need to invent the wheel for the 733rd time. Evolvica is based on the Eclipse Platform and uses the foundations provided by this great toolkit. All the Java features (source code editor, debugger and so on) originate from the Eclipse project.
Please note that the current state of the project is still classified as experimental. The version that you can download does not have production quality, it is a functional prototype that is still in some kind of an alpha-state. Several things are working, several others may not as expected. But you are free to try and find out for yourself and you are invited to share your experiences with others on the Evolvica user forum.
<<lessThere were quite some things in eaLib that were too complicated to be used. Therefore efforts have been undertaken to simplify the eaLib structure while preserving its flexibility. In addition the internal structure of genetic operators have changed in a way to support a creation of algorithms via a graphical user interface.
The goal for the future is to provide a complete development environment for evolutionary algorithms, including visual algorithm composer, Java editor, debugger and visual result analysis. This would be quite a lot of work but fortunately there is no need to invent the wheel for the 733rd time. Evolvica is based on the Eclipse Platform and uses the foundations provided by this great toolkit. All the Java features (source code editor, debugger and so on) originate from the Eclipse project.
Please note that the current state of the project is still classified as experimental. The version that you can download does not have production quality, it is a functional prototype that is still in some kind of an alpha-state. Several things are working, several others may not as expected. But you are free to try and find out for yourself and you are invited to share your experiences with others on the Evolvica user forum.
Download (31.3MB)
Added: 2005-04-01 License: Artistic License Price:
1673 downloads
Assembly Language Debugger 0.1.7
Assembly Language Debugger is an assembly language debugger. more>>
The Assembly Language Debugger is a tool for debugging executable programs at the assembly level. It currently runs only on Intel x86 platforms.
Operating systems supported: Linux, FreeBSD, NetBSD, OpenBSD
Main features:
- Step into / Step over
- Breakpoints
- Powerful ELF format interpreter
- Easy memory manipulation
- Disassembler for intel x86 instructions
- Easy register manipulation
Enhancements:
- added commands: display, ldisplay, undisplay to dump specified memory locations after each single step (thanks to ziberpunk < ziberpunk =at= ziberghetto dhis org > for the suggestion and code)
- all Makefiles are now based on automake in the hopes that this will fix some of the problems integrating ald into the *BSD ports systems
- bug fix where a pointer wasnt set to NULL after clearing program arguments with the "set args" command
- this is related to the previous feature: if the effective address lies inside a symbol/function, the corresponding symbol is now displayed
- for CALL and JMP instructions, exact target/effective addresses are now computed (code for this was contributed by Samuel Falvo II < kc5tja =at= arrl net >)
- upgraded all configure scripts to autoconf v2.59
<<lessOperating systems supported: Linux, FreeBSD, NetBSD, OpenBSD
Main features:
- Step into / Step over
- Breakpoints
- Powerful ELF format interpreter
- Easy memory manipulation
- Disassembler for intel x86 instructions
- Easy register manipulation
Enhancements:
- added commands: display, ldisplay, undisplay to dump specified memory locations after each single step (thanks to ziberpunk < ziberpunk =at= ziberghetto dhis org > for the suggestion and code)
- all Makefiles are now based on automake in the hopes that this will fix some of the problems integrating ald into the *BSD ports systems
- bug fix where a pointer wasnt set to NULL after clearing program arguments with the "set args" command
- this is related to the previous feature: if the effective address lies inside a symbol/function, the corresponding symbol is now displayed
- for CALL and JMP instructions, exact target/effective addresses are now computed (code for this was contributed by Samuel Falvo II < kc5tja =at= arrl net >)
- upgraded all configure scripts to autoconf v2.59
Download (0.65MB)
Added: 2005-04-18 License: GPL (GNU General Public License) Price:
1671 downloads
Z80-ASM
Z80-ASM is a Z80 assembler and debugger. more>>
Z80-ASM is a compiler/assembler and monitor(including disassembler) for the Z80 CPU. It runs under Linux (probably also under other UNIX-flavours) and DO$ (DJGPP version 2.03 checked). Its written in C and source-code availible!
Each Z80-ASM package contains a compiler for the Z80 assembling language and a monitor including an interactive debugger. Compiler is a two-pass one, which knows all documented Z80 instructions. It has labels, comments and since 2.1 can even evaluate constant arithmetic expressions.
Debugger is interactive, it shows content of all registers, memory, stack, program. You can trace program, trace it step by step, modify program, registers and content of memory, load and save parts of memory.
Installation:
Everything you need to run the Z80-ASM is Linux or DO$ system (it should also work on other Unixes) and GCC/DJGPP compiler.
To install the Z80-ASM you must do following:
- download and unpack the archive
- cd to the just created z80-asm directory
- read the INSTALL file
- according to instructions youve read install the Z80-ASM :) but typically a make will do what you want.
<<lessEach Z80-ASM package contains a compiler for the Z80 assembling language and a monitor including an interactive debugger. Compiler is a two-pass one, which knows all documented Z80 instructions. It has labels, comments and since 2.1 can even evaluate constant arithmetic expressions.
Debugger is interactive, it shows content of all registers, memory, stack, program. You can trace program, trace it step by step, modify program, registers and content of memory, load and save parts of memory.
Installation:
Everything you need to run the Z80-ASM is Linux or DO$ system (it should also work on other Unixes) and GCC/DJGPP compiler.
To install the Z80-ASM you must do following:
- download and unpack the archive
- cd to the just created z80-asm directory
- read the INSTALL file
- according to instructions youve read install the Z80-ASM :) but typically a make will do what you want.
Download (0.47MB)
Added: 2005-04-22 License: GPL (GNU General Public License) Price:
1664 downloads
Data Display Debugger 3.3.11
Data Display Debugger is a common graphical user interface for GDB, DBX and XDB. more>>
GNU DDD is a graphical front-end for command-line debuggers such as GDB, DBX, WDB, Ladebug, JDB, XDB, the Perl debugger, the bash debugger, or the Python debugger.
Besides "usual front-end features such as viewing source texts, DDD has become famous through its interactive graphical data display, where data structures are displayed as graphs.
<<lessBesides "usual front-end features such as viewing source texts, DDD has become famous through its interactive graphical data display, where data structures are displayed as graphs.
Download (7.3MB)
Added: 2005-04-18 License: GPL (GNU General Public License) Price:
1661 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
Brainfuck Debugger 0.2.5
Brainfuck Debugger is a GUI IDE/debugger for developing Brainfuck programs. more>>
Brainfuck Debugger is designed to encourage the development of Brainfuck programs by providing an IDE with debugging features.
One of the goals of this project is to provide an environment for people who want to experiment with the fundimental processes of computers, but not get blown away with complicated syntax issues.
<<lessOne of the goals of this project is to provide an environment for people who want to experiment with the fundimental processes of computers, but not get blown away with complicated syntax issues.
Download (3.6MB)
Added: 2005-04-18 License: GPL (GNU General Public License) Price:
1655 downloads
wsdebug 0.1
wsdebug is a debugger for the Whitespace programming language. more>>
wsdebug is a debugger for the more or less famous whitespace programming language, coming along with a rather fast interpreter (wsi).
Most programming languages like C or Perl do not care for white space characters (like tab, space or newline/linefeed). The whitespace programming language works just the other way round, dont care for any character but those white space ones.
On the whole its just another geeky language like Brainfuck and others, however more adicting.
If youve written a whole lot of instructions youll probably reach the point, where you get lost. Then just put your script into wsdebug and step through your bunch of whitespace instructions and watch how each command manipulates the stack (or heap).
<<lessMost programming languages like C or Perl do not care for white space characters (like tab, space or newline/linefeed). The whitespace programming language works just the other way round, dont care for any character but those white space ones.
On the whole its just another geeky language like Brainfuck and others, however more adicting.
If youve written a whole lot of instructions youll probably reach the point, where you get lost. Then just put your script into wsdebug and step through your bunch of whitespace instructions and watch how each command manipulates the stack (or heap).
Download (0.27MB)
Added: 2005-04-14 License: GPL (GNU General Public License) Price:
1654 downloads
UPS 3.38 beta2
UPS is a light C and C++ debugger under X11. more>>
Ups is a source level C,C++ and Fortran debugger that runs under X11. Currently supported systems are FreeBSD and GNU/Linux on Intel x86 and Solaris on SPARC.
On these systems it runs native; it is not a front-end to GNU gdb. An ANSI C interpreter is included; this is built in to ups to provide conditional debugging and can also be built as a seperate program.
If you are using some other operating system or processor then please see the systems information as ups has in the past been ported to a variety of computers, and may include code for your system.
Ups was written by Mark Russell of the Computer Science department at the University of Kent at Canterbury, and was originally part of the Kent Software Tools suite.
<<lessOn these systems it runs native; it is not a front-end to GNU gdb. An ANSI C interpreter is included; this is built in to ups to provide conditional debugging and can also be built as a seperate program.
If you are using some other operating system or processor then please see the systems information as ups has in the past been ported to a variety of computers, and may include code for your system.
Ups was written by Mark Russell of the Computer Science department at the University of Kent at Canterbury, and was originally part of the Kent Software Tools suite.
Download (2.5MB)
Added: 2005-04-18 License: Free To Use But Restricted Price:
1652 downloads
DBG 2.11.32
DBG is a PHP debugger and profiler for PHP scripts. more>>
DBG is a a full-featured php debugger, an interactive tool that helps you debugging php scripts.
It works on a production and/or development WEB server and allows you debug your scripts locally or remotely, from an IDE or console.
Main features:
- native debugger. Works transparently, neither script nor PHP engine modifications required.
- server part (dbg module) runs on all platforms where PHP itself runs.
- works transparently across the global network as well as locally.
- JIT. When enabled can start debugging Just In Time of error occurs.
- supports back-tracking, e.g. displays a list of all procedures with their local variables, the current execution position reached from. Also you can watch local variables or function parameters in all active and nested scopes.
- certainly, you can execute script in the debugger step by step (step-in, step-out, step-over...), evaluate any valid php expressions or complex variables, modify values of any variables on the fly and create any new ones. Breakpoints can be conditional, they also may skip entered number of hits.
- has embedded profiler, so now its easy to find out a bottleneck in the scripts.
- allows multiple debugger processes running simultaneously.
- compatible with php-4.0.6 and higher.
- has open COM interfaces for integration with win32-based 3rd party IDEs.
- Commercial version of DBG (2.16.x) is available with commercial version of PHPEd PHP IDE only, see review for details.
- Linux, BSD, SunOs, MacOs and Win32 platoforms are supported.
- Free version (2.11.x) is available on this site. It works with PHP Edit, PHP Coder and some other IDEs.
- Free dbg front-end (dbg-cli) for Linux/Unix can be used to debug scripts either directly or under DDD 3.3.9 (GNU debugger). Also see RedHat 7.3, YellowDog and Mandrake distributions at RPM Find site.
Enhancements:
- All php versions from 4.0.6 up to 4.3.10 and from 5.0.0 up to 5.0.3 are supported.
- Support for HARDENED php v0.2.6 added (4.3.9h, 4.3.10h and 5.0.3h).
- Command line interface (dbg-cli) improved.
- Tested with php 4.0.6, 4.1.0-4.1.2, 4.2.0-4.2.3, 4.3.0-4.3.10, 5.0.0-5.0.3.
<<lessIt works on a production and/or development WEB server and allows you debug your scripts locally or remotely, from an IDE or console.
Main features:
- native debugger. Works transparently, neither script nor PHP engine modifications required.
- server part (dbg module) runs on all platforms where PHP itself runs.
- works transparently across the global network as well as locally.
- JIT. When enabled can start debugging Just In Time of error occurs.
- supports back-tracking, e.g. displays a list of all procedures with their local variables, the current execution position reached from. Also you can watch local variables or function parameters in all active and nested scopes.
- certainly, you can execute script in the debugger step by step (step-in, step-out, step-over...), evaluate any valid php expressions or complex variables, modify values of any variables on the fly and create any new ones. Breakpoints can be conditional, they also may skip entered number of hits.
- has embedded profiler, so now its easy to find out a bottleneck in the scripts.
- allows multiple debugger processes running simultaneously.
- compatible with php-4.0.6 and higher.
- has open COM interfaces for integration with win32-based 3rd party IDEs.
- Commercial version of DBG (2.16.x) is available with commercial version of PHPEd PHP IDE only, see review for details.
- Linux, BSD, SunOs, MacOs and Win32 platoforms are supported.
- Free version (2.11.x) is available on this site. It works with PHP Edit, PHP Coder and some other IDEs.
- Free dbg front-end (dbg-cli) for Linux/Unix can be used to debug scripts either directly or under DDD 3.3.9 (GNU debugger). Also see RedHat 7.3, YellowDog and Mandrake distributions at RPM Find site.
Enhancements:
- All php versions from 4.0.6 up to 4.3.10 and from 5.0.0 up to 5.0.3 are supported.
- Support for HARDENED php v0.2.6 added (4.3.9h, 4.3.10h and 5.0.3h).
- Command line interface (dbg-cli) improved.
- Tested with php 4.0.6, 4.1.0-4.1.2, 4.2.0-4.2.3, 4.3.0-4.3.10, 5.0.0-5.0.3.
Download (0.039MB)
Added: 2005-04-18 License: GPL (GNU General Public License) Price:
1650 downloads
X Language 0.7.1
X Language is a programming language. more>>
X Language is a new multi-syntax programming including a portable set of APIs to create console or graphical applications runnable on many platforms (UNIX/X11, Win32, ...). X Language comes with an interpreter, a compiler and a debugger.
X Language is publicly available under the GPL.
Installation
- tar -xzf xlang-0.7.1.tar.gz
- cd xlang-0.7.1
- ./configure
- make
- make install
- ./xlc calc.xc
Enhancements:
- Adding LANG/MATH specifications
- Adding SYS (basic) specifications
- Start implementing the SCR API
<<lessX Language is publicly available under the GPL.
Installation
- tar -xzf xlang-0.7.1.tar.gz
- cd xlang-0.7.1
- ./configure
- make
- make install
- ./xlc calc.xc
Enhancements:
- Adding LANG/MATH specifications
- Adding SYS (basic) specifications
- Start implementing the SCR API
Download (0.35MB)
Added: 2005-04-22 License: GPL (GNU General Public License) Price:
1646 downloads
Turck MMCache for PHP 2.4.6
Turck MMCache for PHP is a free PHP accelerator, optimizer, encoder, and dynamic content cache. more>>
Turck MMCache is a free open source PHP accelerator, optimizer, encoder and dynamic content cache for PHP. It increases performance of PHP scripts by caching them in compiled state, so that the overhead of compiling is almost completely eliminated.
Also it uses some optimizations to speed up execution of PHP scripts. Turck MMCache typically reduces server load and increases the speed of your PHP code by 1-10 times.
Turck MMCache stores compiled PHP scripts in shared memory and execute code directly from it. It creates locks only for short time while search compiled PHP script in the cache, so one script can be executed simultaneously by several engines.
MM shared memory library (http://www.engelschall.com/sw/mm/) was used by Turck MMCache before version 2.3.13 for management of shared memory and locking. Files those cant fit in shared memory are cached on disk only.
Turck MMCache was first launched in 2001 to speed up the www.guestbooks4all.com service. It has been tested under PHP 4.1.0-4.3.3 under GNU/Linux and Windows with Apache 1,3 and 2.0. Patches for ports to other OSs and PHP versions are welcome
Since version 2.3.10, Turck MMCache contains a PHP encoder and loader. You can encode PHP scripts using encoder.php in order to distribute them without sources. Encoded files can be run on any site which runs PHP with Turck MMCache 2.3.10 or above.
The sources of encoded scripts cant be restored because they are stored in a compiled form and the encoded version doesnt contain the source. Of course, some internals of the scripts can be restored with different reverse engineering tools (disassemblers, debuggers, etc), but it is not trivial.
Since version 2.3.15, Turck MMCache is compatible with Zend Optimizers loader. Zend Optimizer must be installed after Turck MMCache in php.ini. If you dont use scripts encoded with Zend Encoder then we do not recommend you install Zend Optimizer with Turck MMCache.
Turck MMCache does not work in CGI mode.
Requierments:
- apache 1.3
- mod_php 4.1
- autoconf
- automake
- libtool
- m4
<<lessAlso it uses some optimizations to speed up execution of PHP scripts. Turck MMCache typically reduces server load and increases the speed of your PHP code by 1-10 times.
Turck MMCache stores compiled PHP scripts in shared memory and execute code directly from it. It creates locks only for short time while search compiled PHP script in the cache, so one script can be executed simultaneously by several engines.
MM shared memory library (http://www.engelschall.com/sw/mm/) was used by Turck MMCache before version 2.3.13 for management of shared memory and locking. Files those cant fit in shared memory are cached on disk only.
Turck MMCache was first launched in 2001 to speed up the www.guestbooks4all.com service. It has been tested under PHP 4.1.0-4.3.3 under GNU/Linux and Windows with Apache 1,3 and 2.0. Patches for ports to other OSs and PHP versions are welcome
Since version 2.3.10, Turck MMCache contains a PHP encoder and loader. You can encode PHP scripts using encoder.php in order to distribute them without sources. Encoded files can be run on any site which runs PHP with Turck MMCache 2.3.10 or above.
The sources of encoded scripts cant be restored because they are stored in a compiled form and the encoded version doesnt contain the source. Of course, some internals of the scripts can be restored with different reverse engineering tools (disassemblers, debuggers, etc), but it is not trivial.
Since version 2.3.15, Turck MMCache is compatible with Zend Optimizers loader. Zend Optimizer must be installed after Turck MMCache in php.ini. If you dont use scripts encoded with Zend Encoder then we do not recommend you install Zend Optimizer with Turck MMCache.
Turck MMCache does not work in CGI mode.
Requierments:
- apache 1.3
- mod_php 4.1
- autoconf
- automake
- libtool
- m4
Download (0.11MB)
Added: 2005-05-05 License: GPL (GNU General Public License) Price:
1637 downloads
Etlinux 1.2.1
Etlinux is a complete Linux-based system designed to run on very small industrial computers. more>>
etLinux is an embedded linux distribution, intended for PC/104 boards with flash disk (like M-Systems DiskOnChip) with very little memory and disk space (starting from 2Mb of RAM and 2Mb of flash disk).
Subsequently well refer to the development platform as the "host system" and to the target machine (the one on which etLinux will run) ad the "target system".
Etlinux is a complete Linux-based system designed to run on very small industrial computers. It has been designed to be small, modular, flexible and complete.
Its reduced memory and disk requirements make it ideal for all cost-sensitive situations, while at the same time its modularity and completeness give the full power of unix even for embedded applications.
Etlinux is ideal in all embedded system applications where advanced unix facilities are a must: preemptive multitasking, multithreading, memory protection, fast I/O, enhanced reliability, speed, ...
Moreover, source code availability is a guarantee for the longevity of Etlinux based products.
But perhaps the greatest advantage over competitors is given by the enormous and proven availability of advanced development tools, documentation and sources, giving an effective edge to the developer and reducing the time to market.
In fact the availability of constantly updated quality C/C++ compilers, debuggers, libraries, interpreted languages, and other tools is the most compelling reason to switch away from old proprietary embedded development environments.
Main features:
- embedded cgi-capable WEB server
- a telnet server
- an email server, with the ability to execute commands sent by email from a remote site
- CORBA support
- easy-to-use remote file management
- the powerful Tcl scripting language
- a flexible package selection scheme, allowing an easy customization of the system
- source code available for every component
<<lessSubsequently well refer to the development platform as the "host system" and to the target machine (the one on which etLinux will run) ad the "target system".
Etlinux is a complete Linux-based system designed to run on very small industrial computers. It has been designed to be small, modular, flexible and complete.
Its reduced memory and disk requirements make it ideal for all cost-sensitive situations, while at the same time its modularity and completeness give the full power of unix even for embedded applications.
Etlinux is ideal in all embedded system applications where advanced unix facilities are a must: preemptive multitasking, multithreading, memory protection, fast I/O, enhanced reliability, speed, ...
Moreover, source code availability is a guarantee for the longevity of Etlinux based products.
But perhaps the greatest advantage over competitors is given by the enormous and proven availability of advanced development tools, documentation and sources, giving an effective edge to the developer and reducing the time to market.
In fact the availability of constantly updated quality C/C++ compilers, debuggers, libraries, interpreted languages, and other tools is the most compelling reason to switch away from old proprietary embedded development environments.
Main features:
- embedded cgi-capable WEB server
- a telnet server
- an email server, with the ability to execute commands sent by email from a remote site
- CORBA support
- easy-to-use remote file management
- the powerful Tcl scripting language
- a flexible package selection scheme, allowing an easy customization of the system
- source code available for every component
Download (5.0MB)
Added: 2005-05-11 License: GPL (GNU General Public License) Price:
1629 downloads
FSME 1.0.2
FSME is a graphical tool to develop general finite state machines. more>>
FSME is a graphical tool to develop general finite state machines.
Developed automatas are stored in files simular to Qt Designer. Theyre converted to C++ in the same way as UIC does.
You can navigate FSME by selecting element in the tree, or clicking diagram elements.
The Object Editor is context sensitive, displaying a form appropriate to the element selected.
It includes 3 packages:
- FSME - a graphical FSM editor
- FSMC - source code generator (like UIC)
- FSMD - debugger/tracer
Enhancements:
- Fixed bug with loop arrows. Now loop arrow has at least two control points.
- Added true and false constants.
- Added Apply button in the new state editor, which displays help message how to live correctly
- pyfsmc writes file encoding to hint Python about unicode strings encoding
- preliminary print support
- minor changes to compile on gcc 3.4
<<lessDeveloped automatas are stored in files simular to Qt Designer. Theyre converted to C++ in the same way as UIC does.
You can navigate FSME by selecting element in the tree, or clicking diagram elements.
The Object Editor is context sensitive, displaying a form appropriate to the element selected.
It includes 3 packages:
- FSME - a graphical FSM editor
- FSMC - source code generator (like UIC)
- FSMD - debugger/tracer
Enhancements:
- Fixed bug with loop arrows. Now loop arrow has at least two control points.
- Added true and false constants.
- Added Apply button in the new state editor, which displays help message how to live correctly
- pyfsmc writes file encoding to hint Python about unicode strings encoding
- preliminary print support
- minor changes to compile on gcc 3.4
Download (0.17MB)
Added: 2005-06-13 License: GPL (GNU General Public License) Price:
1600 downloads

FireBug 1.3.3 / 1.4.0 Beta 5
Explore the far corners of the DOM by keyboard or mouse. more>> FireBug 1.3.3 / 1.4.0 Beta 5 is professionally designed as a Firefox extension, allowing you to explore the far corners of the DOM by keyboard or mouse. All of the tools you need to poke, prod, and monitor your JavaScript, CSS, HTML and Ajax are brought together into one seamless experience, including a debugger, an error console, command line, and a variety of fun inspectors.
Major Features:
- JavaScript debugger for stepping through code one line at a time
- Status bar icon shows you when there is an error in a web page
- A console that shows errors from JavaScript and CSS
- Log messages from JavaScript in your web page to the console (bye bye "alert debugging")
- An JavaScript command line (no more "javascript:" in the URL bar)
- Spy on XMLHttpRequest traffic
- Inspect HTML source, computed style, events, layout and the DOM
Enhancements:
- Issue 1763: JavaScript exceptions on some pages [nsIStreamListener.onDataAvailable] and [nsIStreamListener.onStartRequest]
- Remove dubious script tooltip
- Issue 1282: Editing boolean var in watch panel changes it to a string
Requirements: Mozilla Firefox
Added: 2009-07-07 License: MPL Price: FREE
1001 downloads
Other version of FireBug
Price: FREE
License:MPL
License:MPL
Price: FREE
License:MPL
License:MPL
License:MPL (Mozilla Public License)
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 debuggers 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