好友
阅读权限25
听众
最后登录1970-1-1
|
本帖最后由 TES286 于 2021-7-28 20:34 编辑
最近发现了一个程序, .net编写, 存在网络验证, 于是一时兴起, 想破解一下
0x01 查壳,脱壳
img1
跑一边de4net
img2
再次查壳
img3
完美
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代替
[C#] 纯文本查看 复制代码 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#,但依旧完成了这个逆向过程
第一次玩破解,肯定有很多疏忽与漏洞,还请各位大佬指出,有好的想法,也欢迎提出
论坛不然放成品,就不放了 |
免费评分
-
查看全部评分
|