Internet Download Manager 逆向分析

news2024/10/7 20:32:49

写在前面

文章仅供学习,切勿用于商业用途,出于版权原因,文章不提供资源下载。

论坛上较早之前已经有前辈对IDM的序列号算法进行过逆向分析

以及最近有师傅尝试对本篇文章对象相同的版本进行了逆向分析,但是比较遗憾的是该文章并没有完全对IDM过注册限制进行逆向分析,但是值得一题的是作者提供了较为详细的处理过注册限制一般方法,还是比较值得初学者学习的。

绕过注册验证

这里笔者不打算从注册表出发。

首先不妨禁用IDM的动态基址,方便我们IDA跟踪。修改如下

修改后程序正常运行,也可以验证这里没有完整性校验。

提示

可以看到提示IDM试用期已到,从这个对话框入手可能找到无限使用的逻辑,但是不一定有监视注册表读写方便,笔者不从这里下手。

点击确定后可以看到提示注册

不如就从这里入手,比较简单的想法是对获取编辑框文本的函数下断点。经过测试,这里获取内容的API是GetDlgTiemTextA,下断后随意填写内容,确定后成功断下,进行两层栈回溯,来到0051FCC5 

在IDA中 

 

笔者对ShowErrorDlg函数进行了简单的重命名,它的行为很容易确定,这里不多解释。

可以看到这里对输入的长度进行了判断,所以可以猜测注册逻辑在这附近,可以看到有很多全局变量例如dword_75CE00充当着标志的作用,我们猜测有一个全局变量标志着是否注册。

简单绕过错误输入的提示框,patch点如下:

1

2

3

4

5

6

0051FE5C nop

0051FF50 nop

0051FF54 jmp

0051FFF6 nop

0051FFFE nop

0051FE5C nop

patch后再次运行,输入后发现程序直接退出,没有提示错误输入,我们重新跟踪函数0051FB70,跟踪到如下位置时

 发现像一个全局变量写入了0,并尝试Post一个消息,我们查看这个变量的一些引用。在004039E6位置

可以猜测到这是与注册相关。我们尝试在程序启动时修改这个字段的值 

默认为1,我们修改为0,尝试运行 

绕过假序列号验证

经过上面测试,基本上可以确定这个标志的作用,但是还有其他的一些验证对注册码进行了校验,简单的跟踪方法是,在xdbg中搜索这个字符串,对其引用位置下断,筛选有效位置。笔者这里对静态字段750D2C中的内容在PE中进行修改。

 

我们继续绕过假冒序列号验证,笔者这里通过字符串筛选的有效位置为:00451E97

向上回溯,简单的发现如下

尝试修改v112为0,放行程序 

可以看到程序运行了起来。老手段,将返回值为3的地方patch为0即可(00450B87)。

 但是过了一段时间之后,另一个验证接踵而至。

 

绕过定时结束程序

提示过后过一段时间程序自动退出,笔者尝试在一些退出函数中下断,没有收获什么有用的信息,根据这个对话框进行回溯也没有什么结果,因为退出的逻辑与显示对话框的逻辑是分开的。读者可以尝试线程相关的函数。笔者在分析中发现程序大量使用了SetTimer函数,猜测可能是检测到非法注册信息后使用定时器来结束程序,当然因为定时器太多,分析起来也比较麻烦。

这里从750D2C字段下手,因为不管是使用定时器或者线程定时检测注册信息,还是使用定时器去结束进程,在调用这些逻辑之前大概率是会再次读取750D2C这个字段的。尝试对这个字段下硬件访问断点。

重新跑起来,筛选敏感位置0046B4DF,再其下方我们发现取了一些随机值,然后设置了一些定时器,如下:

这个函数中设置了很多定时器,我们在定时器位置下断,尝试直接让J_SetTimer返回绕过。绕过后程序果然没有退出,也没有提示假序列号,经过尝试关键的位置在0046BC0D,如下,绕过两个Timer即可 

如上,可以看到在下载东西时还会验证,简单的跳过这个MessageBox(0046C76A)即可 

还有一个注册窗口,对CreateDialogIndirectParamA下断栈回溯,找到patch点:004921F8,直接跳过窗口创建即可,如下 

还有一个小检查,对MessageBoxW下断跳过即可 patch:00472CCA 

程序会启动进程IDMGrHlp.exe经过测试命令行ch = 3如下时表示检测到了注册码

1

"C:\Users\25327\Desktop\IDMD\IDMGrHlp.exe" /ch 3 /1511788

 

 笔者处理方法也非常粗暴,patch:0048F8F6,可能去IDMGrHlp.exe里Patch比较好,但是在这里patch后暂时没发现什么异常。

总结

很少见到MFC图形界面程序了,但是开始定位定时结束的逻辑时因为方向出了一些问题导致花了一些时间。总的来说暴力破解肯定是不如注册机优雅,但确实是比较有效率。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1121261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

瑞萨e2studio(26)----SPI驱动TFT-LCD屏

瑞萨e2studio.26--SPI驱动TFT-LCD屏 概述视频教学csdn课程样品申请完整代码下载屏幕接口接线方式新建工程工程模板保存工程路径芯片配置工程模板选择时钟配置开始SPI配置SPI属性配置IO配置头文件定义回调函数lcd_init.clcd.c设置区域颜色显示字符串显示汉字显示图片结果演示 概…

点击查看详情 | 网页版微信客户管理系统如何操作试用?

微信作为我们日常生活中最常用的社交应用之一,早已成为我们与朋友、家人和同事保持联系的重要工具,也是营销引流的重要平台。 通过微信营销,可以比较精准定向亲近用户。而微信的功能并没有很能满足做微信营销的人群,所以我们需要借…

S5PV210裸机(五):定时器

本文主要探讨210定时器相关知识,210定时器主要包含PWN定时器,系统定时器,看门狗,RTC。 PWM定时器 210有5个PWM定时器,timer0、1、2、3通过对应PIO产生PWM波形信号并输出,timer4没有GPIO只产生内部定时器中断 PWM…

Python 安装CSF(布料模拟滤波)的环境配置

一、环境配置 1.1 下载源码: Github下载CSF库源码 1.2 解压文件如下: 二、安装CSF库 2.1在解压文件中找到python文件夹所在目录 2.2 输入cmd并回车,来打开终端窗口 2.3激活虚拟环境 通过: activate +你的虚拟环境名称。来激活安装CSF库的虚拟环境。【不执行此

k8s镜像加devops

展示 1.配套资料2.devops 3.elk日志收集 4.grafana监控 5.dashboard![在这里插入图片描述](https://img-blog.csdnimg.cn/bf294f9fd98e4c038858a6bf5c34dbdc.png 目的 学习k8s来来回回折腾很久了,光搭个环境就能折腾几天。这次工作需要终于静下心来好好学习了一…

【USMA】N1CTF2022-praymoon

前言 本题主要利用 USMA 解题,当然还有其他做法,暂时不表 程序分析 启动脚本就不看了,该开的保护都开了。看下文件系统初始化脚本: #!/bin/shmkdir /tmp mount -t proc none /proc mount -t sysfs none /sys mount -t devtmpf…

codeforces (C++ Haunted House)

题目: 翻译: 思路: 1、由题目可知,他想让我们判断交换相邻字符位置后将二进制转为十进制后,能否整除2的次方。能整除即输出需要交换的次数,不能则输出-1。(例:输入3和010这组数据就…

二分查找:如何快速定位IP对应的省份地址?

文章来源于极客时间前google工程师−王争专栏。 通过IP地址查找IP归属地功能: 这个功能是通过维护一个很大的IP地址库来实现。地址库中包含IP地址范围和归属地的对应关系。 当我们查询202.201.133.13这个IP地址归属地时,在地址库中搜索,这个…

真实感受:是智能家居在选择合适的技术!

科技从来都是为了让我们的生活更加的简单、舒适,而智能家居的智能,体现在如何更更更方便的使用我需要控制的家居。 例如:下班躺在床上想休息,房间和大厅的灯还开着,这时你会选择什么产品躺着解决问题? 红外…

【MySQL】逻辑架构

逻辑架构 逻辑架构剖析服务器处理客户端请求连接层服务层SQL Interface : SQL接口Parser : 解析器Optimizer : 查询优化器Caches&Buffers : 查询缓存组件 引擎层存储层 SQL执行流程MySQL查询流程查询缓存解析器词法分析语法分析 优化器执行器 数据库缓冲池 逻辑架构剖析 服…

云安全—责任共担

0x00 前言 云安全的职责范围实际上一直遵循的是,谁提供谁负责,如果交付给云消费者的时候,交付者使用过程中就要自行负责,也就是我们经常遇到的配置不当等问题,在三层服务模式中,责任互相嵌套,最…

软件测试(五)自动化 selenium

文章目录 自动化测试单元测试:单元测试:UI自动化 selenium工具定义特点:原理:seleniumjava环境搭建SeleniumAPI获取测试结果:添加等待浏览器操作键盘事件鼠标事件多层框架/窗口定位下拉框处理弹窗处理上传文件操作关闭…

10种常用基础模块电路,电子控制不再是难题!

你是否曾经为电子控制中的复杂电路而烦恼? 现在,我将向你展示10个最具实用性和普遍性的模块电路图,让你轻松掌握电子控制的核心技术! 这些电路图不仅简单易懂,而且非常具有趣味性: 1、RS232通讯电路&…

Java面试——RPC协议

涉及到分布式方面知识的话,RPC协议是逃不开的,所以在此记录一下RPC协议。 什么是RPC协议 RPC协议(Remote Procedure Call)远程过程调用,简单的来说:RPC协议是一种通过网络从远程计算机程序获取服务的协议…

【unity小技巧】实现无限滚动视图和类似CSGO的开箱抽奖功能及Content Size Fitter组件的使用介绍

文章目录 一篇一句前言素材一、无限滚动视图1. 绘制视图2. Content Size Fitter是布局控件(1)在文本框中使用(2)控制Scroll View(Scroll Rect组件)控件下Content的大小 3. 控制视图无限滚动4. 向右拉无限滚动5. 修复滚动视图一卡一…

julia笔记:字符和字符串

1 字符 Char类型的值代表单个字符 ca #a: ASCII/Unicode U0061 (category Ll: Letter, lowercase)typeof(c) #Char 将 Char 转换为其对应的整数值,即 Unicode 代码 cInt(c) c #97typeof(c) #Int64 将一个整数值(Unicaode)转回 Char Cha…

杂谈:DC对Verilog和SystemVerilog语言的支持

DC对Verilog和SystemVerilog语言的支持 设计语言用哪种?Design Compiler对二者的支持简单的fsm电路测试测试结果对比写在最后 设计语言用哪种? 直接抛出结论:先有电路,后为描述。设计端而言,没有语言的高低好坏&#…

IMX6ULL板开发——第一个应用程序

实现第一个应用程序&#xff1a;在IMX6ULL开发板上运行程序hello.c #include <stdio.h>/* 执行命令: ./hello weidongshan* argc 2* argv[0] ./hello* argv[1] weidongshan*/int main(int argc, char **argv) {if (argc > 2)printf("Hello, %s!\n", arg…

ASRPRO语音识别模块

ASRPRO语音识别模块 SOFT IIC 与PCA9685模块通信 pca9685 iic通信 地址位 ADDR<<1|0 左移一位 #define I2C_WRITE 0 #define I2C_READ 1 否则通信地址错误 asrpro 通过UART与电脑连接&#xff0c;可以进行简单的交互 将STM32作为接口扩展&#xff0c;通过SPI或I…

【RNA folding】RNA折叠算法与生物物理约束

文章目录 RNA折叠RNA folding representation1 DP for simple folds1.1 Nussinov Algorithm objective1.2 energy constraints1.3 The key idea of the algorithm 2 DP for stacking and complex foldsStochastic context free grammars 来自Manolis Kellis教授&#xff08;MIT…