更改 RadASM 热键并添加鼠标中键热键

逆向工程 部件 ollydbg
2021-06-13 17:28:16

我正在尝试修改 RadASM,以便 Ctrl+W 将关闭选项卡,而不是 Ctrl+F4,并且还使如果您用鼠标中键单击选项卡,它将关闭。选项卡的上下文菜单只是“Windows”菜单栏项的副本。问题是,我无法弄清楚使用哪个库甚至函数来创建菜单栏及其项目。我在 OllyDBG 中找不到任何相关的字符串,我已经尝试为几乎每个我认为可能的调用设置断点,但我什么也得不到。

有人能指出我正确的方向吗?我无法在 RadASM 中找到用于确定哪些热键/快捷方式的功能。

我对代码洞和注入 DLL 都了如指掌,所以添加像鼠标中键这样的功能应该不是不可能的;我只需要知道从哪里开始,因为我对逆向工程很陌生。

2个回答

要将Ctrl+更改F4Ctrl+,W您可以使用资源编辑器,例如Resource Hacker

在资源编辑器中打开 RadASM.exe,修改加速器并保存更改。

假设你正在使用 Resource Hacker,你会改变

VK_F4, 47001, NOINVERT, CONTROL, VIRTKEY

VK_W, 47001, NOINVERT, CONTROL, VIRTKEY

然后按Compile Script按钮,并保存更改的文件。

资源黑客

至于处理选项卡上的中键单击,我使用 Spy++ 来查找选项卡窗口的窗口过程。对于 RadASM 2.2.1.6,它位于虚拟地址004061D4

间谍++

该地址处的函数是 SysTabControl32 窗口DialogProc 回调函数您可以在 RadASM.exe 中修补该函数以监视uMsg并对其进行操作WM_MBUTTONDOWN

ollydbg radasm.exe
view windows (W Icon)
sort class
and look for Mdi class like mdiEditChild / dialog etc

例子

Windows, item 96
 Handle=000704EE
 Title=C:\testrad\Html\Projects\testrad\testradinc3.html
 Parent=000203E4
 ID=0000FDEA (65002.)
 Style=56CF0001 WS_CHILD|WS_GROUP|WS_TABSTOP|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_VISIBLE|WS_SYSMENU|WS_THICKFRAME|WS_CAPTION|1
 ExtStyle=00000340 WS_EX_MDICHILD|WS_EX_WINDOWEDGE|WS_EX_CLIENTEDGE
 Thread=Main
 ClsProc=00xxxxxx RadASM.00xxxxxx
 Class=MdiEditChild

右键单击类 proc 上的消息断点

在对话框中

choose window creation and destruction
never pause radio button
log winproc args always

您应该能够捕获WM_CLOSE由 ctrl+f4 发送的

Log data
Address    Message
00XXXXXX   CALL to Assumed WinProc from USER32.7E418731
             hWnd = 000704EE ('C:\testrad\Html\Projects\test...',class='MdiEditChild',parent=000203E4)
             Message = WM_CLOSE
             wParam = 0
             lParam = 0  

当你点击鼠标中键时,下面补丁应该弹出MessageboxSysTabControl

004071A7             |> \90            NOP                                      ;  Default case of switch 004070B6
004071A8             |.  90            NOP
004071A9             |.  90            NOP
004071AA             |.  E8 5D1F0400   CALL    RadASMWM.0044910C

00449100 <STRING>                 .  57 4D 5F 4D 42 5>ASCII   "WM_MB_CLICK",0
0044910C <WM_MB_CLICK_HANDLER>   /$  60               PUSHAD                                   ;  CALL FROM 4071AA
0044910D                         |.  9C               PUSHFD
0044910E                         |.  3D 07020000      CMP     EAX, 207                         ;  WM_MB
00449113                         |.  75 13            JNZ     SHORT <RadASMWM.RETTOORIGHANDLER>
00449115                         |.  6A 00            PUSH    0                                ; /Style = MB_OK|MB_APPLMODAL
00449117                         |.  68 00914400      PUSH    <RadASMWM.STRING>                ; |Title = "WM_MB_CLICK"
0044911C                         |.  68 00914400      PUSH    <RadASMWM.STRING>                ; |Text = "WM_MB_CLICK"
00449121                         |.  6A 00            PUSH    0                                ; |hOwner = NULL
00449123                         |.  E8 A2FBFFFF      CALL    <JMP.&user32.MessageBoxA>        ; \MessageBoxA
00449128 <RETTOORIGHANDLER>      |>  9D               POPFD
00449129                         |.  61               POPAD
0044912A                         |.  8B45 08          MOV     EAX, DWORD PTR SS:[EBP+8]        ;  RadASMWM.<ModuleEntryPoint>
0044912D                         |.  E8 F7B8FBFF      CALL    <RadASMWM.ORIGINAL HANDLER>
00449132                         \.  C3               RETN