IDM 6.4.1逆向分析笔记

环境准备

安装过程不做说明

1. x64dbg

官网地址:https://x64dbg.com/

2. 火绒剑

官网地址:https://www.huorong.cn/

3.SPY++

下载地址:https://github.com/westoncampbell/SpyPlusPlus
有安装了Visual Studio2013-2022的在工具栏可以找到
IDM 6.4.1逆向分析笔记_第1张图片

4.winhex

官网地址:http://www.x-ways.net/winhex/

5.IDM

官网地址:https://www.internetdownloadmanager.com/

软件分析

1. 行为分析

软件在启动过程中肯定会访问注册表或者一些文件,或者发送一些网络请求,来获取自己的注册信息,这里使用火绒剑来观察软件的行为.

1.1 打开火绒剑

在火绒的安全工具的最下方
IDM 6.4.1逆向分析笔记_第2张图片

1.2 开启监控

打开之后,我们开启监控,然后运行IDM,IDM启动完成之后停止监控
IDM 6.4.1逆向分析笔记_第3张图片
可以在日志中看到IDM的一些行为日志

1.3 筛选行为信息

先右键IDMam.exe点击包含’IDMan.exe’,过滤出与IDM相关的行为日志
IDM 6.4.1逆向分析笔记_第4张图片
然后点击左上方过滤,进行动作过滤
在这里插入图片描述

1.4先看注册表行为

IDM 6.4.1逆向分析笔记_第5张图片
与注册表相关的行为很多,这里只关注路径里有IDM相关名称的记录就行了,如
IDM 6.4.1逆向分析笔记_第6张图片

1.5 网络行为

动作过滤中进行筛选,然后在进程过滤中取消IDM
网络行为一般会调用更底层的进程进行请求,所以要取消包含
IDM 6.4.1逆向分析笔记_第7张图片
IDM 6.4.1逆向分析笔记_第8张图片
可以看到访问了IDM 相关网站,我在虚拟机中分析,没有网络,所以只对test.internetdownloadmanager.com进行了测试连接.
IDM 6.4.1逆向分析笔记_第9张图片
然后连上网络再试试
IDM 6.4.1逆向分析笔记_第10张图片
可以看到有多个idm相关网址的dns请求,猜测一下最下面的registeridm.com就是注册idm时会访问的地址.

2.尝试注册

2.1 序列号获取

通过百度随便找个序列号,我这里就不提供了
问: 为啥要百度找个序列号,自己乱填一个不行吗?
答: 因为程序会对序列号按照一定算法进行校验,就像身份证号一样,最后一位是校验位.校验通过了才会把序列号发给服务器进行再次验证.

2.2 注册行为监控(断网)

同样的我们要知晓软件注册过程中发生了什么

2.2.1 首先,清空火绒剑的监控日志

在这里插入图片描述
然后,断开网络
问:为啥要断网
答:因为有网和没有网结果不一样

2.2.2 清除dns缓存

打开cmd命令行

ipconfig /flushdns

IDM 6.4.1逆向分析笔记_第11张图片

2.2.3 输入注册信息(先别点注册)

IDM 6.4.1逆向分析笔记_第12张图片

2.2.4 开启火绒剑监控,并点击注册,注册完成后点击停止监控

IDM 6.4.1逆向分析笔记_第13张图片

2.2.5 日志过滤

看注册时软件对注册表进行了哪些修改
IDM 6.4.1逆向分析笔记_第14张图片

2.2.6 分析日志在这里插入图片描述

我们打开注册表(win+R 输入regedit,回车)
找到该地址

HKEY_USERS\S-1-5-21-3414719089-1786182962-4277031652-1000\Software\DownloadManager\

可以看到IDM相关的注册信息就在这个路径下
IDM 6.4.1逆向分析笔记_第15张图片

2.2.7 点击确定关闭IDM

网络连接失败,IDM自动关闭了

2.2.8 关于IDM关闭(点x关闭只是最小化,并未退出程序)

点击右下角上箭头,右键IDM图标,点击退出
IDM 6.4.1逆向分析笔记_第16张图片

2.3 启动行为监控(断网)

2.3.1 同样清空日志,开启监控,打开IDM,停止监控

IDM 6.4.1逆向分析笔记_第17张图片

2.3.2 软件启动时一定会去查询序列号
2.3.3 查看软件注册信息

发现已成功,其实还没有发给服务器验证,只是本地校验通过
IDM 6.4.1逆向分析笔记_第18张图片IDM 6.4.1逆向分析笔记_第19张图片
这里其实有一种思路,就是不让他去连接注册服务器去注册
我试过修改host文件,让它访问错误的地址
不过IDM启动时会检查host文件,又给改回来了,或者自己进行dns查询.

2.3.4 联网测试

先下个文件试试先
去IDM官网下载IDM
IDM 6.4.1逆向分析笔记_第20张图片

2.3.4 重启IDM(右下角退出程序或者任务管理器结束IDM)

发现还是注册成功的…
那就多试几次,直到出现以下界面
IDM 6.4.1逆向分析笔记_第21张图片
点击确定后,出现重新注册页面,点击×关闭,不要注册

IDM修改注册

1. 首先看现在这个状态下,启动idm是否会有访问注册表来获取序列号

1.1 用xdbg32打开idm,并进入入口点

IDM 6.4.1逆向分析笔记_第22张图片

1.2 开启监控,并在xdbg32中按F9继续运行

等待出现正在退出窗口,停止日志监控。
IDM 6.4.1逆向分析笔记_第23张图片
看了一圈日志,没发现啥重要的信息

1.3 xdbg重新运行程序 (Ctrl + F2)

添加MessageBoxW 断点,下方命令行输入

bp MessageBoxW

作用:当显示对话框前中断
按F9继续运行,直到在调用MessageBoxW中断
在这里插入图片描述

IDM 6.4.1逆向分析笔记_第24张图片
在右下加堆栈窗口中可以看到假冒序列号的提示信息,现在的目标就是找到是谁生成的提示信息。

1.4 反向推是谁生成的这个提示信息

在堆栈中下滑,找到第一次显示 "一个假冒的序列号被用来注册 Internet Download Manager。IDM 正在退出…"的位置
IDM 6.4.1逆向分析笔记_第25张图片
双击idman.0135E473 ,上方的汇编代码会跳转到该位置.或者ctrl+G输入0135E473跳转到该命令处。
IDM 6.4.1逆向分析笔记_第26张图片
在该命令的前几条汇编代码处打下断点,然后ctrl+F2重启程序,运行代码直到碰到该断点。
IDM 6.4.1逆向分析笔记_第27张图片

1.5 找是谁跳转到idman.0016E45C的

翻了一遍该地址周围,发现没有有跳转到该地址的代码,堆栈中也没有。
那在堆栈中往上看
IDM 6.4.1逆向分析笔记_第28张图片
该地址上面一个明显是我们输入的序列号,再上面应该是我们上一个调用的函数的返回地址,所以我们可以在这个返回地址打下断点。
bp 0016E096
然后重启程序,运行代码直到该断点
注意:代码地址可能会因为程序重新启动发生改变,但我们打下断点还是能找到的

1.6 地址0016E096是如何跳转到 0016E45C的

IDM 6.4.1逆向分析笔记_第29张图片
到该地址后,按F8进行单步调试,注意跳转指令
IDM 6.4.1逆向分析笔记_第30张图片
发现运行到这个位置时,会跳转到提示虚假序列号的代码。此时eax = 3

1.7 修改eax 的值 改为4

IDM 6.4.1逆向分析笔记_第31张图片
按F9继续运行看看会发生什么(有空的同学可以试试别的值,这里只演示此时eax值的作用)
(我这里由于程序长时间不运行,其内部可能存在调试检查,发生了异常,重新运行了一下,就显示了一下界面,并在一会儿后程序因异常暂停)
IDM 6.4.1逆向分析笔记_第32张图片
经过测试发现在这个跳转点修改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

IDM 6.4.1逆向分析笔记_第33张图片
修改完后我们F9运行代码,可以看到我们的程序窗口已经出现了,不过多了一个对话框。其中的内容翻译过来就是下面这些。
“Internet下载管理器已使用假序列号注册。请注意,被**的产品可能无法正确工作,下载文件时可能会出错。因此,我们建议您购买功能齐全的产品”

IDM 6.4.1逆向分析笔记_第34张图片
由此可以看到eax的值是关键,此外程序还有其他部分对代码进行了验证,导致了弹窗的出现。

此外我们可以使用IDM反编译一下,看看

2. 解破序列号验证

2.1 现在我们需要找到是谁将eax改为3

显然在我们刚刚修改eax的汇编代码上方,call 代码修改了eax
我们重启程序,并运行到该函数内

2.2 进入获取注册状态的代码

IDM 6.4.1逆向分析笔记_第35张图片
按ctrl+F9运行到返回
IDM 6.4.1逆向分析笔记_第36张图片
我们根据代码反向推断,箭头所指处之后是我们最后能确定肯定会执行的地方。我们在此打下断点,重启并运行到该位置。IDM 6.4.1逆向分析笔记_第37张图片
从堆栈中我们可以知道,代码在此之前执行了箭头所指函数,我们跳转到该位置并打下断点

2.3 找到关键汇编代码

IDM 6.4.1逆向分析笔记_第38张图片
可以看到此处的下两行代码将eax赋值成了3,我们修改,我们点击该处代码,按空格修改代码
mov eax, 0x0,然后运行程序,就能发现程序能正常启动了
IDM 6.4.1逆向分析笔记_第39张图片

2.4 使用winhex修改idman.exe

找到IDM源程序位置,复制一份命名位idman_1.exe
IDM 6.4.1逆向分析笔记_第40张图片
用winhex打开idman_1.exe
IDM 6.4.1逆向分析笔记_第41张图片
按下ctrl+alt+x搜索十六进制数值搜索该位置的汇编十六进制代码,(下图中十六进制代码下有下划线的是可变地址,每次启动都会变,不能用来搜索)
IDM 6.4.1逆向分析笔记_第42张图片
搜索 B803000000E95EFBFFFF
IDM 6.4.1逆向分析笔记_第43张图片
找到该位置后将 EB03改为EB00,保存文件

2.5 测试修改后的结果

首先我们需要停止调试,然后双击idman_1.exe运行代码查看状态
IDM 6.4.1逆向分析笔记_第44张图片
程序已经能启动,不过在过一会儿之后会出现这个弹窗导致程序终止。

弹窗问题

睡觉去了,明天见

另一种解决方案

不要输入序列号,无限试用

你可能感兴趣的:(逆向,汇编,笔记,网络,服务器,linux)