将ONES刻录软件绿色到底
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”就可以每次运行都重新注册了。是不是感觉更加绿色了呢?