吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7972|回复: 15
收起左侧

[.NET逆向] -=Msdn5 君临 =- Net破解里不得不说的秘密 一

[复制链接]
mcevilrock 发表于 2015-8-25 00:53
-=Msdn5 君临 =-  Net破解里不得不说的秘密系统环境:
                   Win7x64
调试工具:
                   Vs2010
                   OllyDbg
0x00 .Net运行机制
         0.1   OEP是啥
                   AddressOfEntryPoint              说白了就是程序入口点
                   程序第一次进入的地方,这玩意儿就是OEP.
                   学习更多的知识,请自行搜索PE结构
         0.2   Net的OEP长啥样?
在.net编程开发中也就是Main函数  



1Main.jpg













咱们在汇编下看,OEP长啥样,
打开VS 2010 在入口函数下断点(F9)
记得生成的工程得是X86..不然anycpu会生成X64..回头看汇编的时候那酸爽..
工程,右键,属性..选择生成选项卡,然后切换到X86模式

2X86模式.jpg
F5 让程序跑起来

3跑程序.jpg
此时对着空白处右键   “转到反汇编

4转汇编.jpg
到反汇编选项卡中.可以看见熟悉的汇编代码了…
从第一个push 开始,这就是.net OEP的长相..是不是看起来很怪.

5VS下的OEP.jpg
然后咱们还需要一些配置…打开堆栈,寄存器,还有模块
7 模块预览.jpg


接着你就会看见和OD差不多的界面了…..
就是堆栈有点不一样,看起来很怪.不会直接显示堆栈信息,因为有CLR的交互.


VS 先不要关闭…
  
这时候使用OD载入程序,啥也断不下来.程序绝逼跑飞…
8 OD载入.jpg

为啥会这样…?
载入程序至CFF
选择引入目录,可以看见就加载了  mscoree.dll , 而且就一个函数 _CorExeMain

9 CFF分析.jpg

默认_CorExeMain可不会被断下来..
接着在Command 窗口bp _CorExeMain  下这个函数的断点.
10 OD下断.jpg
然后重新载入程序.ctrl+f2

别着急,向下翻翻.注意下当前的模块,也就是程序的领空 现在并不是在程序领空
C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
这玩意儿的作用:
在用reflector查看dotnet类库源代码时经常会遇到一些函数看不到源代码,只是标记成内部实现。这些函数基本上实际实现的代码就在这个dll里面,是native实现的。如反射功能的相关对象以及实现就是这里面。
也就是常说的CLR环境.
net程序的执行主要由它来完成,还有另外一个重要的文件mscorjit.dll 被它所调用。
现在我们把mscorwks.dll 分成两个区 A 和 B,
  A 是主要执行引擎(ee)和native 实现。
  B 是ee调用jit的处理部分。
net2.0的反射功能是在A区实现的。加密壳如果要实现完美的兼容性(即不破坏DotNet本身的任何功能和特性)就应该在 A 区挂入其内核。
  在A区有一个函数实现获取方法体的内容,ee层需要取得方法体内容是通过这个函数来获得的。因此完美的方法就是替换这个函数,用加密壳的内核实现这个函数。

  这样的最大缺点就是反射漏洞,因为反射也是调用这个函数取得方法体的。

  在这个基础上要要破坏反射有什么办法呢?
  在反射是需要调用Method的成员函数GetMethodBody,这个函数是native实现的,就在mscorwks。dll中,因此加密壳可以hook这个函数做一些预防处理。
  但是效果不理想,咱们可以恢复这个函数的原始实现.
在这个基础上要要破坏反射有什么办法呢?
  在反射是需要调用Method的成员函数GetMethodBody,这个函数是native实现的,就在mscorwks.dll中,因此一些混淆工具可能hook这个函数做一些预防处理,所以在它干活之前你懂的….



向下翻翻,就走到最终被编译的位置了.
Push eax的地方,其实就是加载ctor了…
11 ctor.jpg

先不着急,一直向下走.
12 CLR加载代码.jpg

6928F523   E8 33FAFFFF     callmscorwks.6928EF5B   这个地址就是程序要加载起来运行了..
F7单步 跟进这个Call
然后使用API断点下CreateWindowExA 也可以bp下

13 CreateWindowExa.jpg


断下后,第一个Call就是在准备创建窗口了,走完这个Call Net程序就是真正意义上运行起来了.
14 主窗口创建.jpg

回到模块,进入程序领空
15 回到程序领空.jpg

可以尝试分析下代码,第一句就是加载_CorExeMain函数.不过在这下断点没任何用…
16 进入程序领空.jpg

向下翻翻,你可以看见很多好东西..^_^
当程序跑起来的时候你会看见很多叫ctor的方法名,
辣么,ctor 又是啥玩意儿…将程序载入到ILSPY,用我汉化的那个也行,或者原版的也行;
任意一个反编译.NET的程序都可以看见.
然后转换到IL代码..


其实每一次调用的东西都会走到底层去,可以清楚的看到是由谁来实现的这些方法.

现在,我们来改造一下程序代码.更好的理解.net运行的汇编

窗体很简单.


18 界面设计.jpg





窗体加载完成后(OnLoad的时候)弹个提示框,顺手写个点击域名打开论坛的方法.(调用默认浏览器)
19 界面代码.jpg

顺便在26行下断.启动程序后直接右键转到反汇编
20 转到反汇编.jpg

注意下
00000038  mov        eax,dword ptr ds:[034020A0h]


因为我们没法看到堆栈信息,但是.Net推送这些信息的时候都会存放在Eax寄存器
按照之前的方法打开寄存器窗口.复制当前EAX的值.然后在内存窗口监视
21 分析代码.jpg

在内存窗口中右键,选择Unicode文本,可以看见当前的信息了.
22 查看具体信息.jpg

用OD对比调试下
记得下MessageBoxW 的断点






堆栈信息可以看见,前面几个push获取文字信息的地址,最后得到欢迎消息
23 OD 断点.jpg

可以发现,在VS调试程序的时候和OD完全不是一个样.
OD调试的是带着CLR的.而VS调试是直接得到当前的汇编语句,如果希望更深刻的理解Net汇编后还是推荐大家用VS调试..当然,爆破除外.

再次改造代码.做个简单的判断.继续到反汇编
24 VS分析.jpg
25 VS汇编分析.jpg

有对照的看,是不是省事多了..

将123的值放到了EDX



26 VS汇编分析123.jpg



接着你可以很清晰的看见判断的正确数据.

27 VS汇编分析具体数据.jpg
28 VS分析jnz.jpg

前面两个mov 分别把欢迎消息和123 分别给了edx和ecx.
然后下面的CALL就开始比较.接着给eax赋值.这里等同Z标志位是0还是1.
各位看官在自行尝试的时候会发现
00000066  cmp        dword ptr [ebp-48h],0
这里直接就会跳到false
也就是,并没有执行jnz的判断
0000007d  nop
                MessageBox.Show(str);
0000007e  mov        ecx,dword ptr [ebp-44h]
00000081  call       6538E980
原因就是因为执行了cmp,其他jnz就已经得到了标志位..所以如果不明白请自行百度下CMP指令
换到OD看下







在这之前,先改造下代码.让它先弹出,这样比较好分析后面的代码


29 改造VS代码.jpg




弹窗时可以自己算下在内存里欢迎信息的位置.

30 OD分析.jpg
F7出CALL.
进入主线程

31 OD分析2.jpg
F9 继续跑飞程序,然后会在下一次弹窗被断下.然后单步出CALL.上面就是判断的地方了.
当然,如果追CM的码可以用回朔慢慢分析.遇见JMP千万别直接就跑了..OD调试起来很费劲.还有要注意MOV EDX 和mov exc 会经常把判断和交换的数据丢在这俩寄存器.
想知道如何追码的,看画眉的帖子吧…http://www.52pojie.cn/thread-365683-1-1.html

代码以及文档打包下载
Msdn5Unpack.zip (1.6 MB, 下载次数: 65)


由于作者身在祖国的敏感地区,所有运营商无耻的屏蔽了各种分享(百度云,腾讯云,360云盘)...且屏蔽52破解(发贴和看内容都得出国...)所以只能上传附件了..有热心的小伙儿来个分享,不胜感激.

免费评分

参与人数 5威望 +1 热心值 +5 收起 理由
山顶的一棵草 + 1 回头看汇编的时候那酸爽!
Hmily + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
蚯蚓翔龙 + 1 不错,希望继续
ImbaQ + 1 我很赞同!
lpxx + 1 已答复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| mcevilrock 发表于 2015-9-1 13:04
Hmily 发表于 2015-8-27 18:51
同学,是原创还是转载?如果是原创把分类改一下。

是原创,当时投在一蓑了..所以也不知道加啥合适...
下期教程就放52啦
xjwebs 发表于 2015-9-18 09:09
mcevilrock 发表于 2015-9-1 13:04
天空仔.俩都是我.  只不过ID不一样了

哇咔咔,我说怎么这么像,这教程太精彩了,怒赞
spguangz 发表于 2015-8-25 01:18
lpxx 发表于 2015-8-25 01:28
初恋女友叫王美萍,感概之。
gdtangwenxin 发表于 2015-8-25 01:35
哇 第一次离楼主那么近   
2317909768 发表于 2015-8-25 01:45
膜拜大神啊
litia6 发表于 2015-8-25 06:07 来自手机
学习一下,谢谢楼主
ImbaQ 发表于 2015-8-25 09:26
你这要出个国得翻多少道墙啊
hua5551 发表于 2015-8-25 12:16
开贴,回帖。。楼主辛苦
ghostfish 发表于 2015-8-25 12:37 来自手机
大神让我明白了很多
蚯蚓翔龙 发表于 2015-8-25 12:58
不错帖子哦
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 17:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表