环境准备
安装过程不做说明
1. x64dbg
官网地址:https://x64dbg.com/
2. 火绒剑
官网地址:https://www.huorong.cn/
3.SPY++
下载地址:https://github.com/westoncampbell/SpyPlusPlus
有安装了Visual Studio2013-2022的在工具栏可以找到
4.winhex
官网地址:http://www.x-ways.net/winhex/
5.IDM
官网地址:https://www.internetdownloadmanager.com/
软件分析
1. 行为分析
软件在启动过程中肯定会访问注册表或者一些文件,或者发送一些网络请求,来获取自己的注册信息,这里使用火绒剑来观察软件的行为.
1.1 打开火绒剑
在火绒的安全工具的最下方
1.2 开启监控
打开之后,我们开启监控,然后运行IDM,IDM启动完成之后停止监控
可以在日志中看到IDM的一些行为日志
1.3 筛选行为信息
先右键IDMam.exe点击包含’IDMan.exe’,过滤出与IDM相关的行为日志
然后点击左上方过滤,进行动作过滤
1.4先看注册表行为
与注册表相关的行为很多,这里只关注路径里有IDM相关名称的记录就行了,如
1.5 网络行为
动作过滤中进行筛选,然后在进程过滤中取消IDM
网络行为一般会调用更底层的进程进行请求,所以要取消包含
可以看到访问了IDM 相关网站,我在虚拟机中分析,没有网络,所以只对test.internetdownloadmanager.com进行了测试连接.
然后连上网络再试试
可以看到有多个idm相关网址的dns请求,猜测一下最下面的registeridm.com就是注册idm时会访问的地址.
2.尝试注册
2.1 序列号获取
通过百度随便找个序列号,我这里就不提供了
问: 为啥要百度找个序列号,自己乱填一个不行吗?
答: 因为程序会对序列号按照一定算法进行校验,就像身份证号一样,最后一位是校验位.校验通过了才会把序列号发给服务器进行再次验证.
2.2 注册行为监控(断网)
同样的我们要知晓软件注册过程中发生了什么
2.2.1 首先,清空火绒剑的监控日志
然后,断开网络
问:为啥要断网
答:因为有网和没有网结果不一样
2.2.2 清除dns缓存
打开cmd命令行
ipconfig /flushdns
2.2.3 输入注册信息(先别点注册)
2.2.4 开启火绒剑监控,并点击注册,注册完成后点击停止监控
2.2.5 日志过滤
看注册时软件对注册表进行了哪些修改
2.2.6 分析日志
我们打开注册表(win+R 输入regedit,回车)
找到该地址
HKEY_USERS\S-1-5-21-3414719089-1786182962-4277031652-1000\Software\DownloadManager\
可以看到IDM相关的注册信息就在这个路径下
2.2.7 点击确定关闭IDM
网络连接失败,IDM自动关闭了
2.2.8 关于IDM关闭(点x关闭只是最小化,并未退出程序)
点击右下角上箭头,右键IDM图标,点击退出
2.3 启动行为监控(断网)
2.3.1 同样清空日志,开启监控,打开IDM,停止监控
2.3.2 软件启动时一定会去查询序列号
2.3.3 查看软件注册信息
发现已成功,其实还没有发给服务器验证,只是本地校验通过
这里其实有一种思路,就是不让他去连接注册服务器去注册
我试过修改host文件,让它访问错误的地址
不过IDM启动时会检查host文件,又给改回来了,或者自己进行dns查询.
2.3.4 联网测试
先下个文件试试先
去IDM官网下载IDM
2.3.4 重启IDM(右下角退出程序或者任务管理器结束IDM)
发现还是注册成功的…
那就多试几次,直到出现以下界面
点击确定后,出现重新注册页面,点击×关闭,不要注册
IDM修改注册
1. 首先看现在这个状态下,启动idm是否会有访问注册表来获取序列号
1.1 用xdbg32打开idm,并进入入口点
1.2 开启监控,并在xdbg32中按F9继续运行
等待出现正在退出窗口,停止日志监控。
看了一圈日志,没发现啥重要的信息
1.3 xdbg重新运行程序 (Ctrl + F2)
添加MessageBoxW 断点,下方命令行输入
bp MessageBoxW
作用:当显示对话框前中断
按F9继续运行,直到在调用MessageBoxW中断
在右下加堆栈窗口中可以看到假冒序列号的提示信息,现在的目标就是找到是谁生成的提示信息。
1.4 反向推是谁生成的这个提示信息
在堆栈中下滑,找到第一次显示 "一个假冒的序列号被用来注册 Internet Download Manager。IDM 正在退出…"的位置
双击idman.0135E473 ,上方的汇编代码会跳转到该位置.或者ctrl+G输入0135E473跳转到该命令处。
在该命令的前几条汇编代码处打下断点,然后ctrl+F2重启程序,运行代码直到碰到该断点。
1.5 找是谁跳转到idman.0016E45C的
翻了一遍该地址周围,发现没有有跳转到该地址的代码,堆栈中也没有。
那在堆栈中往上看
该地址上面一个明显是我们输入的序列号,再上面应该是我们上一个调用的函数的返回地址,所以我们可以在这个返回地址打下断点。
bp 0016E096
然后重启程序,运行代码直到该断点
注意:代码地址可能会因为程序重新启动发生改变,但我们打下断点还是能找到的
1.6 地址0016E096是如何跳转到 0016E45C的
到该地址后,按F8进行单步调试,注意跳转指令
发现运行到这个位置时,会跳转到提示虚假序列号的代码。此时eax = 3
1.7 修改eax 的值 改为4
按F9继续运行看看会发生什么(有空的同学可以试试别的值,这里只演示此时eax值的作用)
(我这里由于程序长时间不运行,其内部可能存在调试检查,发生了异常,重新运行了一下,就显示了一下界面,并在一会儿后程序因异常暂停)
经过测试发现在这个跳转点修改eax ,无论何值大多都会出现这个注册窗口。
让我们回顾一下这周围的代码
011BE091 | E8 8AB6FFFF | call <idman.sub_11B9720> |判断注册状态
011BE096 | 83C4 04 | add esp,4 |
011BE099 | 8945 A0 | mov dword ptr ss:[ebp-60],eax | 此处读取了eax, 要在此前修改eax
011BE09C | 8945 94 | mov dword ptr ss:[ebp-6C],eax | [ebp-6C]等于eax,此处读取了eax
011BE09F | 8B55 94 | mov edx,dword ptr ss:[ebp-6C] |
011BE0A2 | 85D2 | test edx,edx |
011BE0A4 | 74 0A | je idman.11BE0B0 |
011BE0A6 | C705 04EA4B01 01000000 | mov dword ptr ds:[14BEA04],1 |
011BE0B0 | 8B45 94 | mov eax,dword ptr ss:[ebp-6C] | eax 来自[ebp-6C]
011BE0B3 | 83F8 0C | cmp eax,C | C:'\f'
011BE0B6 | 0F87 2A040000 | ja idman.11BE4E6 |
011BE0BC | FF2485 90EA1B01 | jmp dword ptr ds:[eax*4+11BEA90] |
其实idman.sub_11B9720这个函数对序列号的有效性进行了验证,进入这个函数内部可以看到其读取了序列号、用户名等信息
1.8 提前修改eax
修改完后我们F9运行代码,可以看到我们的程序窗口已经出现了,不过多了一个对话框。其中的内容翻译过来就是下面这些。
“Internet下载管理器已使用假序列号注册。请注意,被**的产品可能无法正确工作,下载文件时可能会出错。因此,我们建议您购买功能齐全的产品”
由此可以看到eax的值是关键,此外程序还有其他部分对代码进行了验证,导致了弹窗的出现。
此外我们可以使用IDM反编译一下,看看
2. 解破序列号验证
2.1 现在我们需要找到是谁将eax改为3
显然在我们刚刚修改eax的汇编代码上方,call <idman.sub_11B9720> 代码修改了eax
我们重启程序,并运行到该函数内
2.2 进入获取注册状态的代码
按ctrl+F9运行到返回
我们根据代码反向推断,箭头所指处之后是我们最后能确定肯定会执行的地方。我们在此打下断点,重启并运行到该位置。
从堆栈中我们可以知道,代码在此之前执行了箭头所指函数,我们跳转到该位置并打下断点
2.3 找到关键汇编代码
可以看到此处的下两行代码将eax赋值成了3,我们修改,我们点击该处代码,按空格修改代码
mov eax, 0x0,然后运行程序,就能发现程序能正常启动了
2.4 使用winhex修改idman.exe
找到IDM源程序位置,复制一份命名位idman_1.exe
用winhex打开idman_1.exe
按下ctrl+alt+x搜索十六进制数值搜索该位置的汇编十六进制代码,(下图中十六进制代码下有下划线的是可变地址,每次启动都会变,不能用来搜索)
搜索 B803000000E95EFBFFFF
找到该位置后将 EB03改为EB00,保存文件
2.5 测试修改后的结果
首先我们需要停止调试,然后双击idman_1.exe运行代码查看状态
程序已经能启动,不过在过一会儿之后会出现这个弹窗导致程序终止。
弹窗问题
睡觉去了,明天见
另一种解决方案
不要输入序列号,无限试用