2/15/2011

Here's the new version (2) of idaficator, totally redesigned and rewrote
from scratch with lots of new features and ideas ... HAVE FUN.

1. What's new:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    1.1. ROTE : (aka Rainbow Olly Text Editor)
        The old mucasm (MUlti Commands Assembler) is now ROTE (think of
        it as WROTE). Not just a new name, but it is a new concept. You
        can now master the code injection at its deepest levels. With 
		this version, you write your code in asm or in C (yes, you 've 
		read it the right way, C, then with one (1) click,
        you will be able to inject it directly to reversed target.
        
    1.2. GOTO dialog box:
        A sophisticated one, with codecompletion, filtration by Imports
        Exports or Labels.
        
    1.3. HWBP dialog box:
        The new tiny hardware breakpoint management dialog bow is ready.
        
    1.4. Lots of new keyboard, mouse shortcuts will be discussed later.
        

2. installation:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    2.1. installation of the plugin:
        first, copy idaficator.dll + bytes.oep to you plugin derictory
        then, copy ico directory to ollydbg directory (same place with
        ollydbg.exe)
    
    2.2. installation of ROTE requirements:
        idaficator->options->settings->rote tab then set correctly dirs
        .i.e radasm dir and help file root
        To work correctly, here's the hierarchy that idaficator expects:
        RADASM
          |
          |___ compiler.ini             <--------- (* see below)
          |___ RACodeComplete.dll
          |___ RAEdit.dll
          
          
          * (masm.ini, cpp.ini, gcc.ini  [goasm.ini ... next version]
		  where paths to masm/bin, cpp/bin, gcc/bin [goasm/bin ...] and 
		  masm/include, cpp/include, gcc/include are set).
 
 
3. Features details:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    3.1. ROTE:
    This version supports:
        - MASM (others assembelrs will come later)
        - Visual C++   ( V6.0 tested, other versions may also work)
        - MingW  ( V4.4.1 tested, but other versions may also work)
        
    With code completion feature and info tooltip, ROTE will drastically
    decrease the time spent in RCE, and especially in code injection and
    inline patching.
    Thus, you have to follow some rules:
        3.1.1. Features:
            * The Code completion : Triggered automatically under asm with 
                classic invoke, call, fn, func(. or manually by CTRL+SPACE
            * Info ToolTips : Triggered automatically after API insertion
                or manually by SHIFT+SPACE.
            * HELP : If you've set help file path, you can get help on API
                by putting cursor then hit F1.
            * Menus : There are 2 menus in addition to menu bar ones. The
                First is triggered by RIGHT CLICK in ROTE  and the second
                by MIDDLE CLICK.
            * Saving : Each piece of text is saved separately to UDD of
                main debuggee and is restitute when correspondant debugee
                is loaded to ollydbg.
            * Other options : classic options of a text editor are there.

        3.1.2. Knowen issues:
        -> Under MASM:
            * Code mixing:
                You can mix masm code with olly's one (.i.e you can inline
                some primary unauthorized instructions that  normally give
                errors under MASM like this one: 'mov [401000H], eax' that
                will give as error: 'the immediate operand not allowed'.
                BUT TO DO SO, you HAVE TO PREFIX YOUR INSTRUCTIONS WITH AN
                ASTERISK (*). Examples:
                *  mov [401000H], eax
                *fstp [401000]
                (Note the H is not needed in this case)

                Exception: 
                To make your life easier, there's no need to prefix calls
                and direct c/jumps. So, use them directly like this:
                jmp 401000
                call 402000H
                jng 401020
                (Here again, the H is not mandatory)

            * NB:
                Be careful with some instructions, they may compile under 
                MASM in an unwanted way like;
                mov eax, DWORD PTR [401000h] that will be compiled to
                mov eax, 401000 if not 'asterisked'

            * NB:
                Your code must be masm compatible (an ommitted h after 11
                for example, will be compiled as 11  (decimal format) but 
                not 17 (decimal of 11h) so BE CAREFUL.


        -> Under MSVC or MingW:
            * EVERY GLOBAL variable MUST be initialized :  HWND hwnd = 0;
            * Inline asm works only with MSVC. Won't work with MingW
            * Send me other problems you may encounter.


        -> Under Ollydbg-scripter:
            * Have to be maintained ... stay tuned for future update.
            
        -> Under ALL:
			* If you keep scrolling by mouse, RAEdit crashes, can't figure
			  out the source of the problem. Please, if you can get it, send
			  me a mail, or a message on forum.

		3.1.3. Examples :
    
You can now assemble a piece of code like this with MASM:

	; -------------code---------------

	.data

	k32 db "kernel32.dll", 0
	dd1 dd 0

	.code

	DummyProc1 proc iVar1:dword, iVar2:dword
		LOCAL dummyVar:dword
		
		invoke GetModuleHandle, offset k32
		fn GetModuleHandle, "kernel32.dll"
		call 00997A3C ; no need to prefix with *
		mov dd1, eax
		call 00997A3C ; no need to prefix with *
		imul eax, dd1
		*mov [009B7030], eax
		xor eax, iVar2
		add eax, iVar1
		ret
	DummyProc1 endp

	DummyProc2 proc
		LOCAL iVar1:DWORD
		LOCAL iVar2:DWORD
		
		invoke DummyProc1, iVar1, iVar2
		ret
	DummyProc2 endp

	;-------------end of code---------------



Or this piece under VC++ or MingW

	//-----------------code------------------

	// Unicode :)
	void part(HWND hwnd) {
		DWORD dw;
		dw = MessageBoxW(hwnd, L"Text", L"Caption", MB_OK);
		// ...
		return;
	}

	//-------------end of code---------------

The compiled binary code follows these rules :
	- code goes to address highllighted in ACPUASM win
	- data goes to address highllighted in ACPUDUMP win


	3.2. Shortcuts:
	/** DISASM WINDOW FEATURES
	 * 
	 * MIDDLE CLICK:
	 * 
	 * 		In first column:
	 * 		- MClick = Copy address to clipboard. (address of cursor).
	 * 		- CTRL + MClick = copy RVA to clip (address of cursor)..
	 *		
	 * 		In second column:
	 * 		- MClick = copy data to clip.
	 *		
	 * 		In Third column:
	 * 		- MClick = Copy constants to clipboard
	 * 		- CTRL + MClick = Copy command to clipboard
	 * 		- CTRL + SHIFT + MClick = Copy MASM compatible commands (all 
	 *        constants are prefixed with 0 and suffixed with H)
	 * 		
	 * 		In Fourth columns:
	 * 		- MClick = Copy user comment to clipboard
	 * 
	 * LEFT DOUBLE CLICK:
	 * 
	 * 		In Third column:
	 * 		- If command is a jump or a call, you'll follow it in disasm
	 *        window.
	 * 		- If there's a constant bellonging to memory, you'll dump it
	 *        to dump window.
	 * 
	 * 	EVERY WHERE:
	 * 		- CTRL + V = Pasted binary code from clipboard
	 * 
	 */


	/** DUMP WINDOW FEATURES:
	 *	MIDDLE CLICK:
	 * 		In first column:
	 * 		- MClick = Copy activated address to clipboard. (address of
	 *        cursor).
	 * 		- CTRL + MClick = copy RVA to clip (address of cursor)..
	 *		
	 * 		In second column:
	 * 		- MClick = copy data to clip.
	 * 		- CTRL + MClick = copy DWORD to clip.
	 *		
	 * 		In Third column:
	 * 		- MClick = copy ascii text (NULL terminators will be deleted
     *        and text will be
	 * 		concatenated.
	 *
	 * LEFT DOUBLE CLICK:
	 *
	 * 		In second column:
	 * 		- DClick will set a software breakpoint if disasm view in ON.
	 * 		- DClick = Edit value depending on the view  (ex: Edit float
	 *        if float view is on)
	 * 		- CTRL + DClick = Follow DWORD if it belongs to valid memory.
	 *
	 * 	EVERY WHERE:
	 * 		- CTRL + V = Pasted binary code from clipboard
	 * 		- F2 sets a software breakpoint.
	 */

	/** STACK WINDOW :
	 * 
	 * 	LEFT DOUBLE CLICK:
	 * 		- If data column is double clicked, then address in stack is 
	 * 		  followed in dump window.
	 * 		- If data column is double clicked while CTRL is held,  then
	 * 		  the 'modify dialog' box will show up.
	 * 		- If comment column is simply double clicked, then the modify
	 * 		  dialogbox will show up.
	 * 		
	 * 	MIDDLE CLICK:
	 * 		- If address column is clicked, then the address is copied to
	 *        clipboard.
	 * 		- If data column is clicked, then the data is binary copied (
	 *        max = 400 bytes).
	 * 		- If data column is clicked while CTRL is held, data is copied
	 *        as a DWORD (little endian).
	 */

	3.3. HWBP window:
		- It's more sophisticated now, very stable and very handy, try it.
		- It will save your HWBP and there sates even between 2 debugging
		  sessions.
		
	3.4. Goto#Supremacy Dialogbox: 
		- Can be enabeled from Options->Setting->General Tab
		
	3.5. All previous features are of course present: other shortcuts, the
		custom buttons functions, extra menus ...




4. History and news:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
17/2/2011 # idaficator-2.0.1.9 # first public release of version 2.0

16/02/2011 # idaficator-2.0.0.33 private build (testing):
	[+]: Goto#Supremacy is now choosable.
	[!]: Olly crashes if ROTE not closed before closing olly.
	[!]: Olly crashes if ROTE closed from close button or menu.
	[!]: Tooltips not working under C++.
	[!]: API addresses were not updated between 2 debugging sessions.
	[!]: Syncronisation problem in assmbling process
	[!]: 5th button right click to customize didn't work.

15/02/2011 # idaficator-2.0.0.12 private build (testing):
	[+]: Checks to prevent crashes if no RAEdit or RACodecomplete found.
	[!]: bug idaficator disables stack pointer on dclick address column.
	[!]: various little bugs and memory leaks.

14/02/2011 # idaficator-2.0 private build (testing):
	[!]: bug in CTRL+SHIFT+MClick disasm (compatible masm code).
	[!]: bug in saving restoring user APIs of breakpoints API menu
	[!]: bug no hwbp restoring between sessions.

06/05/2008 # V 1.2.12 
	[+]: Adding support for asm like command in 'multicommand assembler'.
	[+]: Position saving for most important and most used dialog boxes.
	[+]: MuCAsm remembers last entered text between 2 debugging sessions.

27/04/2008 # (private version) 
	Testing

21/04/2008 #c(public version) 
	[+]: Advanced GUI for shortcuts MENU manipulator.
	[+]: Added tooltips for WHBP custom window.
	[+]: Now, code can be restored after assembling commands.

17/04/2008 # (private version) 
	[+]: Now you can ENABLE/DISABLE hwbp form hwbp dialog 

15/04/2008 # (private version) 
	[+]: The 5th button is now activated. 
	[+]: U can now add custom APIs to APIs menu.
	[+]: 'Search for all strings' fixed. 
	[+]: Now the hardware bp dialog box is all costumised.
	[+]: I think the problem of painting olly is now off. 

12/12/2007 # v1.2.0
	[+]: Added a wide support for mouse.
	[+]: Added 3 new buttons with nice functions.
	[+]: Added 5 customizable buttons.
	[!]: Position of buttons is now fixed.

12/05/2007 # v1.1 
	(Private release).

12/02/2007 # v1.1.0
	[+]: Added THE IDA-LIKE MOUSE EFFECTS.
	[!]: bug path are not valid and bytes.oep was not loaded.
	[!]: Always dealling with spelling mistakes.

28/11/2007 # v1.0.8
	[!]: Corrction of 'no patterns in combo box' bug -> thanks LFC-AT
	[+]: Tested ok with CIM version -> thanks to Ahmed18
	[+]: Arabic/English help are now available in the package
	[+]: Correction of some spelling errors.

26/11/2007 # v1.0.7
	First public release




5. Greetings:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Thanks to ALL AT4RE MEMBERS FOR SUPPORT, TESTING, BUG REPORT.
Thanks to LCF-AT, Sunbeam for bug testing.
Thanks to Roobenhoodarab, Alzri2 for the nice graphics.
Thanks tou you for using my useless plugin.













Regards
Your best friend Zool@nder|AT4RE

