【文章标题】: pediy 打造专属的 Malware Defender
【文章作者】: FishSeeWater
【作者邮箱】: FishSeeWater@gmail.com
【软件名称】: Malware Defender
【下载地址】: 自己搜索下载
【使用工具】: ollyice ,lordPe,010Editor
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
Malware Defender 是一个主动防御软件,也就是HIPS。以下简称MD, 很早以前使用这个软件,给作者提过不少建议。
其中一个加入“暂停保护”的功能,却没有提供热键支持,最近心起,使用这个软件时,感觉太需要这个功能了,没办法只好自己动手解决了:).
绝无恶意,作者莫怪~~:)
最新版是2.7.2.0001
下载安装后,把主程序拷贝出来,扔到IDA中直接加工。生成MAP文件,然后用OD载入开始分析。
开始前我们先理一下思路:
暂停保护的功能作者已经加入了(1,5,15,30,60,自定义 6项功能),
只是需要在托盘用鼠标操作。我们只要找到这些消息的处理过程,用我们注册的热键来调用就OK了。
具体分步如下:
1。找到响应“暂停保护XX分钟”鼠标操作的消息处理例程
2。找到MD中注册热键的例程,加入我们定义的新热键。
SHITF+CTRL+ALT+1......6来调用作者提供的6项功能。
3。找到MD中反注册热键的例程,反注册我们的热键.
4。找到MD中响应热键的消息处理例程,加入我们的热键处理代码,在这里调用1的入口
首先进行一步:
OD载入MD,
在“暂停保护”选项处有个“自定义”选项,选这个功能会跳出一个对话框
这时按“F12,Alt+F9”再点击确定,程序会断在下图中:
返回后,
我们可以看到,00490821 这一行,F7进
00490683 /$ >push ebp
00490684 |. >mov ebp, esp
00490686 |. >push ecx
0049079B <>/$ >push 1 ; stop_1_Minute
0049079D |. >call MalwareD.00490683
004907A2 |. >xor eax, eax
004907A4 \. >retn 10
004907A7 <>/$ >push 5 ; stop_5_Minute
004907A9 |. >call MalwareD.00490683
004907AE |. >xor eax, eax
004907B0 \. >retn 10
004907B3 <>/$ >push 0A ; stop_15_Minute
004907B5 |. >call MalwareD.00490683
004907BA |. >xor eax, eax
004907BC \. >retn 10
004907BF <>/$ >push 1E ; Stop_30_Minute
004907C1 |. >call MalwareD.00490683
004907C6 |. >xor eax, eax
004907C8 \. >retn 10
004907CB <>/$ >push 3C ; Stop_60_Minute
004907CD |. >call MalwareD.00490683
004907D2 |. >xor eax, eax
004907D4 \. >retn 10
......省略一些
0049079B <>/$ >push 1 ; stop_1_Minute
004907A7 <>/$ >push 5 ; stop_5_Minute
004907B3 <>/$ >push 0A ; stop_15_Minute
004907BF <>/$ >push 1E ; Stop_30_Minute
004907CB <>/$ >push 3C ; Stop_60_Minute
004907D7 <>/$ >mov eax, <MalwareD.loc_581A60> ; StopCustomTime
0047BDF7 |. >test ax, ax
0047BDFA |. >je short <MalwareD.loc_47BE70>
0047BDFC |. >mov ebx, [arg.2]
0047BDFF |. >movzx ecx, di
0047BE02 |. >push ecx ; /Key
0047BE03 |. >movzx eax, ax ; |
0047BE06 |. >push eax ; |Modifiers
0047BE07 |. >push ebx ; |HotKeyID
0047BE08 |. >push dword ptr ds:[esi+4] ; |hWnd
0047BE0B |. >call dword ptr ds:[<&USER32.Registe>; \RegisterHotKey
0047BE11 |. >test eax, eax
0047BE13 |. >jnz short <MalwareD.loc_47BE83>
0047BE8D <>/$ >mov eax, <MalwareD.loc_580D22> ; _ProcessHotKey
0047BE92 |. >call <MalwareD.__EH_prolog>
0047BE97 |. >push ecx
0047BE98 |. >push ecx
0047BE99 |. >push esi
0047BE9A |. >mov esi, ecx
0047BE9C |. >call <MalwareD._UnAllHotKey>
...............
0047BEBB |. >lea eax, [local.4]
0047BEBE |. >push eax
0047BEBF |. >push dword ptr ds:[<_HotKey_Ctrl_1>>
0047BEC5 |. >mov ecx, esi
0047BEC7 |. >push 1
0047BEC9 |. >push offset <MalwareD._HotKey_1>
0047BECE |. >call <MalwareD._RegHotKey>
.............
0047BF7F |. >push dword ptr ds:[<_HotKey_Ctrl_9>]
0047BF85 |. >mov ecx, esi
0047BF87 |. >push 9
0047BF89 |. >push offset <MalwareD._HotKey_9>
0047BF8E |. >call <MalwareD._RegHotKey>
0047BF93 >mov edi, dword ptr ss:[ebp-10]
0047BF96 >cmp dword ptr ds:[edi-8], 0
0047BF9A |. >je short <MalwareD.loc_47BFE6> ;这里判断是否注册成功,否则弹框提示
..........
0047BFCE |. >push 30 ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
0047BFD0 |. >push 0 ; |Title = NULL
0047BFD2 |. >push [local.5] ; |Text
0047BFD5 |. >push dword ptr ds:[esi+4] ; |hOwner
0047BFD8 |. >call dword ptr ds:[<&USER32.MessageBoxW>] ; \MessageBoxW
0047BFDE |. >lea ecx, [local.5]
0047BF7B |. >lea eax, [local.4]
0047BF7E |. >push eax ;压入this
0047BF7F |. >push dword ptr ds:[<_HotKey_Ctrl_9>];压入热键码,高位VK,低位fsModifiers
0047BF85 |. >mov ecx, esi
0047BF87 |. >push 9 ;压入ID
0047BF89 |. >push offset <MalwareD._HotKey_9> ;压入一个变量,用来保存ID的,在UnhotKey时需要用到这个变量
0047BF8E |. >call <MalwareD._RegHotKey> ;调用注册CALL
0047BF8E |. >call <MalwareD._RegHotKey>这一行是最后一个热键的注册,从下一行0047BF93跳到我们的代码中注册新的热键。
004628F9 <>/$ >push esi ; _UnAllHotKey
004628FA |. >push offset <MalwareD._HotKey_1>
004628FF |. >mov esi, ecx
00462901 |. >call <MalwareD._UnregisterHotKey>
00462906 |. >push offset <MalwareD._HotKey_2>
0046290B |. >mov ecx, esi
0046290D |. >call <MalwareD._UnregisterHotKey>
00462912 |. >push offset <MalwareD._HotKey_3>
00462917 |. >mov ecx, esi
.........
00462955 |. >call <MalwareD._UnregisterHotKey>
0046295A |. >push offset <MalwareD._HotKey_9>
0046295F >mov ecx, esi
00462961 >call <MalwareD._UnregisterHotKey>
00462966 |. >pop esi
00462967 \. >retn
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!