.Net 爆破篇 之 MD Token预爆 + 运气【插件类完结】
前情提要
我近期发的东西
尽可能每个帖子都多少能有些解决问题的思路 并且 应该能从中学到点不一样的东西
而且大家看了不少 Hook 和 逆向算法,还有反射运用,是时候换点口味了。
那么 这期 就来看看 回归初心 直接爆破吧,有时候 看不懂其实也没啥,运气好就行。
比如这篇 就是 传统爆破文 知识点是 Token 定位
题外话
我个人而言 对Excel插件和VBA插件之类的 使用上没什么兴趣,平常工作中用不上
虽然近期发了一些帖子 但没有针对这个行业的意思
只是他们都刚好能拿来拓展一些 知识点 和 提高定位问题的能力。
这期应该也是 “国内” 的最后一期 以一个不是很完美的 爆破教程 收尾。
至于问为什么看着我像是都在Excel插件,因为 最近刚好看的是这些 而且这些我之前没接触过。
说到国外的库 可以参考
https://www.52pojie.cn/thread-1768897-1-1.html
里面提到都是咱已经研究过的,以我目前 阅读理解能力+工具 能完成破解的组件。
(感觉搞.Net相关的应该都能搞定这些)
有兴趣的可以留言,以后可以拿出来讲解一下。
好了回归正题!
本期主题
爆破!不用多解释。
MD Token 可以理解成.Net的元数据标识。
这里提及是可以拿它在 .Net爆破中做一个预演,预爆。
本期嘉宾
反正某人说版本已经很多了不差这一个,那就安排最新版练手。
aHR0cHM6Ly92YmF5eWRzLmNvbS8=
原版地址:https://pan.baidu.com/s/1jCh4BsE8D2rSxB34yoyyYA&pwd=aaav
备份地址:https://pan.baidu.com/s/1cKMLDc3zXIFUAnMr3ZODPg?pwd=52pj
准备工作
下载后打开查看。
功能正常 然后 点击授权信息 会有免费版的提示。
我们先 将 DLL 备份 一份。
然后拖到 dnspy 看是否能正常加载。
为了验证是否能进行 爆破 ,我们需要 先做一个操作就是,直接不该任何代码,但是对DLL进行一个保存操作 确保 能正常执行。
我们 通过 文件-保存模块
切到 MD写入选项
把红框位置的几项 全部勾上,然后 确定 开始写 Dll。
写完后 打开 Excel-VBA编辑器 看插件还能否正常加载。
如果它还在,恭喜你 这个插件是可以 尝试爆破 的。
当然 如果出现失败的情况 别急,你可以尝试 将 文件的最后修改时间 和创建时间什么的 改的和 之前备份的文件一样。
毕竟 有时候 鸡贼的作者 可能会检测一下 文件的变动时间来判断 你是不是对Dll进行了一个修改(比如 E灵试用版)
如果直接就不能保存,保存失败,那么抱歉,这个dll因为壳的原因不能进行爆破。
既然确认了这个插件 是能被“修改”的,那么我们开工。
开始分析
我们先搜一下关键词 比如 注册 激活 免费。
发现 一个结果都没有,那么肯定做了字符串保护。
那么我们用 de4dot 进行一个反混淆的处理,一般都能自动处理,但是这次讲一下怎么手动指定。
上图红框的 就是常见的字符串加密之后的样子。
我们导航过去之后能看到
函数上方 有一个 Token,这个 dnspy 里面被称为 MDToken, 一般函数字段什么的都有这个Token。
如果 保存dll 或者用 de4dot 去混淆脱壳时 附加了 --preserve-tokens
指令。
那么 脱壳后 的 dll 对应函数会保持 脱壳前相同的 MDToken。
是不是有了一个大胆的想法? 咱们先去反混淆后的Dll里面定位关键点,然后通过Token在未混淆的原始Dll里面进行爆破操作。
尽可能的降低对Dll造成的改动,避免直接使用脱壳后的dll而产生一些奇怪的问题。
那么开始吧~
我这里用的是 de4dot reactor 6.7
这里提一嘴,有的de4dot就算加了保持Token的指令也可能出现 脱壳后前后Token不一致的情况
这个自行选择好一点的版本吧
de4dot 加上两个指令
//脱壳后保持Token
--preserve-tokens
//字符串解密
--strtyp delegate --strtok 字符串解密函数的Token 图中是 0x06000991
//完整命令
de4dot "D:\Excel880\VBAxxxxxxPro\VBACodexxxxPro.dll" --preserve-tokens --strtyp delegate --strtok 0x06000991
然后在脱壳后的 dll 里面搜 一下关键词 注册 激活 免费 卸载 等
可以看到 好像 明面上的 逻辑 都和 Class113 有关。
大概率 它是一个授权类
再看一眼那个 枚举
明显是个 常见的鉴权枚举。
那么爆破思路就有了。
// Class113
// Token: 0x06000764 RID: 1892 RVA: 0x000062C2 File Offset: 0x000044C2
internal bool method_9()
{
return this.bool_0; //一个疑似过期判断的,强制改成 false 不过期
}
// Class113
// Token: 0x06000761 RID: 1889 RVA: 0x000062B1 File Offset: 0x000044B1
internal Class49.Enum1 method_6()
{
return this.enum1_0;//枚举这里爆破掉 强制返回一个非免费枚举
}
再多瞅一眼这个授权类
还返回两个日期
其中还看到了 vm,得都用上vm了,要不Shift+Delete吧?
或者咱们试试呗,至少能改的那个咱们给他改了呗。。。
// Class113
// Token: 0x0600075D RID: 1885 RVA: 0x0000628F File Offset: 0x0000448F
internal DateTime method_2()
{
return this.dateTime_0; //这个日期 给弄个最大值
}
我们所感就干,根据 这几个 Token 在 dnspy 里面通过 Ctrl+D 转到 MD标记 分别用 IL 修改代码
然后保存,咱们重启看看。
重启后发现 插件会加载,但是菜单按钮一闪就没了。
那应该是哪里还有检测,检测到咱们改了授权类型但是实际没校验过。
我们找找 取消卸载啥的。。。
这里 咱们找到一个 DisposeVBEAddin
翻一下调用 看到好像有个Api检查,然后 再查一下 发现这个Http请求函数 只有检查更新 和 这里用到,那么先干掉看看。
// Token: 0x060007FF RID: 2047 RVA: 0x00030D0C File Offset: 0x0002EF0C
internal static string smethod_3(string string_4)
异常处理清空,直接返回空字符串。这样两种调用都兼容了。
保存并重启后 问题仍在。。。
唉,可惜不是这里,虽然这里保险 但是还是没能阻止 按钮的消失。 剩下的就是靠运气了。。。
卸载没找到 那么咱们就来找 激活 或者 英文 Active,估计在激活窗口的部分有检测。。。
然后 咱们就看到一个
为什么要 秒 被 30 取模的时候触发一个线程?很可疑啊。。。
还是调用的 Class113,那可是个授权类啊。。。难道是在自检?!
// Token: 0x0600076F RID: 1903 RVA: 0x0002C7F0 File Offset: 0x0002A9F0
internal void method_16()
{
object[] array = new object[] { this };
Class69.smethod_0().method_139(Class69.smethod_1(), "Z7%4Q0.\\c7", array);
}
我们再看看引用
基本都是在初始化前或者别的组件激活前调用的。大概率是什么校验没跑了!
可惜 代码VM了,怎么办? 就这么放弃吗??? 不!咱们莽一手!反正这个函数是个Void的 没有返回值,咱们整个给它拿掉!
拜拜了您内~ 让我们期待下结果如何!
结果
激动的心 颤抖的手 VBA编辑器打开了!
它没消失!它还在!咱们赌赢了!(maybe
再看看 授权信息!
和咱们之前想的大差不差!
再看看VIP功能!
反正 免费版点会提示,现在没提示 能让导出了!
PS.至于是不是离线类功能都能用了我不清楚,我对这些东西也不熟。
声明
本文内容仅供学习交流,请勿用于商业或非法用途!
尾声
感觉拿一期 最基础的爆破收尾 也挺好的。
可能有些小白会觉得我是什么大牛,或者一些软件作者圈的觉得我砸了他们的饭碗。
我就是一普通.Net野路子程序员,现在出去面试可能都找不到工作的那种。
我甚至没用什么高端的技术,我也不会脱壳,都是 工具脱壳 然后 自己只做代码分析。
与其和我较真,不如多完善下自己。
发点思路就觉得是重拳,天塌了。
外面注册机破解版满天飞就不管了?
这些思路又不是针对某个别应用,主要是去掉脱壳,基本就这么三板斧。
刚好又适合当案例,如有得罪,只能说声抱歉了,保证没有下次了~
最后
本人不接单
本人不接单
本人不接单
请不要再私信有偿破解什么的,烦了我直接投诉举报(不知道这种管不管
有这功夫你还不如好好看看帖子学学说不定自己就能弄了
将来等着c蹭你们的思路的说!