首页
社区
课程
招聘
[求助]怎样去除这个.NET控件的DEMO广告
发表于: 2009-7-18 00:36 14948

[求助]怎样去除这个.NET控件的DEMO广告

2009-7-18 00:36
14948
今天遇到一个.NET控件,分析中不能发现DEMO广告文字,请高手帮忙分析一下在什么命名空间及类中能发现它,这个可能有挑战性,有一定难度,渴望高手来分析及了解一下这个控件,同时也能大家知道.NET加密是怎样形成的,谢谢大家。。。

文件有点大,方便下载和有时间的高手请下载:

http://www.xun6.com/file/aa982e8a7/spire.xls%28net20%29.zip.html

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (25)
雪    币: 93
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
可以自己写个程序使用反射调用类似于下列代码中的<Module>::a(string, int32)函数进行解密。

    L_000e: ldstr "\u****\u****\u****\u****\u****"
    L_0013: ldloc num
    L_0017: call string <Module>::a(string, int32)
上传的附件:
2009-7-18 03:01
0
雪    币: 83
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
@tease
能告诉在哪里call 这个地方?我发现有好多好多地方call 这里啊,或能告诉 这 L_000e: ldstr "\u****\u****\u****\u****\u****" 具体是什么字符?

再次谢谢老师
2009-7-18 07:23
0
雪    币: 83
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
@tease
老师,,能说一下你分析的思路和想法,就是怎样为什么从某个地方call这里 <Module>::a(string, int32)
2009-7-18 08:09
0
雪    币: 149
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
1。“使用反射调用”,这个是好方法,巩固了知识又达到了目的
2。如果这个程序是dotfuscator混淆的 ,也可以使用现成的工具DotFuckScator,效果不错的
2009-7-18 09:22
0
雪    币: 93
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
IL代码中ldstr 用于读取一个字符串,建立System.String的实例,并入栈。
通过IL代码来看,当字符串入栈后,并没有立刻使用这个字符串,而是将字符串传入了<Module>::a(string, int32) 的方法中返回一个新的字符串。最后新的字符串再用于实际的操作,而且每次字符串调用的都是同一个<Module>::a(string, int32)方法 。很显然这就是解密函数。而int32参数是个增加写自动解密工具难度的一个偏移值。

传统的做法:如果没有现成的工具,就应该想用反射调用这里的函数,将所有的字符串全部解密出来,再和demo中的字符串对比,最终找到相关的license验证部分。(当然是自动解密所有字符串,而不是一个一个字符串的解密)

无论使用什么加密软件解密字符串,用反射调用都是屡试不爽的做法。例如在xenocode中也是用这种方法加密字符串的。这个例子是c#代码会让你更清晰的了解常用的字符串加密方法。关于Xenocode的算法问题我和grassdrago 有过一个讨论帖子可以参考: http://bbs.pediy.com/showthread.php?t=90723&prefixid=phpforce_40


很显然这里的x1110bdd110cdcea4._xaacba899487bce8c方法就是解密函数。0x70eafb是图中被圈中部分的偏移值。只需要反射调用x1110bdd110cdcea4._xaacba899487bce8c这个方法就可以得到解密的字符串了。

用反射调用的方法可以参考yuhen老大的文章
http://www.rainsts.net/article.asp?id=96

解密工具有两种写法:
其一是拷贝源代码中的算法解密(如果不能还原为高级语言,还需要自己看懂解密算法)。
其二就是使用反射调用自动解密。
2009-7-18 10:05
0
雪    币: 83
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢老师,关键是有这么多的"\u****\u****\u****\u****\u****",怎样去定位呢?
我理解这是解密的函数,但是怎样定位哪里就是这些Evaluation字样call 这个解密函数?

谢谢
2009-7-18 14:03
0
雪    币: 93
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
步骤。(文中的截图,只是为了说明问题,和本文无关)
1、写一个工具(或者使用已经有的工具),遍历所有的类和方法,并解密所有的字符串,将这个字符串所在的类和方法记录下来


2、搜索DEMO中出现的字符串,可以定位具体的类和方法名。

3、使用Reflector的Analyze功能,可以分析第二步中定位的方法,被哪些方法所调用。


4、查找到第二步和第三步中的所有涉及到的方法,利用编程功底去分析程序验证的地方。

这就是传统的经典做法,全是体力活~
现在流行的是玩意识,秒破。
上传的附件:
  • 1.JPG (18.20kb,428次下载)
2009-7-18 15:24
0
雪    币: 53
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
支持,以后学习是好好看看
2009-7-18 15:46
0
雪    币: 83
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
多谢老师,收益不少,非常感谢

另外,老师如果有时间的话,请帮忙看看这个控件,它也是EXCEL类型的.NET控件,也是有demo字样在电子表的第一行出现,,,,

真是麻烦你了,浪费你宝贵时间真抱歉

老师请:
http://www.xun6.com/file/16374e717/NativeExcelNetDemo.rar.html
2009-7-18 19:01
0
雪    币: 93
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
不必客气,举手之劳~~~
上传的附件:
2009-7-19 02:06
0
雪    币: 8179
活跃值: (3331)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
期待老师能出几个NET破解的视频教程
2009-7-19 08:22
0
雪    币: 83
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
呵呵呵,老师真是非常高的高手,希望以后多多指点我们,感恩,
你肯定会为中国的软件发展做出重大贡献

能分享怎样分析吗?

再次感谢您
2009-7-19 08:27
0
雪    币: 93
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
有时间就做录像。


能分享怎样分析吗?

再次感谢您


1、新建一个工程,导入这个dll。只写两句代码:
IWorkbook book = NativeExcel.Factory.CreateWorkbook();
book.SaveAs("test.xls");
运行项目后,发现生成的test.xls文件已经包含了Demo字样。那么也就是说,生成DEMO字样的可能性只有在CreateWorkbook()方法或者在saveas()方法中。

2、我们发现生成的DEMO字样总是在A1的单元格内,我们在代码中往A1和B1中添加数据看看。

IWorkbook book = NativeExcel.Factory.CreateWorkbook();
IWorksheet sheet = book.Worksheets.Add();
sheet.Range["A1:A1"].Value = "Hello";
sheet.Range["A1:B1"].Value = "World";
book.SaveAs("test.xls");
运行后我们发现,A1单元格被DEMO字样覆盖了,而B1单元格则出现了World的字样。那么控件肯定是在SaveAs方法中覆盖了我们写的"Hello"字符串。也就是说只要重点在于分析SaveAs中的代码。

3、看到这里有两种方法解决问题:
其一,记录自己的A1数值,然后再控件中新增加一个方法,这个方法放在SaveAs的最后处被调用,这个方法的内容是重新还原A1单元格的内容。优点是快速解决问题,缺点是要给控件逆向增加一个方法,用户调用起来不会习惯。
其二,试想,控件是如何覆盖数据的?肯定用了和我们类似于sheet.Range["A1:A1"].Value = "Hello";这样的代码逻辑。所以只要调查这个代码是如何在Excel中生成数据的就可以了。
加两个MessageBox
IWorkbook book = NativeExcel.Factory.CreateWorkbook();
IWorksheet sheet = book.Worksheets.Add();
MessageBox.show("1");
sheet.Range["A1:A1"].Value = "Hello";
MessageBox.show("2");
sheet.Range["A1:B1"].Value = "World";
book.SaveAs("test.xls");
使用windbg+sos载入程序,设断点在messagebox处。找到在调用这两个messagebox之间分别调用了哪些方法,将这些方法全部记录下来。
最后在Reflector中稍微的分析一下这些方法,很快就定位了。

4、使用windbg设断点在第三步找到的位置,很快在saveas()方法中断下来判断是否是填写DEMO字样的地方。NOP掉即可。
2009-7-19 11:05
0
雪    币: 83
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
to tease:

老师,你对windbg+sos 使用方面比较熟悉吗?

能否告诉我这方面的教程或资料或动画教程,我要知道的一个问题是,如何调试一个exe文件中有调用DLL,怎样断点?
谢谢

对于 NativeExcel 这个控件,我认为应在填充(0,0)方面下手,我认为(0,0)就是第一行和第一列,不知道思路是否合理?

请指正,谢谢

最后希望能早日看到你使用 windbg+sos 调试.NET方面的教程
2009-7-19 13:52
0
雪    币: 93
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
随着加密技术的提高,静态分析DONET已经不能满足当今破解的需求了,windbg+sos是锻炼意识流最好的工具之一,而且可以做到以不变应万变。我没看过动画教程,我只看过两本书
《软件调试》的windbg部分
《.NET2.0应用程序调试》

只要dll文件被加载了,就可以向对exe文件下断一样。
sxe ld:xxx.dll在dll加载时中断。
!nam2ee xxx.dll xxxx.xxx.xx()在dll中查找方法并获得 methodDesc address
然后对前面获得的这个地址下断即可。

你说的(0,0)就是我前文中说的A1 单元格(MS Office是这样描述的)......

你说的思路更适合静态破解,肯定是可行的,但是如何去缩小范围呢?你可以尝试一下,如果成功了,可以分享一下经验。
我的思路有一点点区别,就是我先找到填充任意数据的地方(我缩小范围的方法是自己写填充数据的代码夹在两个MessageBox之间),然后再找到的方法中设断点,当发现填充字符串为DEMO字符时,可以通过看堆栈来定位是哪个方法调用的。
2009-7-19 14:33
0
雪    币: 83
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
老师,,,
因为你是动态调试,你能看到堆栈,但是,我们这些初学者不懂如何去动态调试,希望能提供更多的动态调试方面的经验给我们,

谢谢
2009-7-19 15:48
0
雪    币: 83
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
@tease
《软件调试》是什么出版社出版?作者是谁?

谢谢
2009-7-20 09:09
0
雪    币: 93
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
2009-7-20 09:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
实在是太有才了            绝对同意楼上的                       
   
     
      
   
   
  
     
      
------------------------------------------------------------
张娜拉安奈竹碳一洗白。瑞脑香消魂梦断吸立白
2009-7-21 02:36
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
非常的好看,非常的实用
2009-12-13 19:40
0
雪    币: 133
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
标记一下!谢谢
2009-12-14 09:03
0
雪    币: 19
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
帮顶,确实厉害
2009-12-15 08:28
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
意识很重要。。
2009-12-18 17:18
0
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
tease果然对.net有研究啊
2010-2-22 10:42
0
游客
登录 | 注册 方可回帖
返回
//