IDM 6.4.1逆向分析笔记

3 篇文章 1 订阅
2 篇文章 0 订阅

环境准备

安装过程不做说明

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运行代码查看状态
在这里插入图片描述
程序已经能启动,不过在过一会儿之后会出现这个弹窗导致程序终止。

弹窗问题

睡觉去了,明天见

另一种解决方案

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值