环境准备

安装过程不做说明

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运行代码查看状态

程序已经能启动,不过在过一会儿之后会出现这个弹窗导致程序终止。

弹窗问题

睡觉去了,明天见

另一种解决方案

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

IDM 6.4.1逆向分析笔记相关推荐

  1. Windows XP 系统自带扑克牌资源动态链接库cards.dll逆向分析笔记

    Windows XP 系统自带扑克牌资源动态链接库cards.dll逆向分析笔记 使用工具:IDA Pro, Resource Hacker 0. 前言 cards.dll是Windows系统目录下的 ...

  2. 系统自带扑克牌资源动态链接库cards.dll逆向分析笔记

    真是晕啊,这篇文章写到一半的时候竟然有人说cards.dll的源代码可以在MSDN Library中找到,我看了一下本机的MSDN,反正我是没找到,有谁知道在哪找的麻烦指点一下,哎,害的我后面写那么一 ...

  3. js aes加密_某高考咨询网js逆向分析笔记

    一.某高考资讯网逆向分析 某网站的js加密分析,安全签名signsafe + HmacSHA1 + AES 一年前分析过网站数据还没有加密,最近需要获取新的数据发现原先的爬虫失效,请求和响应都经过加密 ...

  4. android逆向笔记,Android逆向分析笔记(1)

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 最近在读<Android软件安全与逆向分析>,虽然不从事逆向研究的工作,但作为一名Android开发者,觉得 ...

  5. Android软件安全与逆向分析笔记

    Dalvik虚拟机概述 Google于2007年年底正式发布了Android SDK,Dalvik虚拟机也第一次进入了人们的视野.它的作者是丹·伯恩斯坦(Dan Bornstein),名字来源于他的祖 ...

  6. 研究抖音私信名片链接和消息卡片逆向分析笔记

    笔者最近遇到朋友的抖音工作室需求,做一个抖音的私信名片链接,分析抖音app的原理后,需要一些加工方法,步骤记录如下: Charles数据采集 对于移动端开发者来说,并不是每个项目都有机会可以直接接触到 ...

  7. 大神论坛 逆向分析 Internet Download Manager 序列号算法 附IDM注册机完整源码

    1. 前言 idm version : 6.38 Build 23 2.算法逆向 IDM的序列号验证函数定位在: 下面是在IDA下的代码分析: .text:00510010 push ebp .tex ...

  8. 安卓逆向学习笔记:native层开发、分析和调试基础

    安卓逆向学习笔记:native层开发.分析和调试基础 本笔记主要是自己看,所以如果有看不懂的地方也请多多包涵,这一篇的笔记主要是<Android应用安全防护和逆向分析>的部分内容. 一 A ...

  9. 《逆向工程核心原理》学习笔记(六):高级逆向分析技术

    目录 前言 一.TLS回调函数 1.TLS简介 (1)IMAGE_DATA_DIRECTORY (2)IMAGE_TLS_DIRECTORY 2.TLS回调函数简介 3.示例1:HelloTls.ex ...

最新文章

  1. html5-Canvas绘图
  2. mysql gtid 搭建主从_MySQL5.7 - 基于GTID复制模式搭建主从复制
  3. 跨域请求的一种解决方案
  4. f12控制台如何查看consul_如何打印consul的错误信息
  5. R开发(part1)--R语言知识体系结构
  6. 【ZOJ - 4032】Magic Points (思维,几何,构造)
  7. 【CodeForces - 195D】Analyzing Polyline (思维,卡精度的处理方式)
  8. oracle sysdate 截取年月日,oracle中extract()函数----用于截取年、月、日、时、分、秒...
  9. 如何在GitHub上发现优秀的开源项目
  10. Mybatis中的@SelectKey注解
  11. AcWing 861. 二分图的最大匹配(匈牙利算法)
  12. java基础--ObjectInputStream和ObjectInputStream类
  13. mysql数据库攻击与防御pdf_SQL注入攻击与防御 中文PDF清晰扫描版(38.6M)
  14. abaqus2018安装教程win10_win10怎么安装abaqus v6.12_win10系统abaqus v6.12安装详细教程
  15. 串口总线舵机之舵机运行
  16. c++ PDFium pdf转为图片
  17. Cocos Creator接入谷歌广告AdMob详细教程(原创)
  18. 23种设计模式-工厂方法模式《辣条工厂》
  19. 什么是V2X?如何通过V2X技术实现5G智慧交通?(一)
  20. 【SPRD CAMERA】1 HAL层初始化流程

热门文章

  1. 面试官:说说new操作符具体都干了什么?
  2. C++:在函数参数中使用++与--运算符
  3. Alfred 4创建自己的自定义搜索教程!
  4. Dimitra宣布在尼泊尔签署新农业技术项目协议
  5. 用计算机计算有什么特点,计算机的主要特点有哪些
  6. 全新仿DS网发卡源码 动态特效源码
  7. 输入一个以回车结束的字符串(少于80个字符),统计其中数字字符的个数.(c基础题)
  8. TensorFlow 17——ch12-Char RNN 文本生成(莎士比亚/诗词)
  9. 区块链不可篡改等特性,可满足金融行业对安全性、可追溯性、有效监管的迫切需求
  10. UML—构件图和部署图