简易.NET程序(某助手)破解

请注意,本文编写于 1694 天前,最后修改于 1640 天前,其中某些信息可能已经过时。

闲得无聊,日站日不下来,来日程序。
一到考试就沉迷砍口垒。但是我也不知道为啥。
总之先下载,是个用户名密码登陆的。
这个程序是用账号密码破解的。第一个思路是直接劫持他们的对象socket,伪造一个返回值来欺骗程序,达到不修改程序的效果。
但是抓了个包看了一下。。。

TIM截图20200106210252.jpg
TIM截图20200106210252.jpg

emmm,base64解不出来,算了还是拉到程序ilspy分析一波。
TIM截图20200106210252.jpg
TIM截图20200106210252.jpg

看这一波乱码,不用说了,直接de4dot走起
TIM图片20200106210831.png
TIM图片20200106210831.png

继续拉进ilspy分析。
这次可以了
TIM截图20200106210252.jpg
TIM截图20200106210252.jpg

为了方便,我们直接搜索 登录
TIM截图20200106210252.jpg
TIM截图20200106210252.jpg

很轻松的找到了。直接右键,分析,寻找调用
TIM截图20200106210252.jpg
TIM截图20200106210252.jpg

发现是一个Update函数
在如图所示的地方判断是否登陆
TIM截图20200106210252.jpg
TIM截图20200106210252.jpg

跟进,判断,发现是个DLL,名字叫做CCLR
直接在目录下面,找到CCLR.dll
TIM截图20200106210252.jpg
TIM截图20200106210252.jpg

直接拖进dnSpy,因为ilspy不能反汇编,所以直接拖进去。
找到相关函数。根据上面的反汇编,直接右键,修改函数。
把相关函数修改为对应的值
1.png
1.png

2.png
2.png

3.png
3.png

TIM截图20200106210252.jpg
TIM截图20200106210252.jpg

再根据这里,把这个函数返回值也随便改一下。
看了一下这个函数返回值是直接返回int然后在string化的,而不是使用时间戳
TIM截图20200106210252.jpg
TIM截图20200106210252.jpg

所以,就直接改成99吧
TIM截图20200106210252.jpg
TIM截图20200106210252.jpg

文件,导出模块。
很多人说编译过程中会有错误,那我就在这更新一下吧,忘记加了。
首先,编辑点编辑方法
1.jpg
1.jpg

按照上面的修改之后,编译,会报错
2.jpg
2.jpg

直接跟进,找到两个
3.jpg
3.jpg

4.jpg
4.jpg

在编译还会有一个错误,把 这个删了。
5.jpg
5.jpg

保存,启动。

TIM截图20200106210252.jpg
TIM截图20200106210252.jpg

破解成功。

添加新评论

已有 41 条评论

不知道是否能看到,问下大佬知道为啥这脚本不能正常替换船只了,那天不小心c盘满了后就无法正常使用了

⑨BIE ⑨BIE 回复 @Haru

不懂哦,早就不用了

作者看起來有做反制
非正常序號直接改會全部程式被關閉

大佬现在有新的破解方法吗,这个方法远征10以上就会关闭所有的程序,或者告诉下大佬当时破解时用的什么版本

路过的假面骑士 路过的假面骑士 回复 @hiyume
public int GetExpiredDate(int param) { switch (param) { case 1: return 2099; case 2: return 1; case 3: return 1; case 4: return 0; case 5: return 0; case 6: return 0; default: return 99; } }

现在大概要这样改写,原程序通过参数控制了返回值的内容,1是年2是月,以此类推

非洲人 非洲人

你好 我按照教程修改后为什么一旦跑远征十以上就立刻闪退了

⑨BIE ⑨BIE 回复 @非洲人

因为这个教程是去年的

博主好,在按照教程进行修改并编译后,程序无法打开版本2.4.2
错误log如下ERROR, date = 2020/4/7 22:13:37 +08:00, sender = System.Windows.Threading.Dispatcher,
System.TypeInitializationException: “Grabacr07.KanColleViewer.Models.Assistant”的类型初始值设定项引发异常。 ---> System.IO.FileNotFoundException: 未能加载文件或程序集“System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e”或它的某一个依赖项。系统找不到指定的文件。
在 Grabacr07.KanColleViewer.Models.Assistant..ctor()
在 Grabacr07.KanColleViewer.Models.Assistant..cctor()
--- 内部异常堆栈跟踪的结尾 ---
在 Grabacr07.KanColleViewer.Models.Assistant.get_Instance()
在 Grabacr07.KanColleViewer.Application.BDLPTFhWLkX9Gvrppj4()
在 Grabacr07.KanColleViewer.Application.OnStartup(StartupEventArgs e)
在 System.Windows.Application.<.ctor>b__1_0(Object unused)
在 System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
在 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
如果有指导不胜感激

⑨BIE ⑨BIE 回复 @ligang

看Assistant,估计是日期那里,也就是改99那里的变量类型错了。没下载最新版本不知道。

ligang ligang 回复 @⑨BIE

看了下返回值类型还是int32,估计是别的地方做了调整

为啥修改完了 运行后 选择远征>10 并勾选自动远征 所有程序会立刻闪退?
版本2.4.2

母鸡欸?也许作者添加了反破解?

mm mm 回复 @⑨BIE

看起来不是。我尝试了一个旧版的,依然会闪退。

我按照这个方法改完了,软件打不开了,怎么办求教

ufo ufo 回复 @ufo

还有,一共要改4个函数,我每改一个,都要遇到两个错误,所以我一共删了8个

ufo ufo 回复 @ufo

===========================================================
ERROR, date = 2020/4/4 星期六 18:16:55 +08:00, sender = System.Windows.Threading.Dispatcher,
System.TypeInitializationException: “Grabacr07.KanColleViewer.Models.Assistant”的类型初始值设定项引发异常。 ---> System.IO.FileNotFoundException: 未能加载文件或程序集“System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e”或它的某一个依赖项。系统找不到指定的文件。
在 Grabacr07.KanColleViewer.Models.Assistant..ctor()
在 Grabacr07.KanColleViewer.Models.Assistant..cctor()
--- 内部异常堆栈跟踪的结尾 ---
在 Grabacr07.KanColleViewer.Models.Assistant.get_Instance()
在 Grabacr07.KanColleViewer.Application.B4RQonYJuDfPHSCCqPm()
在 Grabacr07.KanColleViewer.Application.OnStartup(StartupEventArgs e)
在 System.Windows.Application.<.ctor>b__1_0(Object unused)
在 System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
在 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
这是error记录

ufo ufo 回复 @ufo

好吧,事实上只要我这样改了其中一个函数,软件就打不开了

⑨BIE ⑨BIE 回复 @ufo

你是用,编辑--编辑方法 编辑的吗?

ufo ufo 回复 @⑨BIE

不是,我是用了编辑方法

ufo ufo 回复 @⑨BIE

是。。。。。

非洲酋長 非洲酋長

请问报错应该刪那一些函数
怕刪多了会破坏程式 (´இ皿இ`)

⑨BIE ⑨BIE 回复 @非洲酋長

文章已更新,里面有写

(能不能上传一下完成的文件让我研究一下

⑨BIE ⑨BIE 回复 @Satila

文章已更新,里面有写

弄好之后又不能开了(会不会我刪太多了😂

还是剩下一行CS0116

⑨BIE ⑨BIE 回复 @Satila

那一行把class Cp那啥那啥的冒号之后去掉就行,包括冒号

⑨BIE ⑨BIE 回复 @Satila

就是那个:IDisposable

这个 为什么弹出了一大堆错误 CS1525 CS1003 有几百条

⑨BIE ⑨BIE 回复 @Satila

编辑->选择编辑方法,然后再编译就会只有几条错误,吧那几条错误的函数都删了就行了

谢谢博主分享,是不是只需要把CCLR.dll文件脱壳,然后用ILspy反编译导出项目文件,然后再修改GetError,GetState等函数的返回值,再编译项目文件就可以了呢?

⑨BIE ⑨BIE 回复 @Kancolle

对,脱壳方式和主文件一样,修改之后编译,可能会有些错误,直接把那些错误的函数删掉就可以通过编译了

Kancolle Kancolle 回复 @⑨BIE

将CCLR.DLL导入DNSPY后编译出现错误代码CS1525

Kancolle Kancolle 回复 @⑨BIE

似乎没法使用![img]() ht....tps://img.....chr.com/i/GiE528 谢谢博主指点了

和楼上问题一样,按照您的步骤在dnspy里无法修改函数,点编辑方法在新窗口改完点编辑的时候总是报错,编译器错误 CS1519等一堆,请问这里应该怎么操作,亦或是我的操作哪里不对?求教

⑨BIE ⑨BIE 回复 @mirai

有图嘛_(:з)∠)_。。有图咱帮你看看

mirai mirai 回复 @⑨BIE

怎么发图。。。或者说怎么联系上大佬

非提一個 非提一個

// CCLR.CppWrapper // Token: 0x06000080 RID: 128 RVA: 0x0001AF84 File Offset: 0x0001A384 public int GetExpiredDate(int param) { return .CppUtils.GetExpiredDate(this.pc, param); }請問這裡怎樣把相关函数修改为对应的值

⑨BIE ⑨BIE 回复 @非提一個

用dnspy,直接把dll拖进去,然后修改整个程序集而不是只修改函数,直接把return改成99就行,或者其他任意数字都行,这个问题不大的,主要是上面那三个函数

⑨BIE ⑨BIE 回复 @小学生

自己动手,丰衣足食,这才是学计算机的乐趣.jpg