IDM 6.4.1逆向分析笔记

article/2025/10/3 3:38:52

环境准备

安装过程不做说明

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

弹窗问题

睡觉去了,明天见

另一种解决方案

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


http://chatgpt.dhexx.cn/article/oFfPjDsf.shtml

相关文章

IDM下载器软件激活序列号错误如何解决?

Internet Download Manager (IDM)是最流行的 Windows 下载管理器。如果你平时工作中使用过IDM,您会惊叹 IDM 下载文件的速度有多快。IDM 还将修复因连接丢失、网络问题、计算机关机或意外断电而中断的下载并恢复中断的下载。如果您之前使用过 IDM 试用版&#xff0c;但您已经购…

关于IDM下载器,提示:一个假冒的序列号被用来注册……idea项目文件路径报红

关于IDM下载器&#xff0c;提示&#xff1a;一个假冒的序列号被用来注册…… 到C:\Windows\System32\drivers\etc 修改目录下面的hosts文件&#xff08;如果没有修改的权限就右键属性hosts文件修改user的权限为完全控制&#xff09;&#xff0c;在hosts里面增加以下内容&#x…

Pandas-csv格式转tsv格式

原文链接 http://chenhao.space/post/b7b37f12.html .csv to .tsv 这是一个CSV格式的文件&#xff1a; 我想要提取出表头为rating和comment的数据&#xff0c;并且转为tsv(每一列以\t分隔)格式。 import pandaspath ./MovieRatings.csv pd_all pd.read_csv(path) pd_all.t…

傻白入门芯片设计,Substrate/RDL/Interposer/EMIB/TSV(三)

目录 一、Substrate&#xff08;衬底或基板&#xff09; &#xff08;1&#xff09;硅工艺的互连衬底 &#xff08;2&#xff09;封装有机基板 &#xff08;3&#xff09;基础知识科普 二、RDL Interposer 技术 三、硅中介层&#xff08;Si Interposer&#xff09; 四、…

第四章 Tsv文件的抽取

目录 一.Tsv介绍 二.案例介绍 三.案例实现 1.建立转换 2.配置控件 四.运行结果 一.Tsv介绍 TSV是Tab-separated values的缩写&#xff0c;即制表符分隔值。使用制表符分隔数据字段的文件被称为制表符文件。制表符文件中的数据以表格结构储存&#xff0c;每一行储存一条记录&…

Python逐行读取tsv文件

tsv文件中的分隔符一般是‘\t’&#xff0c;比如下边这个文件&#xff1a; 该rating.tsv文件没有表头&#xff0c;逐行读取方法如下&#xff1a; with open(rating.tsv, r, encodingutf-8) as f:for line in f:# 读取一行后&#xff0c;末尾一般会有一个\n&#xff0c;所以用s…

在线JSON转TSV工具

在线JSON转TSV工具 在线JSON转TSV工具 JSON To TSV Converter 帮助你在线将 JSON 转换为 TSV。 JSON To TSV Converter 帮助你在线将 JSON 转换为 TSV。 JSON To TSV Converter 帮助你在线将 JSON 转换为 TSV。 https://toolgg.com/json-to-tsv.html

在线Excel转TSV工具

在线Excel转TSV工具 在线Excel转TSV工具 Excel To TSV Converter 可帮助你在线将 excel 文件转换为 TSV。 Excel To TSV Converter 可帮助你在线将 excel 文件转换为 TSV。 Excel To TSV Converter 可帮助你在线将 excel 文件转换为 TSV。 https://toolgg.com/excel-to-tsv.ht…

在线CSV转TSV工具

在线CSV转TSV工具 在线CSV转TSV工具 CSV To TSV Converter 在线将 CSV 数据转换为 TSV。灵活的选项&#xff0c;允许你编辑转换后的 TSV 文件。 CSV To TSV Converter 在线将 CSV 数据转换为 TSV。灵活的选项&#xff0c;允许你编辑转换后的 TSV 文件。 https://toolgg.com/cs…

在线TSV转SQL工具

在线TSV转SQL工具 在线TSVToSQLConverter TSV To SQL Converter 将 TSV 数据在线转换为 SQL。你有三个选项可以转换&#xff0c;如 INSERT、UPDATE 和 DELETE。 TSV To SQL Converter 将 TSV 数据在线转换为 SQL。你有三个选项可以转换&#xff0c;如 INSERT、UPDATE 和 DELET…

python读取.tsv文件例子(大文件处理)

本文介绍如何用python读取.tsv文件。 目录 1、.tsv 文件介绍 2、.tsv 文件读取 1、.tsv 文件介绍 TSV&#xff08;Tab-separated values&#xff09;文件是一种文本文件格式&#xff0c;它使用制表符作为字段之间的分隔符。每行代表一个数据记录&#xff0c;每个记录中的字段…

【Python】CSV,TSV语料读取的简单操作——内建包csv的使用

背景 在做文本相关的任务时&#xff0c;难免会遇见csv&#xff0c;tsv等格式的数据&#xff0c;但有时只是读取&#xff0c;然后传入到下一个任务中而已&#xff0c;并不会做过多的操作。在这种情况下&#xff0c;可以使用pandas读取&#xff0c;但是难免有些臃肿&#xff0c;…

tsv文件导oracle窜列,TSV文件扩展名 - 什么是.tsv以及如何打开? - ReviverSoft

你在这里因为你有,有一个文件扩展名结尾的​​文件 .tsv. 文件与文件扩展名 .tsv 只能通过特定的应用程序推出。这有可能是 .tsv 文件是数据文件,而不是文件或媒体,这意味着他们并不是在所有观看。 什么是一&nbsp.tsv&nbsp文件? 在TSV文件格式的全称是“制表符分隔…

升序和降序的理解

升序就是从小到大&#xff0c;降序就是从大到小&#xff0c;这里指的是数字的大小 你要说按名次的那个大小&#xff0c;你使用的就是升序排列 上面的理解适用于任何地方 因为是程序员&#xff0c;说下mysql的升序&#xff0c;降序 desc是descend 降序意思 asc 是ascend 升序…

python怎么升序和降序排序

python怎么升序和降序排序 1、首先打开cmd命令提示符&#xff0c;输入指令“ipython”打开python的命令行工具&#xff1a; 2、在命令行中先定义一个变量number数组&#xff0c;里面写入几个数&#xff0c;并用sorted函数对number排序并将排序的结果赋值给变量a&#xff0c;so…

python怎么升序和降序排序?

python怎么升序和降序排序 推荐&#xff1a;《python视频教程》 1、首先打开cmd命令提示符&#xff0c;输入指令“ipython”打开python的命令行工具&#xff1a; 2、在命令行中先定义一个变量number数组&#xff0c;里面写入几个数&#xff0c;并用sorted函数对number排序并将…

Java中的Arrays.sort(),升序降序?

一、一维数组比较 1、默认升序 首先对于sort()函数来说默认是升序的 import java.util.Arrays;public class helloworld {public static void main(String[] args) {int[] arr{1,4,3,6,7,9};Arrays.sort(arr);System.out.println(Arrays.toString(arr));} }2、区间排序sort(…

Js如何实现升序和降序

前言 在网页中,实现列表的升序和降序,是一个比较常见的操作,尤其是在做一些数据栓选表格的时候,按照索引,时间等特定的参数,提供升序和降序排列的功能的 具体示例 sort 原生js 在原生js中主要是操作DOM,遍历节点,通过removeChild()删除节点,而使用appendChild()添加元素去实现的…

堆排序(升序降序)

堆排序是利用堆这种数据结构而设计的一种排序算法&#xff0c;堆排序是一种选择排序&#xff0c;它的最坏、最好、平均时间复杂度均为O(nlogn)&#xff0c;是不稳定排序。 小根堆&#xff08;最小堆&#xff09;&#xff1a;每个结点的值都<其左右孩子结点的值。 大根堆&…

python列表中的升序与降序

在使用python进行编程的时候&#xff0c;我们经常使用到列表&#xff0c;并需要对列表里的元素进行升降序操作&#xff0c;下面以一个简单的例子来展示python列表中的升序与降序操作。**例如&#xff1a;**输入三整数x,y,z,现在需要把这三数进行升序和降序操作 **tips:**使用 .…