首页
社区
课程
招聘
[求助]学习脱壳一个.net程序,寻求精通高手老师指点,谢谢。
发表于: 2011-9-17 07:51 46849

[求助]学习脱壳一个.net程序,寻求精通高手老师指点,谢谢。

2011-9-17 07:51
46849
收藏
免费 0
支持
分享
最新回复 (61)
雪    币: 226
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
51
十分感谢老师的指导,net的手动脱壳确实充满奥秘和复杂,加密软件破坏了程序的一些段,需要脱壳后修复,修复估计需要具备完备的程序调试能力。

不过要去研究解密,就必须动态调试和静态调试相结合了,因为静态调试反编译出来后,有些程序由于脱壳不完全的原因,反编译无法全部出程序,导致无法找到真正额关键鉴别注册的位置。这个时候就必须使用动态调试,不断中断才能发现关键点。

希望我们相互学习,这个程序加壳就是使用了常规的.net Reactor 加壳,所以很有代表性。
希望能继续研究下去,彻底把这个程序的加密体系整体构造和思路研究一下。
但是在论坛上只交流解密脱壳方法,有兴趣的可以学习。
2011-9-28 08:29
0
雪    币: 226
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
52
脱壳和破解都是在一起的,我就不开帖子了。
直接谢谢程序,让大家有所认识net程序。

.method public hidebysig specialname instance string
        '3dArIIgfR'() cil managed noinlining
// SIG: 20 00 0E
{
  // Method begins at RVA 0x528fa
  // Code size       33 (0x21)
  .maxstack  8
  IL_0000:  /* 02   |                  */ ldarg.0
  IL_0001:  /* 7B   | (04)000133       */ ldfld      bool FFfkKPsdWJooe9NTIwi.cJS2Q2svBTmcohZuOPM::fAIOO6W7h  编译内存中地址的注册标记
  IL_0006:  /* 3A   | 0B000000         */ brtrue     IL_0016   如已注册跳转显示“已经注册”
  IL_000b:  /* 20   | 22440000         */ ldc.i4     0x4422     否则显示“试用版本”
  IL_0010:  /* 28   | (06)00022D       */ call       string yVd7kos890Q24V3MB1W.peFqM6sjpoibwGkgO3y::uixs5btGR$PST0600022D(int32)
  IL_0015:  /* 2A   |                  */ ret
  IL_0016:  /* 20   | 30440000         */ ldc.i4     0x4430
  IL_001b:  /* 28   | (06)00022D       */ call       string yVd7kos890Q24V3MB1W.peFqM6sjpoibwGkgO3y::uixs5btGR$PST0600022D(int32)
  IL_0020:  /* 2A   |                  */ ret
} // end of method cJS2Q2svBTmcohZuOPM::'3dArIIgfR'

不过只是一个显示“试用版本“和”已经注册“的一个程序段,跟真正的软件是否注册和不注册没有关系,也就是说,如果修改了,软件本身的注册最核心部分仍然没有注册。
上传的附件:
2011-9-28 22:20
0
雪    币: 226
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
53
另外大家看看其余显示部分:
.method public hidebysig specialname instance string
        w7wkU7PXy() cil managed noinlining
// SIG: 20 00 0E
{
  // Method begins at RVA 0x5291c
  // Code size       135 (0x87)
  .maxstack  3
  .locals init (valuetype [mscorlib]System.TimeSpan V_0)
  IL_0000:  /* 02   |                  */ ldarg.0
  IL_0001:  /* 7B   | (04)000134       */ ldfld      bool FFfkKPsdWJooe9NTIwi.cJS2Q2svBTmcohZuOPM::y7MilKh19
  IL_0006:  /* 39   | 0B000000         */ brfalse    IL_0016  检查是否regist注册文件是否为试用版本,如果不是跳转显示正式注册版本
  IL_000b:  /* 20   | 3C440000         */ ldc.i4     0x443c
  IL_0010:  /* 28   | (06)00022D       */ call       string yVd7kos890Q24V3MB1W.peFqM6sjpoibwGkgO3y::uixs5btGR$PST0600022D(int32)
                                                                                           显示“试用版本”
  IL_0015:  /* 2A   |                  */ ret
  IL_0016:  /* 02   |                  */ ldarg.0
  IL_0017:  /* 7B   | (04)000135       */ ldfld      valuetype [mscorlib]System.DateTime FFfkKPsdWJooe9NTIwi.cJS2Q2svBTmcohZuOPM::qRTdTJ7yl
  IL_001c:  /* 28   | (0A)0001E9       */ call       valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Today()
  IL_0021:  /* 28   | (0A)0001EA       */ call       bool [mscorlib]System.DateTime::op_LessThan(valuetype [mscorlib]System.DateTime,
                                                                                                 valuetype [mscorlib]System.DateTime)
  IL_0026:  /* 39   | 0B000000         */ brfalse    IL_0036     试用是否过期,如未过期跳转
  IL_002b:  /* 20   | 48440000         */ ldc.i4     0x4448
  IL_0030:  /* 28   | (06)00022D       */ call       string yVd7kos890Q24V3MB1W.peFqM6sjpoibwGkgO3y::uixs5btGR$PST0600022D(int32) 这里显示“已经过期”
  IL_0035:  /* 2A   |                  */ ret
  IL_0036:  /* 02   |                  */ ldarg.0
  IL_0037:  /* 7B   | (04)000135       */ ldfld      valuetype [mscorlib]System.DateTime FFfkKPsdWJooe9NTIwi.cJS2Q2svBTmcohZuOPM::qRTdTJ7yl
  IL_003c:  /* 28   | (0A)0001B8       */ call       valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now()
  IL_0041:  /* 28   | (0A)0001BC       */ call       valuetype [mscorlib]System.TimeSpan [mscorlib]System.DateTime::op_Subtraction(valuetype [mscorlib]System.DateTime,
                                                                                                                                   valuetype [mscorlib]System.DateTime)
  IL_0046:  /* 0A   |                  */ stloc.0
  IL_0047:  /* 12   | 00               */ ldloca.s   V_0
  IL_0049:  /* 28   | (0A)0001EB       */ call       instance float64 [mscorlib]System.TimeSpan::get_TotalDays()   显示授权日期,因为注册码和授权日期加密在一起,一个注册码就决定了这个软件的使用期限
  IL_004e:  /* 23   | 0000000000D07640 */ ldc.r8     365.
  IL_0057:  /* 5B   |                  */ div
  IL_0058:  /* 23   | 0000000000000040 */ ldc.r8     2.       检查授权时间是否是365数额的2倍以上
  IL_0061:  /* 44   | 0B000000         */ blt.un     IL_0071   如果不够,显示授权日期
  IL_0066:  /* 20   | 54440000         */ ldc.i4     0x4454
  IL_006b:  /* 28   | (06)00022D       */ call       string yVd7kos890Q24V3MB1W.peFqM6sjpoibwGkgO3y::uixs5btGR$PST0600022D(int32)
  IL_0070:  /* 2A   |                  */ ret
  IL_0071:  /* 02   |                  */ ldarg.0
  IL_0072:  /* 7C   | (04)000135       */ ldflda     valuetype [mscorlib]System.DateTime FFfkKPsdWJooe9NTIwi.cJS2Q2svBTmcohZuOPM::qRTdTJ7yl
  IL_0077:  /* 20   | 5C440000         */ ldc.i4     0x445c
  IL_007c:  /* 28   | (06)00022D       */ call       string yVd7kos890Q24V3MB1W.peFqM6sjpoibwGkgO3y::uixs5btGR$PST0600022D(int32)
  IL_0081:  /* 28   | (0A)0001B7       */ call       instance string  [mscorlib]System.DateTime::ToString(string) 如果授权时限超过2年,显示长期。
  IL_0086:  /* 2A   |                  */ ret
} // end of method cJS2Q2svBTmcohZuOPM::w7wkU7PXy


备注:这只是为了让学习一下程序结果,仅仅软件在注册窗口显示的不同,并没有真正解密该软件的内部注册核心,过期或是试用期满,仍然不可使用。

以后的研究结果会注上,仅仅学习参考,不提供破解文件。
上传的附件:
2011-9-28 22:55
0
雪    币: 226
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
54
请crackdung老师和chenxiaolu老师能否提醒一下,该软件真正启动时,需要读取授权文件regist,并且鉴别是否已经注册成“试用版本“或是”已注册长期版本“的鉴别位置,谢谢,这个位置是程序启动时,是否开启软件功能的”启动“按钮的最关键位置。

能否抓个图提示一下,谢谢了。
2011-9-28 23:20
0
雪    币: 122
活跃值: (42)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
55
好像就只有这一个button,我就是这么找的......
上传的附件:
  • 1.png (50.01kb,153次下载)
2011-9-29 23:29
0
雪    币: 226
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
56
[QUOTE=chenxiaolu;1005177]好像就只有这一个button,我就是这么找的......
[/QUOTE]

十分感谢,已经找到6.0版本的了。



十分感谢,十分感谢你的指导。

我有空继续研究这个程序,详细了解一下程序的注册思路。
上传的附件:
2011-9-30 20:55
0
雪    币: 226
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
57
不好意思,老是打扰老师。
如果只修改这个位置,按钮在启动时被激活了,但是程序仍然检测未注册,提示注册信息并且功能限制。

老师请看:



真不好意思,老是需要向你请教。
上传的附件:
  • 1.jpg (35.33kb,146次下载)
  • 2.jpg (38.08kb,148次下载)
2011-9-30 21:16
0
雪    币: 66
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
58
楼主的话说的相当在理,一个壳脱的脱的2个月的还是没脱掉,高手的5分钟就搞定的
2011-11-7 16:33
0
雪    币: 66
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
59
看的XIAOYU老师的文章受教训的
2011-11-7 16:35
0
雪    币: 124
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
60
好感人..我一直看完了 4页 感觉受益匪浅啊
2012-1-4 17:11
0
雪    币: 278
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
61
还是个美女咯  男朋友技术好像十分厉害  很希望认识你 我QQ:5115147    对于楼主这种情况  我一般就是找到注册算法  写注册机,也希望各位同行加我Q一起技术交流
2012-1-19 23:20
0
雪    币: 278
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
62
你男朋友真不厚道  还加smartassembly壳.....不过可以脱壳   但是源码能不能让俺观摩 观摩啊 我没打过.net程序的补丁
2012-1-19 23:39
0
游客
登录 | 注册 方可回帖
返回
//