├── Binaries ├── IMH.rar └── IMH_x.rar ├── Source ├── favicon.ico ├── IMH.au3 └── IMH_x.au3 └── README.md /Binaries/IMH.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaseralnajjar/IDA-MSDN-helper/HEAD/Binaries/IMH.rar -------------------------------------------------------------------------------- /Binaries/IMH_x.rar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaseralnajjar/IDA-MSDN-helper/HEAD/Binaries/IMH_x.rar -------------------------------------------------------------------------------- /Source/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yaseralnajjar/IDA-MSDN-helper/HEAD/Source/favicon.ico -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | IDA MSDN Helper 2 | =================================================================================== 3 | 4 | Description 5 | ----------- 6 | Simply, this tool will help you to get to Offline MSDN help while using IDA Pro. 7 | 8 | By selecting a function name or a line that contains it in IDA then pressing Alt+Z, it will automatically 9 | 10 | open MSDN description for this function. 11 | 12 | Files 13 | ------------ 14 | 15 | IMH.exe ==> Loader and helper for IDA Pro x86. 16 | 17 | IMH_x.exe ==> Loader and helper for IDA Pro x64. 18 | 19 | Instructions 20 | ------------ 21 | 1) Download and install Windows SDK 7 22 | link: http://www.microsoft.com/en-us/download/details.aspx?id=8279 23 | 24 | 2) Download and install H3Viewer 25 | link: http://visualstudiogallery.msdn.microsoft.com 26 | 27 | 3) Check whether you can browse MSDN library through H3Viewer. Otherwise, you may have to 28 | download "Win32 and COM Development" 29 | 30 | 4) Copy IMH.exe and IMH_x.exe into IDA Pro main folder 31 | 32 | 5) You can open IDA Pro using IMH executable files or open IDA then IHM 33 | 34 | 6) Select any line that contains a function name then press Alt+Z 35 | 36 | 37 | Mechanism 38 | ------------ 39 | When you select a line that contains a function, such as "call MessageBoxA", the tool 40 | will automatically trim this text into "MessageBox". 41 | It also supports other forms of calling functions like "call ds:MessageBoxA" or "call esi ; MessageBoxA ". 42 | 43 | ----------- 44 | 0xRumple -------------------------------------------------------------------------------- /Source/IMH.au3: -------------------------------------------------------------------------------- 1 | #Region ;**** Directives created by AutoIt3Wrapper_GUI **** 2 | #AutoIt3Wrapper_Icon=favicon.ico 3 | #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** 4 | 5 | ; Z-Rantom | AT4RE 6 | ; 2015/01/12 7 | ; Special thx to Koud3lka & Prodigy 8 | 9 | Run("idaq.exe") 10 | 11 | if _CheckOpenOneTime() = 0 then exit 12 | 13 | HotKeySet("!z", "HotKeyPressed") ; Alt-z 14 | 15 | While 1 16 | Sleep(100) 17 | if not ProcessExists("idaq.exe") and not ProcessExists("idaq64.exe") then exit 18 | WEnd 19 | 20 | Func HotKeyPressed() 21 | Switch @HotKeyPressed ; The last hotkey pressed 22 | 23 | Case "!z" ; String is the Alt-d hotkey. 24 | if WinActive("IDA") Then 25 | 26 | Send("^C") 27 | $x = ClipGet() 28 | $x = StringReplace($x, ";", "") 29 | $x = StringReplace($x, "ds:", "") 30 | $x = StringReplace($x, "call", "") 31 | $x = StringReplace($x, " ", "") 32 | if Asc(StringMid($x, StringLen($x), 1)) = Asc("A") then $x = StringMid($x, 1, StringLen($x)-1) 33 | if Asc(StringMid($x, StringLen($x), 1)) = Asc("W") then $x = StringMid($x, 1, StringLen($x)-1) 34 | 35 | if not WinExists("H3Viewer 1.") then run("C:\Program Files (x86)\Helpware\H3Viewer\h3viewer.exe") 36 | if not WinExists("H3Viewer 1.") then run("C:\Program Files\Helpware\H3Viewer\h3viewer.exe") 37 | WinActivate("H3Viewer 1.") 38 | WinSetState("H3Viewer 1.", "", @SW_SHOW) 39 | WinWaitActive("H3Viewer 1.") 40 | 41 | Send("^2") 42 | ControlSetText("H3Viewer 1.", "", "[CLASS:TTntEdit.UnicodeClass; INSTANCE:2]", "") 43 | ControlSetText("H3Viewer 1.", "", "[CLASS:TTntEdit.UnicodeClass; INSTANCE:2]", $x) 44 | Send("{ENTER}") 45 | 46 | sleep(50) 47 | If ControlGetText("H3Viewer 1.", "", "[CLASS:TTntEdit.UnicodeClass; INSTANCE:2]") <> $x then 48 | ControlSetText("H3Viewer 1.", "", "[CLASS:TTntEdit.UnicodeClass; INSTANCE:2]", "") 49 | ControlSetText("H3Viewer 1.", "", "[CLASS:TTntEdit.UnicodeClass; INSTANCE:2]", $x) 50 | Send("{ENTER}") 51 | EndIf 52 | 53 | EndIf 54 | 55 | EndSwitch 56 | EndFunc ;==>HotKeyPressed 57 | 58 | Func _CheckOpenOneTime() 59 | If Not ProcessExists(@AutoItPID) Then Return SetError(1, 0, '') 60 | If Not @error Then 61 | Local $a_Processes = ProcessList() 62 | For $i = 1 To $a_Processes[0][0] 63 | If $a_Processes[$i][1] = @AutoItPID Then ExitLoop 64 | Next 65 | $list = ProcessList($a_Processes[$i][0]) 66 | If $list[0][0] > 1 Then Return 0 67 | If $list[0][0] = 1 Then Return 1 68 | EndIf 69 | Return SetError(1, 0, '') 70 | EndFunc 71 | -------------------------------------------------------------------------------- /Source/IMH_x.au3: -------------------------------------------------------------------------------- 1 | #Region ;**** Directives created by AutoIt3Wrapper_GUI **** 2 | #AutoIt3Wrapper_Icon=favicon.ico 3 | #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** 4 | 5 | 6 | ; Z-Rantom | AT4RE 7 | ; 2015/01/12 8 | ; Special thx to Koud3lka & Prodigy 9 | 10 | 11 | Run("idaq64.exe") 12 | 13 | if _CheckOpenOneTime() = 0 then exit 14 | 15 | HotKeySet("!z", "HotKeyPressed") ; Alt-z 16 | 17 | While 1 18 | Sleep(100) 19 | if not ProcessExists("idaq.exe") and not ProcessExists("idaq64.exe") then exit 20 | WEnd 21 | 22 | Func HotKeyPressed() 23 | Switch @HotKeyPressed ; The last hotkey pressed. 24 | 25 | Case "!z" ; String is the Alt-d hotkey. 26 | if WinActive("IDA") Then 27 | 28 | Send("^C") 29 | $x = ClipGet() 30 | $x = StringReplace($x, ";", "") 31 | $x = StringReplace($x, "ds:", "") 32 | $x = StringReplace($x, "call", "") 33 | $x = StringReplace($x, " ", "") 34 | if Asc(StringMid($x, StringLen($x), 1)) = Asc("A") then $x = StringMid($x, 1, StringLen($x)-1) 35 | if Asc(StringMid($x, StringLen($x), 1)) = Asc("W") then $x = StringMid($x, 1, StringLen($x)-1) 36 | 37 | if not WinExists("H3Viewer 1.") then run("C:\Program Files (x86)\Helpware\H3Viewer\h3viewer.exe") 38 | if not WinExists("H3Viewer 1.") then run("C:\Program Files\Helpware\H3Viewer\h3viewer.exe") 39 | WinActivate("H3Viewer 1.") 40 | WinSetState("H3Viewer 1.", "", @SW_SHOW) 41 | WinWaitActive("H3Viewer 1.") 42 | 43 | Send("^2") 44 | ControlSetText("H3Viewer 1.", "", "[CLASS:TTntEdit.UnicodeClass; INSTANCE:2]", "") 45 | ControlSetText("H3Viewer 1.", "", "[CLASS:TTntEdit.UnicodeClass; INSTANCE:2]", $x) 46 | Send("{ENTER}") 47 | 48 | sleep(50) 49 | If ControlGetText("H3Viewer 1.", "", "[CLASS:TTntEdit.UnicodeClass; INSTANCE:2]") <> $x then 50 | ControlSetText("H3Viewer 1.", "", "[CLASS:TTntEdit.UnicodeClass; INSTANCE:2]", "") 51 | ControlSetText("H3Viewer 1.", "", "[CLASS:TTntEdit.UnicodeClass; INSTANCE:2]", $x) 52 | Send("{ENTER}") 53 | EndIf 54 | 55 | EndIf 56 | 57 | EndSwitch 58 | EndFunc ;==>HotKeyPressed 59 | 60 | Func _CheckOpenOneTime() 61 | If Not ProcessExists(@AutoItPID) Then Return SetError(1, 0, '') 62 | If Not @error Then 63 | Local $a_Processes = ProcessList() 64 | For $i = 1 To $a_Processes[0][0] 65 | If $a_Processes[$i][1] = @AutoItPID Then ExitLoop 66 | Next 67 | $list = ProcessList($a_Processes[$i][0]) 68 | If $list[0][0] > 1 Then Return 0 69 | If $list[0][0] = 1 Then Return 1 70 | EndIf 71 | Return SetError(1, 0, '') 72 | EndFunc 73 | --------------------------------------------------------------------------------