开始
马上就要开始考教资了,现在开始准备学习,然后日常翻翻B站,发现了感觉不错的课程。但是电脑端不能下载怎么办? 其实之前有用过下载工具的,不过此时找不到了,那就网上下载一个,结果发现需要关注公众号,哎?我不想关注,感觉作者也不容易,我于是就关注了,并且请求一个验证码。 结果验证码不好使,死活不好使。那么我寻思是否可以用它练习一下逆向能力呢?
OD尝试
- 首先打开OD,然后把程序拖进去
- 结果发现程序直接就飞了...
- OD好像不太合适
- 再想想大佬们说开始之前应该先查壳 : - )
PEID查壳
-
查壳结果如下
-
这里可以看到是一个 32位程序,是C#开发的,并且好像没有加壳
-
C#的话 我记的是有专门工具的, 之前还用它反编译过一个游戏,去爱盘下载到 dnSpy
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 我没分享出去