本帖最后由 hou 于 2024-4-3 17:11 编辑
前言
本来是一个小单子,被逃单的恶心到了,那么就做成教程分享给大家 软件64位无壳,有多种逆向方法及思路,本文概述了整个逆向过程,适合初阶入门 软件来源于逃单者,练手请在虚拟机内进行!!!
初步分析
首先是查壳,可以看到查壳结果是64位无壳的C++软件 打开软件可以看到两种验证方式,一种是机器码验证,一种是QQ号验证,未见有卡密验证 按惯例丢进火绒剑分析下网络情况,发现是443端口的Https交互 综合软件的结构及网络情况,机器码验证/QQ号验证+Https交互 那么软件很可能属于弱逻辑的验证,访问了一些接口或页面就能判断是否授权的机器 1.山寨接口 2.山寨封包 3.硬改机器码 4.修改跳转 网络分析
先从网络分析入手,软件拖进x64dbg后,分别在socket、send、recv等常用的网络函数下断点,然后运行 会发现一个都没断下来,那么就应该是用了WSAsocket、WSAsend、WSArecv,我们在这些WSA网络函数也分别下断点 如期,断点被触发,一边F9执行一边观察堆栈信息,可以看到大量Gitee的字眼 此时应该猜测Https交互的是否就是Gitee?用cmd Ping一下Gitee.com进行实验 域名跟IP确实对上了,当然还有更快捷的方法,就是开局直接把IP丢进百度搜一下有没有相关信息,或者直接抓包。 既然软件所有网络交互都是与Gitee有关,那么就知道验证的数据就是放在Gitee里面了 思路整理
此时应该重新调整思路,将目标转移Gitee的网站上,分析软件使用了Gitee什么页面的数据来交互验证 如果你不知道Gitee是干什么用的,那你应该知道Github吧,一个存放源码或者文件的地方 至于软件访问了Gitee什么内容或者执行了什么操作,就要继续进行分析 软件分析
接着上面的分析思路,这里就可以掏出CE来搜索软件有没有相关Gitee的信息,为啥不直接用dbg的搜索?因为用过的都知道不好使 CE直接搜索gitee.com,发现有一条相关信息,跳转到该地址内存区域查看,可以看到一个重要信息 打开这个网站后,竟然就直接明文看到所有授权数据 因此可以大致的猜测到软件的验证思路: 打开软件 ?访问授权数据页面 ?校验本机机器码/QQ是否登记 ?授权成功/失败 按照软件的验证思路,那么拿下授权就有多种方法: 方法1:授权页面替换
页面替换方法最为简单,在Gitee建立相同的页面,替换掉软件的原地址即可。 需要注意的是:与原地址保持相同的地址长度 避免了长度溢出或不足,可以省下不少功夫 方法2:机器码替换
要生成机器码,那么软件必须要先读取机器的信息 在获取电脑硬件信息的常用API都下个断看看,注意软件是64位程序,64位大多采用utf8编码,API应优先使用带W结尾的。GetAdaptersInfoGetVolumeInformationGetComputerName 获取机器码时,在GetVolumeInformation被断下来,直接返回上一层继续单步 可以看到在000000014005F987处的call,根据GetVolumeInformation数据生成了一个机器码 000000014005F987 | E8 0417FAFF | call 自动.140001090
由于逃单者提供了一台授权的机器,0x967BEFD2,这里直接将该授权作为机器码返回值。 替换后,直接进入软件。 最后
至此教程已经结束,由于此教程仅作交流学习及思路分享,所以教程不会提供成品,而且我也不知道软件的具体作用,只是鼓励大家多动手。 软件漏洞及相关洩漏的机器码已经提交给作者进行修复。
|