Debuggers page is updated now August 18, 2008
Posted by reversengineering in NEWS.1 comment so far
hi
today i updated Debuggers’s page and arranged them …but still i work it on .
if you have any other ollydbg mod. or any other debugger you can share it there
i hope u enjoy that
http://reversengineering.wordpress.com/debuggers/
added :
ImmunityDebugger v 1.5 FULL (SCRIPT+PLUGIN)
Zeta Debugger v1.4
OllyDbg 1.10 - kamal
OllyICE TheMida MOD. By EvOlUtIoN
best regards
OllyICE TheMida MOD. By EvOlUtIoN August 18, 2008
Posted by reversengineering in DEBUGGER, TOOLS.add a comment
OllyICE TheMida MOD. By EvOlUtIoN
Allora, a grande richiesta ecco il debugger che uso normalmente per “giocare” con programmi protetti con TheMida/WinLicense.
La mia patch è semplicissima ma è bene ricordare che OllyICE è stato creato per la prima volta da Hachno, un guru in fatto di Armadillo e di unpacking in genere.
Questa versione ha fondamentalmente 2 patch che la differiscono dal normale OllyICE:
1. Non crasha quando ci si carica un file protetto
2. Se si aggiunge al menù contestuale crea una voce chiamata “TheMida OllyDbg”, così a seconda del target si può aprire un olly od un altro.
Nella cartella plugin sono presenti tutti quelli necessari, i più importanti sono:
1. PhantOm plugin
2. HideOD
Senza questi non si riusicrà mai a caricare un target con TheMida senza essere scoperti.
Inoltre sono presenti 2 script, nessuno dei due dumpa la VM ma almeno trovano l’OEP e aaggiustano la IAT.Allora, a grande richiesta ecco il debugger che uso normalmente per “giocare” con programmi protetti con TheMida/WinLicense.
Translation: Italian » English
My patch is simple but it is good to remember OllyICE was created for the first time in Hachno, a guru in terms of Armadillo and unpacking in general.
This version has basically 2 patches that differ from the normal OllyICE:
1. Not crasha when you load a protected file
2. If you add to the context menu creates an entry called “TheMida OllyDbg”, so depending on the target can open a olly or another.
In the folder plugins are all those present, the most important are:
1. PhantOm plugin
2. HideOD
Without these not riusicrà ever to load a target with TheMida without being discovered.
In addition there are 2 script, neither dump VM but at least find the OEP and aaggiustano the IAT.Allora in great demand here is the debugger that normally use to “play” with programs protected by TheMida / WinLicense.
DownloadLink:
http://rapidshare.com/files/138149196/OllyICE_TheMida_By_EvOlUtIoN.rar
http://letitbit.net/download/90b2a3913809/OllyICE-TheMida-By-EvOlUtIoN.rar.html
JDebugTool 4.1.1 August 17, 2008
Posted by reversengineering in DEBUGGER, TOOLS.1 comment so far
The JDebugTool® graphical Java™ debugger
JDebugTool descriptionA standalone Java debugger, built on top of the standard JPDA and moreJDebugTool has a standalone Java debugger.
-Built on top of the standard JPDA (Java Platform Debugger Architecture).
-Is itself written in Java.
-Features an intuitive and graphical Java Swing GUI.
-Context sensitive Help Viewer.
description:
Debug Applications, Applets, Servlets and EJBs.
Local and Remote debugging.
Run, Attach and Listen.
User friendly GUI.
Multi-Thread debugging.
Breakpoint Groups.
Data Tool Tips.
Hot Swap classes and Pop stack frames.
Save settings in Projects.
Modify primitive variables.
Display loaded classes.
Display toString() results.
Display Chained Exceptions.
Display Memory Usage and Java System Properties.
Evaluate simple Expressions including Method Calls.
Stop on Thread Start and Death events.
Stop on Class Load and Unload events.
Stop on Method Entry and Exit events.
Stop on Field Watchpoint events.
Launch External Text Editor.
http://www.debugtools.com/download.html
pro by DIGERATI
http://letitbit.net/download/baf0a2105543/JDebugTool-Pro-v4.1.1.rar.html
http://rapidshare.com/files/137998716/JDebugTool_Pro_v4.1.1.rar
pass
http://reversengineering.wordpress.com
Themida Custom Build v1.9.9.0 August 17, 2008
Posted by reversengineering in PROTECTOR, TOOLS.add a comment
everything is clear !!
from:lifehack.ws
DownloadLink:
http://rapidshare.com/files/137990059/Themida.Custom.Build.v1.9.9.0.rar
http://letitbit.net/download/f03a73643529/Themida.Custom.Build.v1.9.9.0.rar.html
http://depositfiles.com/files/7308273
pass:0a9s8wwyxxxx*#_G36KV
if u like it buy it or **** it.
DotNET Tracer 0.3 August 17, 2008
Posted by reversengineering in .NET, TOOLS.add a comment
This is a simple tool that has a similar functionality to RegMon or FileMon but it’s designed to trace events in .NET assemblies in runtime, many events can be reported so you can understand what’s going on in the background.
1- Select the assembly you want to analyze
2- Set the Events Mask, i.e Events you want to catch
3- Click “Start”
What’s NEW ?
1- Enhanced scrolling in Events listview using mouse wheel
2- Ability to save events log to (*.log) files for later analysis
3- Every event has a special icon so that you can understand the list more easily
4- Removed skin to reduce flickering and enhance performance
I hope it’s useful.
http://letitbit.net/download/602a1c384125/KDT03.rar.html
Dragon UnPACKer August 17, 2008
Posted by reversengineering in OTHER, TOOLS.add a comment
Dragon UnPACKer is a game archive (Quake PAK, etc..) unpacking tool. It is plugin based making easier to add new archive file formats. It has convert ability and raw search function for known material (audio, video and pictures).
Dragon UnPACKer: v5.3.2 WIP
http://sourceforge.net/project/showfiles.php?group_id=108923
IDA Stealth Plugin August 17, 2008
Posted by reversengineering in OTHER, TOOLS.add a comment
IDA Stealth Plugin
IDA Stealth is a plugin which aims to hide the IDA debugger from most common anti-debugging techniques. The plugin is composed of two files, the plugin itself and a dll which is injected into the debuggee as soon as the debugger attaches to the process. The injected dll actually implements most of the stealth techniques either by hooking system calls or by patching some flags in the remote process.

Changelog
07/24/2008 - v1.0 Beta 1
- Bugfix: Multiple minor bugfixes
- Added: Fake OS version
- Added: Disable NtTerminateThread/NtTerminateProcess
http://newgre.net/idastealth
IDT Protector v1.0 August 16, 2008
Posted by reversengineering in PROTECTOR, TOOLS.add a comment
IDT Protector v1.0
Author: cyclotron [BCG][DFCG][FCG][OCN]
Special thanks to : Four-F getiteasy
Added Features:
Dump IAT in a file named backup.idt
Formatted output of IDT
http://letitbit.net/download/3a40be725856/IDTProt.rar.html
Obsidian - Non-intrusive Debugger + src August 16, 2008
Posted by reversengineering in DEBUGGER, TOOLS.add a comment
What is it?
Obsidian is a non-intrusive debugger, which means that it doesn’t change the targets process as a normal debugger would. Being in beta state there can be some minor issues but it should be mostly stable.
Why?
Just for the fun of it and the learning of new things. If you have questions, encounter problems or would like to make suggestions for improvements or new features please drop me a line. My mail address can be found at the bottom of the page.
What is it good for?
The main advantage would be that you don’t have to care anymore about those anti-debugger-tricks like:
- IsDebuggerPresent() which boils down to checking the debugger-flag in the PEB
- self-debugging: creating another thread or process which attaches itself to the target in order to keep other debuggers from doing so and probably doing some code ‘corrections’ during runtime.
- timing checks to recognize delays due to an attached debugger.
How does it work?
Basic information
The basics for this project, or to be correct, about the workings of a debugger came mostly from MSDN with additional insight on the course of debugging from iczelion’s tutorials.
Windows API
The debugging functions are implemented by using standard Win32-API calls like:
- CreateProcess
- OpenProcess
- OpenThread
- CreateToolhelp32Snapshot
- SuspendThread / ResumeThread
- ReadProcessMemory / WriteProcessMemory
- GetThreadContext / SetThreadContext
Breakpoints
To implement breakpoints I used a trick I learned from a very interesting paper in Codebreakers Journal. Its name is “Guide on How to Play with Processes Memory, Write Loaders and Oraculumns” and was written by Shub Nigurrath. Shub Nigurrath references the trick itself to yates and his paper “Creating Loaders & Dumpers - Crackers Guide to Program Flow Control”, so kudos to him too. The trick is to place the opcode EB FE at the address you want to stop. This code stands for “jmp -2″ which is the shortest way to code a while(1); loop I know of.
Dis-/Assembling
To dis-/assemble the opcodes, I used the awesome code of the disasm zip-file Oleh Yuschuk, creator of OllyDbg, has put on his site. OllyDbg has rightfully gained a reputation for being intuitive and a real alternative to SoftICE when it comes to ring 3 applications.
File-information
To extract some information about code and data segments and other stuff about the process I used the information gained from the paper “Portable Executable File Format – A Reverse Engineer View” written by Goppit. This paper can also be found at Codebreakers Journal.
Singlestep and stepping into calls
Since I couldn’t use debug-events, I chose the simple way out and “just” set a breakpoint on the instruction which would be executed next. This involved checking for jumps, calls and returns to make sure to get the right instruction. Checking for conditional jumps was easy since the disasm files (mentioned above) could already do this for me with the Checkcondition function. The same applies for calls. With the exception of calls that got their destination from a register. After searching for a while I found that the lower nibble of the call-opcode gave away the register that should be used. Last time I wrote about StackWalk-function and I have to admit that I was wrong about using it for returns since intel-documentation states that ret in any case uses the first element form the stack. So there’s nothing to be done except reading the DWORD pointed to by the ESP.
Thread Local Storage (TLS)
The first piece of code that will be executed when a new process is started isn’t at the address pointed to by AddressOfEntryPoint. Actually DataDirectory[IMAGE_DIRECTORY_ENTRY_TLS] in the optional header points to a IMAGE_TLS_DIRECTORY32 structure which contains a pointer to a list of functions executed before going to the AddressOfEntryPoint.
Attaching to a running process
There are two handles which are needed to provide full functionality. The first one is the process-handle and the second one is the handle to the main-thread (as obsidian only supports single threaded debugging). In order to allow selection of a process, the set of process id, executable path and name for each process can be gained by employing the CreateToolhelp32Snapshot with TH32CS_SNAPMODULE as parameter. The process id from the selection can be passed to the OpenProcess-function in order to retrieve the process-handle. Getting the thread-handle required a bit more work. The OpenThread-function will return the handle if the thread id is known. Since OpenThread is only available from Windows 2000 Professional onwards the attach method will work only for those systems which provide this function. Finding the thread id can be managed by using the result of CreateToolhelp32Snapshot with TH32CS_SNAPTHREAD. Allegedly the first entry is always the main-thread of the process, so this will be the thread that’s going to be opened. By looking into the returned structure the member th32ThreadID provides the id for the thread that’s required by the OpenThread-function. With both handles and the process- and thread-ids available it is possible to provide complete functionality.
Process dumping
When I started writing the code, I was wondering why there didn’t seem to be any tutorial about dumping a running process with your own program. Most tutorials I found used existing tools for it. There are some really good papers about rebuilding the IAT by the way. Which I will keep in mind for one of the next releases. As I began to reread the PE documentation it occurred to me that this is about all you need to dump an unprotected process. You can get the headers directly from the imagebase of the module and from them you can gather all the other parts. So the job is reassembling the parts scattered through process space by the loader and writing them into a file. Just keep boundaries and offsets in mind.
Stack view
After a long time the makeshift memory display for the stack, it has been replaced by an improved version. To get a better impression of the stack frames the “special” values on the stack (stored EBP, stored EIP and the address pointed to by ESP) are highlighted in different colors. In addition, anything which is not part of the active stack is displayed in gray. Another little feature, long existant but not mentioned yet, is a simple guard to make you aware of a change in the saved EIP. For this to work you need to step into the call and single step through it until you reach the RET. When the EIP was changed a messagebox will pop up and warn you about the change.
Abstractions
Symbols
Working with symbols is much easier than I first thought. Most work is done by the Sym*-functions provided by the imagehlp library (for example use SymGetSymFromAddr to get a symbols name by its address). So the only part which requires a bit of work, is to determine the levels of indirection so calls via a jumptable could be resolved correctly. The same goes for applying the IDA map file. Once it is parsed, it’s back to analysing references again. By the way, IDA is a very impressive disassembler by Ilfak Guilfanov (formerly DataRescue now at Hex-Rays). It provides a deeper analysis and another view to an executable than most debuggers do. Plus, as the name implies, you don’t need to actually execute the target, which is pretty cool, especially for malware analysis.
Basic block analysis
After the construction of the (more or less) needed basics I decided to take a shot at improving the code analysis. A short research yielded the magical words ‘basic block’, which is a term that originated from optimization concepts of compilers. But perhaps it’s better to first explain what basic blocks are. A basic block is, generally spoken, a sequence of commands that doesn’t contain any jumps and isn’t jumped into. Where jump doesn’t mean the jmp instruction but generally everything that explicitly moves the eip anywhere. The commands I used the determine the end of a basic block are:
- all jumps, conditional and unconditional (e.g. jmp, je…)
- call
- ret
How are blocks and addresses handled? The analyser contains two lists, where one holds all addresses not analysed yet and the other contains the generated blocks. By doing this there is a clean separation between unknown and known blocks. To avoid an infinite loop e.g. when dealing with backward jumps the analyser only processes addresses that do not lie on the beginning of an already processed code-block. Also no processing of addresses out of the modules scope will be performed. This is done to keep the processing-time at an acceptable level. As this approach relies on splitting unknown blocks or dividable known blocks into several smaller ones, the code needs to search through the known and unknown block and check wether the current address implies a splitting or the creation of a separate block. When looking at the code I found that it is much more efficient to walk through the address list backwards (e.g. the latest blocks first) since most matches will occur in the vincinity of the last processed block. The analysis of the code starts at the entrypoint and moves onward from there on. Calls and conditional jumps both yield at best two addresses where the analysis of a new block could be started. The ‘at best’ results from the fact that at the time of analysis indirect addressing with register can’t be resolved, so this is a path that can’t analysed. When an address points into a known block this means that the block needs to be split, since an address can only come from a jump to this location which means the former block ends there and a new one begins. At the moment the analyser doesn’t make any assumptions about what could be meant but only cares for definate information. Thus there are blocks of code which haven’t been recognized and therefore are treated as filling. This affects the readability of the disassembled code. Since any opcode not flagged as code will be disassembled in byte steps. For example an opcode like 74 53 at address 00403F52 will result in the following output:
00403F52 74 53 JE 403FA7 00403F53 53 PUSH EBX
Mind the addresses, that is what was meant by ‘in byte steps’. This can be fixed by telling the analyser to process the code from the current selection onwards.
General program aspects
Asynchronous messagehandling
The handling of the dialog is now a little more detached from the behavior of the target. Some calls won’t return in a defined time when stepping over them (like DialogBoxParam). Originally this caused the GUI to seem like it hangs but was actually waiting for the function to return. This has been fixed by replacing the blocking call with a polling approach.
Modular approach
After starting with a single executable, I decided to break it up into the GUI which in itself still contains a lot of intelligence and the basic obsidian class which contains all of the debugger- like functions. The main reason for this was to be able to pass the obsidian class to a plugin. But this way you can also easily use the obsidian class in other programs.
Plugin interface
At the moment there is only a by call interface available, which means that the plugin will only be called when the user selects the plugin from the list. To write a working plugin for obsidian you need to export the following two functions from a dll.
extern "C" void EXPORT GetName(char* p, unsigned int len); extern "C" DWORD EXPORT Go(Obsidian* p);
As the name of the first function implies its only purpose is to store the name of the plugin in the supplied buffer. The second function gets called when the user clicks on the menu entry. This is the place where your plugin can do its work. The paramer you receive is a valid class pointer which should be used by you instead of the singleton construct. To make Obsidian recognize a plugin you need to create a folder called “PlugIns” in the Obsidian-directory and put the dlls into that folder.
to do / missing features
- until now it’s only possible to debug single threaded applications
- insert code to catch exceptions in the target
- add a ’set symbol-path’-option
- implementing save and load session
- creating a simple IAT rebuilder for the dump function
- resolution of symbols in the stackview
- storage of user defined settings
Bugs
- -
recent fixes / new features
- added “attach”-functionality. Now you’re able to attach to a running process.
- fixed malformed exported member from obsidian.dll
- removed a few memory leaks
Thanks to…
- morpheus for loads of suggestions and testing and for correcting this site
- cryptocrack for further suggestions and testing
- Thorsten for some ideas about this terribly stubborn CListCtrl.
- cyrus-tc for discussing ideas and vantage points with me.
- zaesar for his heap plugin
Where are the links?
As you may have noticed, there are no links on this site. That doesn’t mean that you can’t get to new pages from here. The paragraphs are written in such way to supply you with the needed keywords to find the papers even if the original site went offline. And who knows, perhaps you come across interesting new ones.
Last updated: 07.08.2008
http://letitbit.net/download/e7fa3b610314/Obsidian–src.rar.html
poison(ollydbg plugin) +src August 16, 2008
Posted by reversengineering in OLLY'S PLUGINS, TOOLS.add a comment
NICE PLUGIN BY What
Here is the source for a plugin, I have decided to write a new one from scratch with completely custom code.. Its has fixes for stuff like IsDebuggerPresent, HeapFlags, and shows hooks for stuff like ZwQueryProcessInformation. Show how to apply fixes to ollydbg itself, remove ep breakpoint and break on tls. Hope this helps someone. Originally I used a thread on restart of plugin but it was kinda annoying, so I hooked ollydbg later on where all the fixes would work right, took forever to find a good spot.
updated the code and fixed compatibility problems. I would still call it alpha code, but it works with all plugins I use. Looking into adding driver code with the source code for the rdtsc from pediy. Im not sure what exactly I added to it since the first post. Enumwindows mainly for telock. Cant use ignore invalid handle option with ollyadvanced if you want this one the fix in the plugin to work, ill probably fix that sooner or later. Anyway link is updated.
Edit in: Code updated as 3.2.08
Updates include added Process32Next hook, HeapFlags problem.
http://letitbit.net/download/f19d5d702428/poison.rar.html
