LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

软件逆向破解零基础入门实战09

admin
2025年12月14日 12:47 本文热度 797
继续学习软件逆向零基础学破解第9篇文章。


       这次练习的程序,功能也是非常简单。简单到不知道是干什么的!

      没有注册码注册或破解,就学习下反汇编逆向下它的软件功能代码吧。同样我们打开 OllyDBG将要分析的软件拖入后,F9运行。
      
点击调试器工具栏上的M按钮,找到程序的内存TEXT段,按下回车。

在反汇编窗口单击右键查找字符。
字符串中有点击按钮出现的提示字符,双击进入反汇编窗口。向代码开头下断点(F2)。
F9运行后断下来,F8走一遍了解下软件流程。看到有很多的盘符:C-P。一样的代码:
00401219    57              push edi0040121A    68 9C304000     push Cosh_1.0040309C                     ; C:\0040121F    8D4D A4         lea ecx,dword ptr ss:[ebp-0x5C]00401222    E8 79040000     call <jmp.&MFC42.#537>
这里调用的的API是序号调用的,也看不出什么东西。直接F7进入看看反汇编代码,就能知道它是把盘符读取下长度,然后复制一份保存起来。C-P都是一样的操作。直接在读取P的位置下断点,F9跳过。
F8运行这里
00401346   .  FF75 E8       push dword ptr ss:[ebp-0x18]             ; /RootPathName = "C:\"00401349   .  FF15 04204000 call dword ptr ds:[<&KERNEL32.GetDriveTy>; \GetDriveTypeA

GetDriveTypeA:确定磁盘驱动器是可移动的、固定的、CD-ROM、RAM 磁盘还是网络驱动器。

可能的枚举值包括:

DRIVE_UNKNOWN(0,无法确定类型)

DRIVE_NO_ROOT_DIR(1,根路径无效)

DRIVE_REMOVABLE(2,可移动磁盘如U盘)

DRIVE_FIXED(3,固定磁盘如硬盘)

DRIVE_REMOTE(4,网络驱动器)

DRIVE_CDROM(5,光驱)

DRIVE_RAMDISK(6,RAM磁盘)

执行上面汇编后,EAX值为3

说明C盘是一个固定磁盘。这里在循环判断所有的盘符。

0040134F   .  83F8 03       cmp eax,0x3

就是说得到的盘符只要不是3的就往下执行。

0040134F   .  83F8 03       cmp eax,0x300401352   .  74 3E         je short Cosh_1.0040139200401354   .  8D45 E8       lea eax,dword ptr ss:[ebp-0x18]00401357   .  68 58304000   push Cosh_1.00403058                     ;  CD_CHECK.DAT0040135C   .  50            push eax0040135D   .  8D45 E0       lea eax,dword ptr ss:[ebp-0x20]00401360   .  50            push eax00401361   .  E8 22030000   call <jmp.&MFC42.#924>00401366   .  8B00          mov eax,dword ptr ds:[eax]00401368   .  53            push ebx                                 ; /hTemplateFile = NULL00401369   .  53            push ebx                                 ; |Attributes = 00040136A   .  53            push ebx                                 ; |Mode = 0x00040136B   .  53            push ebx                                 ; |pSecurity = NULL0040136C   .  601         push 0x1                                 ; |ShareMode = FILE_SHARE_READ0040136E   .  68 00000080   push 0x80000000                          ; |Access = GENERIC_READ00401373   .  50            push eax                                 ; |FileName = "E:\CD_CHECK.DAT"00401374   .  FF15 00204000 call dword ptr ds:[<&KERNEL32.CreateFile>; \CreateFileA

这段代码是获取盘符拼接路径如:E:\CD_CHECK.DAT

HANDLE CreateFile(LPCTSTR lpFileName, //普通文件名或者设备文件名DWORD dwDesiredAccess, //访问模式(写/读)DWORD dwShareMode, //共享模式LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针DWORD dwCreationDisposition, //如何创建DWORD dwFlagsAndAttributes, //文件属性HANDLE hTemplateFile //用于复制文件句柄);

CreateFileA以读的方式打开这个文件。只要打开成功,就说明文件存在直接完成注册。


     软件就是搜索C-P所有的盘符,只要不是固定盘(3),它就会去读一个文件CD_CHECK.DAT,正确读取后完成注册。就是判断文件存不存!

这里我分析遇到个问题,可能自己才疏学浅,除了改执行流程外,按正常流程一直也没注册成功。问题主要是CreateFileA打开失败。反汇编中它的第5个参数传入了个0,不知道什么意思。通过函数介绍传的值只有下面几个:

#define CREATE_NEW          1

#define CREATE_ALWAYS       2

#define OPEN_EXISTING       3

#define OPEN_ALWAYS         4

#define TRUNCATE_EXISTING   5

并没看到0的值。所以我电脑一直没调用成功!还是我系统原因?也可能是我分析的不够透吧。有错的地方欢迎大家留言指出,共同学习。


阅读原文:原文链接


该文章在 2025/12/15 9:48:26 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved