pjy612 发表于 2023-4-28 18:12

.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:48

本帖最后由 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 就是身份证)



pjy612 发表于 2023-4-28 18:19

{:301_1007:} 沙发是我的,匿了~

lhtzty 发表于 2023-4-29 21:30

谢谢分享

zhanglei1371 发表于 2023-4-29 21:33

这个属于高难度的,厉害

pjy612 发表于 2023-4-29 21:43

zhanglei1371 发表于 2023-4-29 21:33
这个属于高难度的,厉害

侥幸,别的能调试的话,还能分析下 VM。
Excel 和 VBA 一点都不熟之前没摸过。。。所以纯凭感觉了。。。{:301_978:}

znc940210 发表于 2023-4-29 21:43

厉害了,棒

jun2002939 发表于 2023-4-29 22:26

这个厉害看看

liuwenxuan 发表于 2023-4-30 01:02

感谢大佬的 辛勤之作好好学习 一下

wangwh27 发表于 2023-4-30 01:08

谢谢大佬分享!

uzcool 发表于 2023-4-30 01:09

感谢分享..
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: .Net 爆破之 MDToken预爆 + 运气【插件类完结篇】