安装过程不做说明
官网地址:https://x64dbg.com/
官网地址:https://www.huorong.cn/
下载地址:https://github.com/westoncampbell/SpyPlusPlus
有安装了Visual Studio2013-2022的在工具栏可以找到
官网地址:http://www.x-ways.net/winhex/
官网地址:https://www.internetdownloadmanager.com/
软件在启动过程中肯定会访问注册表或者一些文件,或者发送一些网络请求,来获取自己的注册信息,这里使用火绒剑来观察软件的行为.
打开之后,我们开启监控,然后运行IDM,IDM启动完成之后停止监控
可以在日志中看到IDM的一些行为日志
先右键IDMam.exe点击包含’IDMan.exe’,过滤出与IDM相关的行为日志
然后点击左上方过滤,进行动作过滤
与注册表相关的行为很多,这里只关注路径里有IDM相关名称的记录就行了,如
动作过滤中进行筛选,然后在进程过滤中取消IDM
网络行为一般会调用更底层的进程进行请求,所以要取消包含
可以看到访问了IDM 相关网站,我在虚拟机中分析,没有网络,所以只对test.internetdownloadmanager.com进行了测试连接.
然后连上网络再试试
可以看到有多个idm相关网址的dns请求,猜测一下最下面的registeridm.com就是注册idm时会访问的地址.
通过百度随便找个序列号,我这里就不提供了
问: 为啥要百度找个序列号,自己乱填一个不行吗?
答: 因为程序会对序列号按照一定算法进行校验,就像身份证号一样,最后一位是校验位.校验通过了才会把序列号发给服务器进行再次验证.
同样的我们要知晓软件注册过程中发生了什么
然后,断开网络
问:为啥要断网
答:因为有网和没有网结果不一样
打开cmd命令行
ipconfig /flushdns
我们打开注册表(win+R 输入regedit,回车)
找到该地址
HKEY_USERS\S-1-5-21-3414719089-1786182962-4277031652-1000\Software\DownloadManager\
网络连接失败,IDM自动关闭了
发现已成功,其实还没有发给服务器验证,只是本地校验通过
这里其实有一种思路,就是不让他去连接注册服务器去注册
我试过修改host文件,让它访问错误的地址
不过IDM启动时会检查host文件,又给改回来了,或者自己进行dns查询.
发现还是注册成功的…
那就多试几次,直到出现以下界面
点击确定后,出现重新注册页面,点击×关闭,不要注册
等待出现正在退出窗口,停止日志监控。
看了一圈日志,没发现啥重要的信息
添加MessageBoxW 断点,下方命令行输入
bp MessageBoxW
作用:当显示对话框前中断
按F9继续运行,直到在调用MessageBoxW中断
在右下加堆栈窗口中可以看到假冒序列号的提示信息,现在的目标就是找到是谁生成的提示信息。
在堆栈中下滑,找到第一次显示 "一个假冒的序列号被用来注册 Internet Download Manager。IDM 正在退出…"的位置
双击idman.0135E473 ,上方的汇编代码会跳转到该位置.或者ctrl+G输入0135E473跳转到该命令处。
在该命令的前几条汇编代码处打下断点,然后ctrl+F2重启程序,运行代码直到碰到该断点。
翻了一遍该地址周围,发现没有有跳转到该地址的代码,堆栈中也没有。
那在堆栈中往上看
该地址上面一个明显是我们输入的序列号,再上面应该是我们上一个调用的函数的返回地址,所以我们可以在这个返回地址打下断点。
bp 0016E096
然后重启程序,运行代码直到该断点
注意:代码地址可能会因为程序重新启动发生改变,但我们打下断点还是能找到的
到该地址后,按F8进行单步调试,注意跳转指令
发现运行到这个位置时,会跳转到提示虚假序列号的代码。此时eax = 3
按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这个函数对序列号的有效性进行了验证,进入这个函数内部可以看到其读取了序列号、用户名等信息
修改完后我们F9运行代码,可以看到我们的程序窗口已经出现了,不过多了一个对话框。其中的内容翻译过来就是下面这些。
“Internet下载管理器已使用假序列号注册。请注意,被**的产品可能无法正确工作,下载文件时可能会出错。因此,我们建议您购买功能齐全的产品”
由此可以看到eax的值是关键,此外程序还有其他部分对代码进行了验证,导致了弹窗的出现。
此外我们可以使用IDM反编译一下,看看
显然在我们刚刚修改eax的汇编代码上方,call
我们重启程序,并运行到该函数内
按ctrl+F9运行到返回
我们根据代码反向推断,箭头所指处之后是我们最后能确定肯定会执行的地方。我们在此打下断点,重启并运行到该位置。
从堆栈中我们可以知道,代码在此之前执行了箭头所指函数,我们跳转到该位置并打下断点
可以看到此处的下两行代码将eax赋值成了3,我们修改,我们点击该处代码,按空格修改代码
mov eax, 0x0,然后运行程序,就能发现程序能正常启动了
找到IDM源程序位置,复制一份命名位idman_1.exe
用winhex打开idman_1.exe
按下ctrl+alt+x搜索十六进制数值搜索该位置的汇编十六进制代码,(下图中十六进制代码下有下划线的是可变地址,每次启动都会变,不能用来搜索)
搜索 B803000000E95EFBFFFF
找到该位置后将 EB03改为EB00,保存文件
首先我们需要停止调试,然后双击idman_1.exe运行代码查看状态
程序已经能启动,不过在过一会儿之后会出现这个弹窗导致程序终止。
睡觉去了,明天见
不要输入序列号,无限试用