.Net 爆破之 MDToken预爆 + 运气【插件类完结篇】
本帖最后由 pjy612 于 2023-4-29 11:33 编辑## .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 加上两个指令
```cmd
//脱壳后保持Token
--preserve-tokens
//字符串解密
--strtyp delegate --strtok 字符串解密函数的Token 图中是 0x06000991
```
```cmd
//完整命令
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蹭你们的思路的说!
***
本帖最后由 pjy612 于 2023-5-19 09:54 编辑
wslq 发表于 2023-5-19 09:04
打开程序先看到加密的程序,然后导航过去才看到 Token 但是导航的时候需要输入 Token 这个是哪里获取的?另 ...
Token 的作用之一,针对不能大面积去混淆和改动的程序 进行局部破解。
有一个混淆的程序A,和它去混淆但是 保留Token 的 程序B。
你在B里面知道可以修改 某个函数 达到破解的目的之后。 用 B里面 指定函数上方的 Token。
在 A 程序中 通过 转到Token 快速导航到 A程序中的 指定函数。
然后 修改 A 中的 函数 达到 破解的目的。
你就假设
一个程序集是一个 公司,每个函数都是一个人,组织架构 就是 程序结构。
无论 程序结构 怎么混淆(组织架构怎么变),函数怎么变(你这个人怎么换位置,包括人怎么整容),人的身份证都是不变的(去混淆 但保留 Token 的场景下,Token 就是身份证)
{:301_1007:} 沙发是我的,匿了~ 谢谢分享 这个属于高难度的,厉害 zhanglei1371 发表于 2023-4-29 21:33
这个属于高难度的,厉害
侥幸,别的能调试的话,还能分析下 VM。
Excel 和 VBA 一点都不熟之前没摸过。。。所以纯凭感觉了。。。{:301_978:} 厉害了,棒 这个厉害看看
感谢大佬的 辛勤之作好好学习 一下 谢谢大佬分享! 感谢分享..