初次接触.NET程序的破解

初次接触.NET程序的破解 - BatchDate宝宝特别版 1.2.0.2

【破文标题】初次接触.NET程序的破解 - BatchDate宝宝特别版 1.2.0.2.
【破文作者】风球[PYG]
【作者主页】 http://Bbs.ChinaPYG.Com
【破解日期】2009年02月07日
【破解工具】PEiD0.94、OllyDbg、Hex Workshop、Reflector、DotNet Helper
【原版下载】 http://www.littletools.cn/
【软件简介】 BatchDate宝宝特别版 1.2.0.2. -照片日期文字添加器
    “为了保证照片的完整性,现在的数码相机一般都不直接在照片上打印拍摄日期了,而是记录在照片的Exif信息中。即便是能够打印,也有很多限制,比如其日期格式很固定、显示位置不能设置、不能修改字体等,也不能添加拍摄地点等文字说明。 BatchDate是一个专门用来批量往数码照片上添加日期和文字的小软件!”
------------------------------------------
【前言闲语】
初次接触.net程序,这个软件是在霏凡论坛上见到的,当时用OD很容易就破解了但保存不了。于是在网上参考了些相关.net文章后,整理了一下也发篇东东给新手们分享一下。文章中有错漏的地方,请大家多多指出。相信看完下面的小析后,像我一样第一次接触.net新手们也可破解该网站的另一个照片日期文字添加器软件了。有兴趣的朋友可以拿来练习一下

【破解过程】
一开始使用OD试过了解程序可以标志位完成破解,下面将使用.net反编译工具来进行破解:
软件是.NET程序,且加了Xenocode壳。
首先来脱壳,前辈们的文章中提到.NET在内存中会释放原程序的镜像,所以可以将程序在内存 Memory Map 里DUMP出来。
OD载入程序并运行程序,在OD中ALT+M打开 Memory Map 窗口查找原程序窗口标题 BatchDate



每查找到一次字符串后,拉动滚动条至最顶端,直到看到文件头MZ时才停下来DUMP保存数据,如果保存出来的数据不能运行,则需继续往下查找直接保存数据能打开为止,(基本上DUMP保存出来的数据文件大小与原程序文件大小接近),多次CTRL+L查找后可以来到:


保存数据为.EXE 应用程序文件


程序可正常运行,查过显示如下:


可能是脱壳方法不对?以后有时间再去理解它,暂时不管,此时DUMP出的程序可以运行。。。

使用.NET工具 Reflector 可以反编译到代码,但 xenocode fox 2007 不能反编译.



语言选择C#,可以看到关键的字符串:


可以猜想到:
引用:
Label_00C7:
    this._x62b8f9c7fa9f4a85 = xa2dd9459c0cfd046. x705c856c7e57c9cd();   //x705c856c7e57c9cd()会返回一个BOOL标志,点击跟过去看看代码先
    if (this._x62b8f9c7fa9f4a85)
    {
        this.x4b46173fdc94ea2b.Text = "软件已注册,谢谢!";
跟随来到这里可以看到false标志,破解工作将是把下面的 false标志都改为true:


将 Reflector 语言改为il,代码将变为如下:
引用:
.method assembly hidebysig static bool x705c856c7e57c9cd() cil managed
{
    .maxstack 2
    .locals init (
        [0] string str,
        [1] bool flag,
        [2] bool flag2)
    L_0000: call string PhotoBatch.xa2dd9459c0cfd046::x3c7e0b82a80758dc()
    L_0005: stloc.0
    L_0006: br.s L_0022
    L_0008: ldc.i4.0          //破解点:ldc.i4.0   改为ldc.i4.1 机器码16->17
    L_0009: stloc.1
    L_000a: leave.s L_002b
    L_000c: ldc.i4.0          //破解点:ldc.i4.0   改为ldc.i4.1 机器码16->17
    L_000d: brtrue.s L_0019
    L_000f: br.s L_0019
    L_0011: ldloc.0
    L_0012: call bool [mscorlib]System.String::IsNullOrEmpty(string)
    L_0017: brtrue.s L_0008
    L_0019: ldloc.0
    L_001a: call bool PhotoBatch.xa2dd9459c0cfd046::x06838666885a3344(string)
    L_001f: stloc.1
    L_0020: br.s L_0024
    L_0022: br.s L_0011
    L_0024: leave.s L_002b
    L_0026: pop
    L_0027: ldc.i4.0          //破解点:ldc.i4.0   改为ldc.i4.1 机器码16->17
    L_0028: stloc.1
    L_0029: leave.s L_002b
    L_002b: ldloc.1
    L_002c: ret
    .try L_0000 to L_0026 catch object handler L_0026 to L_002b
}
这时我们可以进行修改破解了,使用二进制工具查找二进制代码 0a2b1a160bde (也许新手会问这个怎么得来的,只要你将鼠标在代码上停留一下就可以看到了,当然也有可能会查找重复的,这就需要你的眼睛多注意一下了,见图片)


下面使用工具 Hex Workshop 来修改吧,先 CTRL+F 查找 0a2b1a160bde 再修改


将原来的16都改为17,共三处见下面红色字体,保存看看



运行程序显示已注册,测试功能正常。


下面也可以说一下另一个修改方法:
先使用 ildasm2.0 反编译工具DUMP出*.IL文件,再使用ilasm来编译回EXE程序。




用文本工具打开dump.il文件修改,这里我用记事本打修改后保存。
[
刚才已经知道关键了,查找 xa2dd9459c0cfd046::x3c7e0b82a80758dc() 可来到需修改处:


将上面三处作修改保存即:
ldc.i4.0         //破解点:ldc.i4.0   改为ldc.i4.1 机器码16->17

然后将保存修改好的 dump.il编译,使用工具DotNet Helper 1.4比较方便:



编译后跟刚才二进制工具修改的效果一样,只是PEID查壳可显示为.net程序了


至此软件脱壳破解工作完毕!

【版权声明】 本文原创于P.Y.G官方论坛,纯属兴趣交流, 转载请注明作者并保持文章的完整, 谢谢!

你可能感兴趣的:(.net,String,工具,破解,反编译工具,照片)