[Python] 破解一款软件验证
开始
马上就要开始考教资了,现在开始准备学习,然后日常翻翻B站,发现了感觉不错的课程。但是电脑端不能下载怎么办? 其实之前有用过下载工具的,不过此时找不到了,那就网上下载一个,结果发现需要关注公众号,哎?我不想关注,感觉作者也不容易,我于是就关注了,并且请求一个验证码。 结果验证码不好使,死活不好使。那么我寻思是否可以用它练习一下逆向能力呢?
OD尝试#
- 首先打开OD,然后把程序拖进去
- 结果发现程序直接就飞了...
- OD好像不太合适
- 再想想大佬们说开始之前应该先查壳 : - )
PEID查壳#
dnSpy 反编译#
- 原本以为要用OD跟踪调试,会很麻烦,没想到是C#开发
- 拖进dnSpy 直接把代码给反编译出来了,甚至没有做混淆
- 定位到入口
这里可以看到 运行之后首先会检查更新,不过因为是最新版的关系 我运行是没有察觉
因为没有写过C#的关系,第二行第三行不知道是干嘛的,但是最后一行能看出来是实例化了一个主窗口
- 点击进入之后
- 再进去
- 根据之前写Java代码的经验来看 这个应该就是主页上各种组件了,现在尝试找到触发弹窗的按钮,并且找到关联的回调函数
- 根据按钮标题可以找到
- 继续进去可以看到大概逻辑
- 首先判断编辑框是否为空,然后判断版权,这里的话不清楚B站版权的能不能直接下载
- 看到this.check() 应该是一个关键的,因为下面直接开启了一个线程,已经开始下载视频了,那么直接把判断中的! 去掉,就行了,这样 不管它检查了什么,都会直接过掉,编辑代码保存即可
- 之后运行反编译之后的程序,发现已经过了验证 不需要验证码了
其他方法#
- 既然都看到代码了,我也好奇它check了啥
public bool check()
{
string text = FileUtil.checkOpenId();
string text2 = "http://www.屏蔽.com/qrcode/ajax/query/";
if (text != null && !"".Equals(text))
{
text2 = text2 + "?openid=" + text.Trim();
}
else
{
text2 = text2 + "?mac=" + ManagementSystemInfo.getMac().Trim();
}
Console.WriteLine("----" + text2 + "---");
string text3 = "";
try
{
text3 = HttpUtil.HttpGet(text2, null, null);
}
catch (Exception)
{
}
if (text3 == null || "".Equals(text3))
{
return false;
}
Console.WriteLine(text3);
MessagePack messagePack = JsonConvert.DeserializeObject<MessagePack>(text3);
string status = messagePack.status;
if (status == "nodata")
{
new Subscribe().ShowDialog();
return false;
}
if (status == "fobidden")
{
MessageBox.Show("不能使用该软件");
return false;
}
if (!(status == "custom"))
{
FileUtil.writeOpenId(messagePack.openid);
return true;
}
MessageBox.Show(messagePack.message);
return false;
}
- 上面就是check() 的代码 可以看到,它get了openid ,进去查看代码之后,知道就是公众号发布的验证码
- 判断有没有openid 如果没有,就获取主机的mac地址(我猜的),然后给提交上服务器去了(蜜汁操作)
- 然后请求了一个接口,判断在数据库中是否有这个验证码,讲道理,我既然有公众号给的openid应该能过这里的判断才对啊,于是我浏览器直接请求这个链接,发现得到的json结果 status 是 nodata
- 那这里有验证码也不能使用就确实是服务器那边有问题了
- 根据请求的接口 会返回一个json ,根据status 决定了之后的行为,比如我有验证码但是错误 就会弹出来窗口,
让我关注公众号 (但是真的有用的话 我就不会写这个文章了)
- 如果 status == fobidden 那就弹出相应提示,
- 最重要的是那个 custom 状态,会更新本地的openid 那么此时我有一个不修改代码就能过验证的方法...
网址劫持#
hosts 文件 hosts文件负责解析域名并优先于DNS服务,通常很多恶意软件会恶意更改该文件来达到劫持网站的目地。
- 那么我只要通过hosts文件修改他的域名指向,指向到我的 127.0.0.1 然后 我本地构造出符合条件的json字符串 就可以过了验证
- 于是我在 hosts文件中添加
- 这样 我访问网址之后 会被跳转到我的本地服务器,然后根据url构造请求文件
- 访问结果如下
- 此时再打开软件,就可以跳过验证 (好神奇....)
软件作者看到这个 别杀我祭天 QAQ 我没分享出去
作者:cjdty
出处:https://www.cnblogs.com/cjdty/p/12374948.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库