LoadIcon中定位icon文件
2020-02-26 18:58:00 Author: bbs.pediy.com(查看原文) 阅读量:393 收藏

之前写在52pojie上了,结果整改给删除了,今天发现后台还能看到,放到这边做个笔记。

0:01,进程分析

procexp.exe中看到主要有5个进程:
YoudaoDict.exe.
+---YoudaoDictHelper.exe
+---YoudaoEH.exe
+---YoudaoWSH.exe
+---YoudaoDictHelper.exe
并不太清楚它们的分工,不过从结构看YoudaoDict.exe.应该是主功能进程,所以先从它开始分析。

0x02 , IDA加载:

找到YoudaoDict.exe文件,进行IDA载入,等待代码分析结果。
从反编译识别的函数信息可以看到比较多的CEF前缀信息,先找一下相关信息:
1, 相关的github工程:https://github.com/karllen/cef3-duilib-YDDemo
2, 相关的介绍:CEF(Chromium Embedded Framework)是在C++客户端里面嵌入webkit。
代码仓库:https://bitbucket.org/chromiumembedded/cef
大体知道词典使用的是什么框架进行开发了,从上面的框架信息,初步判断是使用C++ 和 JS开发框架,如果业务逻辑使用JS实现,应该就不需要逆向分析YoudaoDict.exe文件了。
所以接下来去查看安装目录信息。

0x3, 安装目录:

从目录中查找到一些关键的目录文件信息,结构如下:
+---8.5.1.0
+---skins
+---strings.xml # 控件名和中文对应定义。
+---main_layout.xml # 定义主界面控件和布局。
+---main_wnd_layout.xml
+---mini_wnd_layout.xml
+---pop_wnd_layout.xml
+---resultui
+---js
+---manifest.js
+…
这样基本验证了上面的猜测,业务逻辑都是在JS和XML中定义,其中string.xml定义了控件名和中文映射。XXX_layout.xml文件定义了界面布局信息,其中main_layout.xml是主界面的布局定义。
所以基本可以考虑通过编辑main_layout.xml来裁剪界面上的功能(即可以达到去广告的目的)。

0x4, 功能裁剪:

有几个功能觉得在本地不需要,所以考虑进行裁剪:
1, 人工翻译
2, 同传
3, 精品课
4, 广告
在string.xml中通过对应中文找到控件名,再进行删除就OK了,其中广告的清除有点麻烦,可以通过Adv关键字进行清除,测试下来OK!具体结果见附件XML文件,进行替换文件后,重启词典可验证。
效果图:
图片描述

0x05, VIP权限:

已经去广告已经是明显告诉有技术水平的同学,可以看XML和JS来修改词典的行为了,获取VIP也并不复杂,对文件进行字符查找“vip”,找到有关的文件lexicon.min.js,

function n(t, e, a, i) {
var s = this;
s.vipInfo = u.default.get("dict_vipInfo")
{}, i ? ydk.isLogin({
success: function (i) {
i.isLogin ? s.vipInfo.isVip ? s.eableDownloadResource(t, e, a) : s.openDialog() : ydk.login({
success: function (i) {
"success" == i.status && (s.vipInfo.isVip ? s.eableDownloadResource(t, e, a) : s.openDialog())
}
})
}
}) : s.eableDownloadResource(t, e, a)
}

可以看到获取vip信息是通过u.default.get("dict_vipInfo"),那么set操作呢,通过dict_vipInfo查找,找到文件app.js:

}), ydk.onVipInfoGot({
success: function (t) {
console.info("ydk.onVipInfoGot:" + (0, a.default)(t));
var n = {isVip: !0, expire: !0, auto: t.auto, open: t.open}; //已经添加了越权修改
O.default.set("dict_vipInfo", n), e.$store.dispatch("setIsVip", t.isVip)
}
}), ydk.onLoginStatusChanged({
success: function (t) {
if (console.info("ydk.onLoginStatusChanged:" + (0, a.default)(t)), 0 == t.status) {
var n = {isVip: !0}; // 已经添加了越权修改
O.default.set("dict_vipInfo", n), e.$store.dispatch("setIsVip", !1)
}
e.$store.dispatch("setIsLogin", t.status)
}

可以找到对应的VIP权限信息修改,只要将本来为false的标识改为true,就OK了,不过这里作了转换,用“!0”和“!1”表示。
修改后,测试下载VIP离线词库(需要有用户登录,不需要VIP),效果:
图片描述
有技术的同学自己玩,附件是我修改后的内容。

0x06, 后续:

考虑到软件会自动更新,所以为了避免main_layout.xml被更新,进行了备份,同时配置关闭“自动更新”。
说明:附件是基于当前版本修改后的结果,版本信息:
图片描述

[公告] 防守篇征题进行中!看雪2020 KCTF春季赛防守方征题中 !

最后于 1天前 被nevinhappy编辑 ,原因:


文章来源: https://bbs.pediy.com/thread-257816.htm
如有侵权请联系:admin#unsafe.sh