180930 逆向-Flare(4)

binstall

xxx firefox.exe

题目说明里说不要在物理机使用,尤其是使用firefox的环境
于是谨慎分析

将.NET程序用dnspy打开,可以看到经过了符号名的混淆
这里写图片描述

这个变量名和方法名过长,比较干扰其他符号的阅读,因此使用de4dot反混淆
这里写图片描述
效果还是蛮好的
虽然符号全部被重命名了,不过这个信息丢失了就不可能还原了,至少这样的可读性要强很多

大概分析一下记录如下

Class5:
method_0: 清空文件目录
method_1: 删除指定文件
method_2: 删除文件列表
method_3: 执行上述三个方法
method_4: 清除缓存
method_5: 写入文件
method_6: 修改注册表
method_7: 3-2-4

main:
执行Class5中的7-5-6

Module:
method_2: 解密字符串

Module中还有很多Class和其他方法,但是main里面没有执行到就不关注了
主要是Class5中的几个方法来处理核心功能
其中最关键的是写入文件

几个方法都是通过Module中的方法来解密参数的,包括路径、文件名、文件内容等等
于是最后还是只能动调来获取变量

将可能有影响的删除NOP掉,然后单步执行到写入文件,发现它向C盘某个目录下写入了一个browserassist.dll,然后修改注册表,应该是将其捆绑到firefox上吧

然后抓过来分析dll

DLLMain里的操作还挺复杂的,比较难跟踪到重点
通过Internet相关的API向上回溯可以找到一个StartAddress,这就是被CreateThread的地方了

然后里面有很多的字符串解密操作
简略扫一下,大概可以猜出这样的结论

int __stdcall StartAddress()
{
get_info_from_server();
return create_hook();
}

于是我们的关键在于get_info_from_server()里get了什么info
sub_10004060里可以看出来解密出了一段base64,接着用sub_10002430来解密这段b64
sub_10002430里主要用文件名(加上几个字符的修改后转大写)作为Key,CryptDecrypt相关的API来解密

大体逻辑命名如下
这里写图片描述
自己写个程序解密是可以的
这里写图片描述
从后面的调用可以发现目标结构体的地址
pszString = (LPCSTR)conn((LPCSTR)v2 + 4, (LPCSTR)v2 + 260);
分别是4和0x104

如图所示,可以得到一个host和url

这里写图片描述

看一下这个pastebin.com应该是公网的剪切板,所以可以随意在上面放内容
指向这里
于是又是一段内容,同样对其解密可以得到一段json

同样的,通过loaddll调试原DLL也可以,这样要方便一些,不过需要改变一些程序的逻辑–毕竟加载器不一样嘛。不修改执行的话不会进入CreateThread的执行中,于是后来的解密就都不会发生了。突然想起来其实可以直接修改EIP到StartAddress里去233
这里写图片描述
这里写图片描述

json为
这里写图片描述
几段函数基本都有用
首先可以通过check拿到一个参数p,即赋值给model.password的东西,后面要用

大部分function(){}()都是匿名函数直接调用的,带着参数一起拿到控制台运行即可得到字符串
这里写图片描述
最后的核心是通过de将上面那个b64子串解密,其中de需要提供model.passwd,通过另一个fucntion p(p)可以得到,passwd为k9btBW7k2y
调用de即可得到flag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值