ONES是款体积小巧(仅一个主程序和语言库文件,总共1M多)刻录功能丰富的刻录软件,它除了体积小、免安装、便携外,还是一款免费的刻录软件,即使是在条件有限的WinPE下也能轻松完成刻录功能。
由于ONES的免安装和便携性,也造成了一些尴尬的场景。当我们在一台机子上首次运行此程序,便会在本地计算机的注册表增加自动播放的记录项,下次放入光盘便会自动弹出ONES刻录软件的选项,可是问题是如果你已经把ONES.exe程序放到了其他的目录下了,操作系统就会提示你无法打开应用程序,势必造成了一些没用的垃圾选项,严重影响了人们对于完美的追求。那么修改方法有两种:1、直接移除ONES.exe对注册表中自动播放选项的读写;2、让ONES.exe每次都能重新进行注册表的覆盖,以确保ONES.exe路径的完整性。
修改工具就用OD动态分析,我们通过搜索“AutoplayHandlers”来到

0045E189  |.  8B2D 14E04900 MOV EBP,DWORD PTR DS:[<&ADVAPI32.RegCrea>;  ADVAPI32.RegCreateKeyA
0045E18F  |.  56            PUSH ESI
0045E190  |.  8D4424 0C    LEA EAX,DWORD PTR SS:[ESP+C]
0045E194  |.  50            PUSH EAX                                ; /pHandle
0045E195  |.  68 E8194A00   PUSH ONES.004A19E8                      ; |Subkey =     "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\HandleCDBurningOnArrival"
0045E19A  |.  68 02000080   PUSH 80000002                            ; |hKey = HKEY_LOCAL_MACHINE
0045E19F  |.  FFD5          CALL EBP                                ; \RegCreateKeyA
0045E1A1  |.  85C0          TEST EAX,EAX
0045E1A3  |.  8B1D 1CE04900 MOV EBX,DWORD PTR DS:[<&ADVAPI32.RegSetV>;  ADVAPI32.RegSetValueExA
0045E1A9  |.  75 22        JNZ SHORT ONES.0045E1CD
0045E1AB  |.  8B4C24 0C    MOV ECX,DWORD PTR SS:[ESP+C]
0045E1AF  |.  6A 00        PUSH 0                                  ; /BufSize = 0
0045E1B1  |.  68 E0E54900   PUSH ONES.0049E5E0                      ; |Buffer = ONES.0049E5E0
0045E1B6  |.  6A 01        PUSH 1                                  ; |ValueType = REG_SZ
0045E1B8  |.  6A 00        PUSH 0                                  ; |Reserved = 0
0045E1BA  |.  68 E0194A00   PUSH ONES.004A19E0                      ; |ValueName = "Zulu2"
0045E1BF  |.  51            PUSH ECX                                ; |hKey
0045E1C0  |.  FFD3          CALL EBX                                ; \RegSetValueExA
0045E1C2  |.  8B5424 0C    MOV EDX,DWORD PTR SS:[ESP+C]
0045E1C6  |.  52            PUSH EDX                                ; /hKey
0045E1C7  |.  FF15 20E04900 CALL DWORD PTR DS:[<&ADVAPI32.RegCloseKe>; \RegCloseKey
0045E1CD  |>  8D4424 0C    LEA EAX,DWORD PTR SS:[ESP+C]
0045E1D1  |.  50            PUSH EAX

观察下结构发现这段代码刚好完成了一次 HandleCDBurningOnArrival 注册表的注册,路径 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\HandleCDBurningOnArrival、表名Zulu2、表值为空,现在只要破坏掉这些数据结构就可以使HandleCDBurningOnArrival失效,但是这种修改方法还是有些不足之处,我们难以预料堆栈的平衡,修改的地方偏多,还是找找入口地址,我们继续往上看


0045E150  /$  81EC 08010000 SUB ESP,108
0045E156  |.  A1 C0AC4B00   MOV EAX,DWORD PTR DS:[4BACC0]
0045E15B  |.  33C4          XOR EAX,ESP
0045E15D  |.  898424 040100>MOV DWORD PTR SS:[ESP+104],EAX
0045E164  |.  813D 28EC4D00>CMP DWORD PTR DS:[4DEC28],834
0045E16E  |.  7D 17        JGE SHORT ONES.0045E187
0045E170  |.  33C0          XOR EAX,EAX
0045E172  |.  8B8C24 040100>MOV ECX,DWORD PTR SS:[ESP+104]
0045E179  |.  33CC          XOR ECX,ESP
0045E17B  |.  E8 2B2F0200   CALL ONES.004810AB
0045E180  |.  81C4 08010000 ADD ESP,108
0045E186  |.  C3            RETN
0045E187  |>  53            PUSH EBX
0045E188  |.  55            PUSH EBP
0045E189  |.  8B2D 14E04900 MOV EBP,DWORD PTR DS:[<&ADVAPI32.RegCrea>;  ADVAPI32.RegCreateKeyA
0045E18F  |.  56            PUSH ESI
0045E190  |.  8D4424 0C    LEA EAX,DWORD PTR SS:[ESP+C]
0045E194  |.  50            PUSH EAX                                ; /pHandle
0045E195  |.  68 E8194A00   PUSH ONES.004A19E8                      ; |Subkey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlers\HandleCDBurningOnArrival"
0045E19A  |.  68 02000080   PUSH 80000002                            ; |hKey = HKEY_LOCAL_MACHINE
0045E19F  |.  FFD5          CALL EBP                                ; \RegCreateKeyA
0045E1A1  |.  85C0          TEST EAX,EAX

刚好发现 0045E16E |. 7D 17 JGE SHORT ONES.0045E187,跳转到 0045E187 |> 53 PUSH EBX 刚好是入口地址,现在只要稍加修改就行了把“JGE 0045E187”改成“NOP”就移除了这个自动播放的注册功能,改成“JMP 0045E187”就可以每次运行都重新注册了。是不是感觉更加绿色了呢?

标签: none

添加新评论