【文章标题】: 突破封锁线:第二章--资源篇
【文章作者】: Austin
【作者邮箱】: austiny.cn@gmail.com
【软件名称】: 神州数码网络客户登陆程序
【软件大小】: 不重要
【下载地址】: 自己搜索下载
【加壳方式】: UltraProtect 1.x
【保护方式】: 加壳 网络封禁
【编写语言】: VC6.0
【使用工具】: resHacker DT_FixRes ResFixer LordPE
【操作平台】: Windows2003
【软件介绍】: 神州数码小区宽带网络登陆客户端,诸多限制
【作者声明】: 技术交流中。。。
--------------------------------------------------------------------------------
【详细过程】
一、(换台)前情回顾
上一回讲到,神州数码(DIGI)确实已经脱光了,我们来做点什么。。。
二、(YY中)。。。
DIGI的主界面长得象这个样子:
________________________________________________
|________________________________________________|
| |
| |
| |
| L O G O |
| |
| |
| | 弹出菜单象这个样子:
| | ________________
|________________________________________________| | |
| _____________________________ | | 显示连接状态 |
| 用户名: |_____________________________| | | |
| _____________________________ | | 断开当前连接 |
| 密 码: |_____________________________| | |________________|
| | | |
| X 保存密码 自动加载 X 自动连接 | | 属性... |
|________________________________________________| | |
| | | 关于... |
| -------- -------- -------- | |________________|
| | 连接 | | 退出 | | 属性 | |
| -------- -------- -------- |
|________________________________________________|
我们的主要任务是在主界面增加一个按钮,弹出菜单中增加一项,以调用我们自己的设置对话框。
(所以准备把DIGI送去韩国,注意,不是泰国)
整容后的DIGI应该长成这个样子:
________________________________________________
|________________________________________________|
| |
| |
| |
| L O G O |
| |
| |
| | 弹出菜单象这个样子:
| | ________________
|________________________________________________| | |
| _____________________________ | | 显示连接状态 |
| 用户名: |_____________________________| | | |
| _____________________________ | | 断开当前连接 |
| 密 码: |_____________________________| | |________________|
| | | |
| X 保存密码 自动加载 X 自动连接 | | 高级... |
|________________________________________________| |________________|
| | | |
| -------- -------- -------- -------- | | 属性... |
| | 连接 | | 高级 | | 退出 | | 属性 | | | |
| -------- -------- -------- -------- | | 关于... |
|________________________________________________| |________________|
注意我们加入的“高级”字样
三、(热身)左三圈右三圈
先用ResFixer(很厉害的资源修复工具,不过我们只用它来验验货而已)打开上一章得到的DIGI_DUMP_.EXE文件。
果然,果然,红色的显示部分资源(主要是几个Icon和String还有VersionInfo)被放在了.perplex段,
而大多数资源(Dialog和Menu,都是我们喜欢的),被放在了.rsrc段,
果然是武林中最邪恶、最阴险的面目全非掌。这样的跨段资源在修复以前,是没法直接修改的。
哎,我们只好使出失传已久的绝学--还~我~漂~漂~拳~。
用DT_FixRes中的FixResDemo.exe(一代豪杰dREAMtHEATER的作品,真是,一个demo都这么帅)打开DIGI_DUMP_.EXE。
不多说,直接用"Fix Resource"来修复。(显示Resource was fixed successfully,成功)
用LordPE打开修复后的DIGI_DUMP_.EXE,我们可以看到程序中又多了一个.rsrc段。
不过,别的段的名字都被抹掉了,不好看。
没关系,我们再补一拳。在LordPE中将各段名字一一改回。
地址 长度
.text 00410000 10000
.rdata 00411000 4000
.data 00415000 204000
.oldrsrc 00619000 3000
.perplex 0061C000 1D000
.newimt 00639000 1000
.rsrc 0063A000 3000
(秋香,你变漂亮了耶)
四、(行动)Action!
用ResHack打开修复好的DIGI_DUMP_.EXE,找到ID为102的对话框,即是我们要找的对话框:
//////////////////////////////////////////////////////////////////////////
102 DIALOGEX 0, 0, 215, 196
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "连接网络--DigitalChina weba client"
LANGUAGE LANG_CHINESE, 0x2
FONT 9, "宋体"
{
CONTROL "", 1042, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 51, 113, 151, 12
CONTROL "", 1043, EDIT, ES_LEFT | ES_PASSWORD | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 51, 130, 151, 12
CONTROL "保存密码", 1044, BUTTON, BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 51, 147, 44, 8
CONTROL "自动加载", 1045, BUTTON, BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 102, 147, 47, 9
CONTROL "自动连接", 1046, BUTTON, BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 156, 147, 45, 8
CONTROL "连接", 1001, BUTTON, BS_DEFPUSHBUTTON | BS_NOTIFY | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 67, 171, 41, 14
CONTROL "退出", 2, BUTTON, BS_PUSHBUTTON | BS_NOTIFY | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 117, 171, 41, 14
CONTROL "属性", 1000, BUTTON, BS_PUSHBUTTON | BS_NOTIFY | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 166, 171, 41, 14
CONTROL "", 1026, STATIC, SS_BITMAP | WS_CHILD | WS_VISIBLE, 7, 7, 15, 14
CONTROL "", -1, BUTTON, BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 7, 99, 201, 62
CONTROL "用户名:", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 14, 117, 35, 11
CONTROL "密 码:", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 14, 133, 35, 11
CONTROL "", -1, STATIC, SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 7, 7, 201, 87 , 0x00000020
}
//////////////////////////////////////////////////////////////////////////
一堆代码,不习惯也没关系,ResHack有自带的可视化编辑器。最后改成这样:
//////////////////////////////////////////////////////////////////////////
102 DIALOGEX 0, 0, 215, 196
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "连接网络--DigitalChina weba client"
LANGUAGE LANG_CHINESE, 0x2
FONT 9, "宋体"
{
CONTROL "", 1042, EDIT, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 51, 113, 151, 12
CONTROL "", 1043, EDIT, ES_LEFT | ES_PASSWORD | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 51, 130, 151, 12
CONTROL "保存密码", 1044, BUTTON, BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 51, 147, 44, 8
CONTROL "自动加载", 1045, BUTTON, BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 102, 147, 47, 9
CONTROL "自动连接", 1046, BUTTON, BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 156, 147, 45, 8
CONTROL "连接", 1001, BUTTON, BS_DEFPUSHBUTTON | BS_NOTIFY | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 171, 41, 14
CONTROL "退出", 2, BUTTON, BS_PUSHBUTTON | BS_NOTIFY | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 112, 171, 41, 14
CONTROL "属性", 1000, BUTTON, BS_PUSHBUTTON | BS_NOTIFY | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 162, 171, 41, 14
CONTROL "", 1026, STATIC, SS_BITMAP | WS_CHILD | WS_VISIBLE, 7, 7, 15, 14
CONTROL "", -1, BUTTON, BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 7, 99, 201, 62
CONTROL "用户名:", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 14, 117, 35, 11
CONTROL "密 码:", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 14, 133, 35, 11
CONTROL "", -1, STATIC, SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 7, 7, 201, 87 , 0x00000020
CONTROL "高级", 1005, BUTTON, BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 62, 171, 41, 14
}
//////////////////////////////////////////////////////////////////////////
调整了各个按钮的位置,加入了"高级"按钮。
用同样的方法,对menu资源进行修改:
修改前:
//////////////////////////////////////////////////////////////////////////
282 MENU
LANGUAGE LANG_CHINESE, 0x2
{
POPUP "托盘菜单"
{
MENUITEM "显示连接状态", 32771
MENUITEM "断开当前连接", 32772
MENUITEM SEPARATOR
MENUITEM "属性...", 32773
MENUITEM "关于...", 32774
}
}
//////////////////////////////////////////////////////////////////////////
修改后:
//////////////////////////////////////////////////////////////////////////
282 MENU
LANGUAGE LANG_CHINESE, 0x2
{
POPUP "托盘菜单"
{
MENUITEM "显示连接状态", 32771
MENUITEM "断开当前连接", 32772
MENUITEM SEPARATOR
MENUITEM "高级...", 32779
MENUITEM SEPARATOR
MENUITEM "属性...", 32773
MENUITEM "关于...", 32774
}
}
//////////////////////////////////////////////////////////////////////////
改完之后,点击"Compile Script",然后用"Show Dialog"察看无误后保存。
(正宗人造美女出炉!正是出水芙蓉~ == ~芙蓉? ~芙蓉?!~芙蓉!! @#$%^&*()_ 。。。) 120,谢谢。
五、(闲暇)喝杯咖啡先
再次运行整容好的DIGI_DUMP_.EXE,我们的"高级"按钮跃然“纸”上,菜单中也有了高级选项。(真是高级啊)
阶段性成果,文件名改为DIGI_DUMP_RES.EXE。
资源修改成功!!
--------------------------------------------------------------------------------
【经验总结】
至此,已经成功的修改了脱壳后的神州数码的资源,为后续的破解和改善打开了局面。
资源修改中的关键点有:
1. 有些壳会将资源跨段存放,或者资源没有位于最后一段,为修改带来不便,应先修复再修改。
2. 修改资源是很多工作(如汉化、功能增强等pediy)的基础。
3. 资源修改是一件艺术工作多于是一件技术工作。
突破封锁线:第二章--资源篇 [完]
谢谢您耐心的看到这里,在下一章--网络篇中,将详细讲述如何跟踪和分析网络应用程序的工作原理:发挥我们的长处,弥
补它的漏洞。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2006年04月28日 22:55:09
[注意]APP应用上架合规检测服务,协助应用顺利上架!