记一次VB和.nte逆向

这篇文章先要感谢我一位朋友,我对vb和.net不是很熟悉,分析在他的帮助下才完成了,真的非常感谢他的无私帮助

起因

有一天想找一款工具替代TeamViewer搜寻中发现了UltraViewer还挺好用的,所以来分析一下看能不能获取到用户保存的密码

软件:

UltraViewer6.02.008x

过程

下载下来,先查壳
在这里插入图片描述
发现加了UPX的壳
直接脱壳,UPX脱壳教程很多,这里不写了

脱壳的时候明显的发现了VB程序的特征

在这里插入图片描述
再查壳,确实为VB程序
在这里插入图片描述
查看程序界面保存密码的地方

在这里插入图片描述
使用VB.Decompiler.pro查看脱壳的VB程序
在这里插入图片描述
发现确实存在这个界面

在这里插入图片描述
调试这cmdOK 发现根据输入的密码获取了一串HASH值
在这里插入图片描述
在这里插入图片描述
然后把值保存在
HKEY_LOCAL_MACHINE\SOFTWARE\UltraViewer 中然后把明文密码清除
这是这种软件惯用的手法,可以看到这个键下保存了许多有用的信息
在这里插入图片描述
初步分析,这个软件是通过hash比对的方法来对比密码,这样以来想获取明文密码只能通过HASH爆破或者碰撞的方法了

柳岸花明

似乎分析就这样要结束了,但经过查看一遍软件后
在这里插入图片描述
发现还有一个自动填充账号密码的功能,这个看起来似乎有搞头,于是前往设置里查看

在这里插入图片描述

默认是会储存密码到加密文件的,不过只有三个小时,但是够用了,但目前还不知道储存密码文件的路径,软件里也并没有给出

这里的思路可以用火绒剑监视一下文件创建和写入的过程
在这里插入图片描述
找到可疑的位置TempPass.ini
在这里插入图片描述

看这样的内容就像被加密过的,大概率是储存密码信息的文件
再查看ConnectionOutHistory.ini
在这里插入图片描述

也储存了一些有用的信息

推测这个密码文件是在加载时候就被载入的,可以通过CE内存搜索来确定密码文件载入内存的时间,或者火绒剑,或者直接下打开文件的条件断点

于是我们在初始化里面去找
在这里插入图片描述
发现这个函数
在这里插入图片描述

调试这个函数

发现了这里,传入了SID,然后获取了一串HASH,这HASH看起来非常像MD5等一下可以作为分析的要点,或者可以用HASH分析工具分析一下,确定是哪种算法
在这里插入图片描述
在这里传入了获取的HASH,然后解密了数据
在这里插入图片描述

至此,我们定位完成了一半

我们发现一个问题,这种调用都是通过call [edx+0x170] 来调用的,我们来跟踪一些这些函数的位置
在这里插入图片描述
跟进去后发现是CLR系统的CLR模块调用的,也就是说这个VB是通过调用.NET的模块,来实现他的函数功能的,这时候我们就需要定位到.NET的函数模块来分析了。有很多办法,我这里记录两个

1.改变传参是其调用时候崩溃,然后定位崩溃。
2.分析文件结构目录和名字综合推断分析,找出相应的.NET模块

这里由于程序本身的.NET.DLL模块不是很多,耐心一点很快就定位好了
在这里插入图片描述
发现模块本身加了混淆,使用De4Dot去除混淆
然后使用dnSpy打开
搜索关键字MD5,encrypt,Decrypt 等等,然后在可疑函数下断点,查看传参和返回是否与之前调试的一致,下好断点后直接使用dnSpy调试
在这里插入图片描述

最后定位到了,这几个函数
在这里插入图片描述

在这里插入图片描述

到这里基本就能解密出来了

大概解密流程就是获取SID->GetMD5,然后读取加密文件,将加密文件和MD5传入DecryptData 中进行解密,然后返回密文。

在解密代码还原的过程中遇到一个小问题,目前也没有解决,先记录下来

本来我是向直接调用去混淆后的DLL的解密函数来进行解密,没想到用VS新建一个C#控制台工程后,添加了这个DLL为引用,然后VS就自动退出了.

然后我想将DLL使用反射加载进行调用,然后在创建对象(Activator.CreateInstance)的这一步莫名奇妙的崩溃了,网上搜也找不到相应的答案,遂放弃改成扣代码;

在扣代码的过程中也有一些要注意,可能是反编译的原因,有些名字还原的比较奇怪,但是一般加解密算法来说都不会自己去实现,都是调用系统库,或者某些现成的库,所以在还原代码的时候,善用搜索引擎,就拿当前的例子来说:
GteMD5
没还原前是这样的:
在这里插入图片描述

实际上还原后是这样的
在这里插入图片描述

这都是网上现成的例子,但是反编译引擎把
stringBuilder.Append(array[i].ToString("x2"));
翻译成了
stringBuilder.Append(array[i].ToString(<Module>.smethod_6<string>(4013354042u)));
如果再去扣<Module>.smethod_6<string>(4013354042u)),这句话里面的东西就是太复杂,也不应该
同理类推DecryptData也是如此,简单的话就自己实现,复杂的话就去网上搜搜,看看别人实现的代码,然后思路就有了
在这里插入图片描述
这部分已经分析结束了。

这个软件接下来还可以分析,比如,可以通过ID然后输入任何密码来登录,关键就是要找到密码比对的地方然后想个办法来修改,或者生成密码的地方,这部分待续。。。

这里是生成密码的地方
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值