钉钉DingTalk本地网页资源解密更新(x64)
之前关于钉钉本地web_content资源解密的有些变动,再次记录下。此次钉钉版本为7.0.20,变成了64位版本
1. 关于web_content.dat
文件名改成了web_content.dat,加密方法没变
2. 调试钉钉找出解密key
需要使用x64dbg调试DingTalk.exe
-
方法一、在CreateFileW下断点,F9运行多次后,当出现web_content.pak时,向上回溯搜索字符串 web_content.pak 的引用,可以找到相关代码,略繁琐
-
方法二、待模块MainFrame.dll加载后,在内存窗口模块MainFrame.dll中Ctrl+B使用ASCII查找 web_content.dat,找到后记录下字符串地址,然后到CPU窗口查找地址常量即可快速定位到相关代码。单步跟踪即可。
入参需要版本参与计算,可以从文件 C:\Program Files (x86)\DingDing\main\current_new\configurations\staticconfig.xml 这个配置文件里的 VersionString 获取
<?xml version='1.0' encoding='utf-8'?>
<staticconfigs>
<item id="VersionString">7.0.20-Release.4119105</item>
<item id="ExeFileName">DingTalk.exe</item>
<item id="AutoRL">75</item>
<item id="LgTOut">10</item>
<item id="HttpTimo">15</item>
<item id="BottomFuncPanelSlotHeight">27</item>
<item id="SupportRollBack">true</item>
<item id="ChannelD">201200</item>
<version_context cnalichn="alitalk" cntaobao="normal" default="normal">
<compatible>
<normal />
<alitalk />
</compatible>
</version_context>
<item id="RealmName">test.adingding.com</item>
</staticconfigs>
3. 加密算法,代码实现
具体计算过程很简单,从版本号的MD5里截取了中间9个字符:
version = ’ 7.0.20-Release.4119105’
md5(version) = c4715dd3d71b
58c57bd3a1af148a6ff7,
那么密码就是 md5(version)[3:12] = 15dd3d71b
python计算脚本如下,保存为passwd.py:
import sys
import hashlib
if __name__ == '__main__':
if len(sys.argv) == 2:
args = sys.argv[1:]
version = args[0] # b'7.0.20-Release.4119105'
md5 = hashlib.md5()
md5.update(version.encode('utf-8'))
ver_hash = md5.hexdigest()
print(ver_hash[3:12])
命令行下执行
> passwd.py 7.0.20-Release.4119105
> 15dd3d71b
得到密码了,直接以zip格式解压就可以为所欲为咯…