-
-
[原创]HIDEIT之PEDIY
-
发表于:
2011-9-1 13:18
4924
-
【文章标题】: HIDEIT之PEDIY
【文章作者】: wusha
【软件名称】: HIDEIT
【保护方式】: 无壳
【编写语言】: Microsoft Visual C++ 4.x
【使用工具】: PEID 0.95 Olldbg1.10 lordpe
【操作平台】: XP sp3
【软件介绍】: 非常好用的一个隐藏窗口的小工具
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
1、起因:
最近在公司偷偷用PUTTY建立SSH来访问外网,可又担心被人发现,所以翻出以前的一个非常好用的隐藏窗口的小工具HIDEIT,并设置成启动后在系统托盘,但有一次explorer.exe崩溃,结果HIDEIT就不见了,但进程还在,被它隐藏的窗口也没办法正常恢复出来了(强制结束HIDEIT进程可以恢复所有窗口,但感觉不爽),所以就想动动手术
2、分析:
首先查找资料,在创建任务栏时,系统会以字符TaskbarCreated注册一个全局消息,并向所有顶级窗口广播该消息,因此在exporer.exe重建任务栏时,只要我们的程序捕捉到该消息,重建托盘图标即可,当然首先我们必须知道该消息的ID,这个需要使用函数RegisterWindowMessage函数,原型如下
UINT RegisterWindowMessage(
LPCTSTR lpString // message string
); 因为系统已经注册了该消息,所以我们调用函数返回的是该消息的唯一ID
重建托盘图标需要调用函数Shell_NotifyIcon,原型如下
BOOL Shell_NotifyIcon( DWORD dwMessage,
PNOTIFYICONDATA lpdata
);
查看程序的输入表,这两个函数都已经有了,所以不用另外添加了
3、开始PEDIY:
首先用lordpe查看节信息,发现.text节剩余空间很小,只有17200-17196=4个字节,所以必须要添加新节,如.wei,大小为200h
如图
保存后运行报错“不是有效的win32程序”,查资料了解到还需要更改文件大小,于是用winhex在文件末尾追加了512字节0,重新运行正常
使用OD载入程序,使用消息断点来到消息处理函数0040CC12处
0040CC12 /. 55 PUSH EBP
0040CC13 |. B8 01000000 MOV EAX,1
0040CC18 |. 8BEC MOV EBP,ESP
0040CC1A |. 817C24 0C 600>CMP DWORD PTR SS:[ESP+C],360
0040CC22 |. 74 1A JE SHORT HIDeit.0040CC3E
0040CC12 . 55 PUSH EBP
0040CC13 . B8 01000000 MOV EAX,1
0040CC18 . 8BEC MOV EBP,ESP
0040CC1A .- E9 E1130200 JMP HIDEIT.0042E000
0040CC1F 90 NOP
0040CC20 90 NOP
0040CC21 90 NOP
0040CC22 . 74 1A JE SHORT HIDEIT.0040CC3E
....
0042E000 837C24 0C 01 CMP DWORD PTR SS:[ESP+C],1 添加代码处理WM_CREATE消息,得到任务栏重建消息ID,并保存在0042e200处
0042E005 75 10 JNZ SHORT HIDEIT.0042E017
0042E007 68 90E04200 PUSH HIDEIT.0042E090 ; ASCII "TaskbarCreated"
0042E00C FF15 2C484200 CALL DWORD PTR DS:[<&USER32.RegisterWind>; user32.RegisterWindowMessageA
0042E012 A3 00E24200 MOV DWORD PTR DS:[42E200],EAX
0042E017 8B4424 0C MOV EAX,DWORD PTR SS:[ESP+C]
0042E01B 3B05 00E24200 CMP EAX,DWORD PTR DS:[42E200] ;判读消息是否为任务栏重建消息
0042E021 75 0D JNZ SHORT HIDEIT.0042E030
0042E023 68 00E14200 PUSH HIDEIT.0042E100 ;NOTIFYICONDATA结构指针(数据见后面)
0042E028 6A 00 PUSH 0 ;添加图标
0042E02A FF15 C4464200 CALL DWORD PTR DS:[<&SHELL32.Shell_Notif>; shell32.Shell_NotifyIconA
0042E030 817C24 0C 60030>CMP DWORD PTR SS:[ESP+C],360
0042E038 - E9 E5EBFDFF JMP HIDEIT.0040CC22
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!