.NET删除验证与破解通讯协议
本帖最后由 TES286 于 2021-7-28 20:34 编辑最近发现了一个程序, .net编写, 存在网络验证, 于是一时兴起, 想破解一下
0x01 查壳,脱壳
跑一边de4net
再次查壳
完美
0x02 反编译
拖入dnspy后
注意:要使用对应架构的程序版本调试(例如这个是x86的程序,就只能用x86的dnspy)
看到这里有一个版本验证,直接删掉
0x03 分析
由于程序可信任,则直接调试运行
当然,如果是个不可信任的程序,就不能这样随意,至少得在虚拟机中运行
一步步单步执行,过程就不放了,有兴趣可以找一个样品试试
分别是最大启动,使用启动,最大地址
授权码生成
(这授权码生成的也太草率了吧...)
所以我们的思路是将已使用启动数量设置为0
跟进
额, get;set;什么玩意,c#里还有这么高深的语句...
查下官方文档https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/get
(虽然我可能没有评价这文档的能力,但我个人认为上面那句描述简直不是人话)
结合这里的实际,肯定还有一个地方为其赋值,搜索usedsetup
发现都是在这个文件里,没有任何有价值信息
没办法,分析,找到ns0.FormSetup.method_0中存在使用
可以猜测图中红框函数(MySoft.smethod_9)为网络访问,先放哪,一会分析
另外还有个ns0.FormSetup.methob_5
直接改usedsetup为0(已使用启动数量)
此处算是成功
0x04 通讯协议
记得前面的method_0吗,这是一个网络请求函数
很明显,网络请求是在MySoft.smethod_9中
其中MySoft.softlocal.apiurl
smethod_9的代码,敏感部分已使用xxx代替
public static string smethod_9(string string_7, string string_8)
{
string mycomputerhash = MySoft.mycomputerhash;
Config.debugprint("同步xxxPost请求 " + string_7);
NewWebClient newWebClient = new NewWebClient(10000);//初始化网络请求
newWebClient.Headers.Add("sn", mycomputerhash); //计算机哈希
newWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
string text = "";
try
{
text = newWebClient.UploadString(string_7, "POST", string_8); //上传字符串, 详见https://docs.microsoft.com/zh-cn/dotnet/api/system.net.webclient.uploadstring#System_Net_WebClient_UploadString_System_String_System_String_System_String_
text = AESHelper.Decrypt(text); //顾名思义,解密函数
}
catch
{
Config.debugprint("同步xxxpost请求发生错误 " + string_7);
}
return text;
}
这个函数告诉我们请求由HTTP完成,并且存在加密
而且,按照习惯,服务端加密和本地加密应该是一致的,所以找到解密函数后就可以双方解密(还有的应用就不是这样,当然也是极少数)
解密函数
其中AESHelper.key是6x57chhbkg9rsI2mua6PcGMZB4FLSJJt AESHelper.iv是WW1RFPd9htGQ46Qb
可以得知这是由cbc加密,并且密文以base64传输,填充
所以我们直接把代码抠出来,结果:
当然,同文件的加密函数也不能忘掉
可以正常运行
那么,我们就可以把这里对接到外界自己的程序中,实现肆无忌惮的修改数据了
其他
文章中使用到的一些资源:
dnspy :https://down.52pojie.cn/Tools/NET/dnSpy.zip
de4dot :https://down.52pojie.cn/Tools/NET/de4dot.zip
exepeinfo :https://down.52pojie.cn/Tools/PEtools/ExeinfoPe.zip
微软的C#文档 :https://docs.microsoft.com/zh-cn/dotnet/
另外,一般不要因为程序的编写语言自己不会就望而却步,比如我,在之前看都没看过c#,但依旧完成了这个逆向过程
第一次玩破解,肯定有很多疏忽与漏洞,还请各位大佬指出,有好的想法,也欢迎提出
论坛不然放成品,就不放了 yasenhacker 发表于 2021-7-26 11:25
你运气真好,程序用smart assembly 6.xx加密,如果用smart assembly 8.xx加密的话,de4dot也脱不了。你有没 ...
没有,论坛上也没找到什么挺好的方法,就无脑跑了一遍de4net(话说直接导入也可以带壳反编译,只不过有些地方可读性太差) Hmily 发表于 2021-7-28 18:00
@TES286 图片为什么不上传论坛本地啊,你这个图床好卡啊。
已改,谢谢提醒
(提个建议,论坛上传图片能否加入直接从剪贴板粘贴,要不然还有先存在本地在上传,有些不方便,所以这里之前使用第三方图床) 拿走学习了感谢博主,,,,,, {:1_921:}
这个给力哈,楼主牛啊{:1_913:}{:1_893:} 不错,这么干的,牛逼 内容精彩,感谢分享。 这个看起来好厉害啊,学起来 你运气真好,程序用smart assembly 6.xx加密,如果用smart assembly 8.xx加密的话,de4dot也脱不了。你有没有对smart assembly8.xx有过研究???主要是脱壳 不明觉厉。希望以后会接触到,学习到