[原创]模拟OD获取软件的注册码

您所在的位置:网站首页 注册码破解软件 [原创]模拟OD获取软件的注册码

[原创]模拟OD获取软件的注册码

2024-03-15 01:58| 来源: 网络整理| 查看: 265

最近朋友给了一个软件,让破解一下,软件没什么保护,首先OD打开直接准备下断,结果查找一看发现没有获取编辑框的API函数,再尝试给注册的"确定"按钮下消息断点,但不知道什么原因没下成功,然后直接用“超级字符串搜索”搜索Unicode字符,查找"无法通过验证",查到后汇编跟随,如下: 往上翻,在“40FCD1 push 2D”处下断,一步步跟,在“0040FCE2   CALL HydroLab.00405430”此条指令执行后ecx中惊现注册码 但是这个软件的注册码在不同的机器上是不同的,本人很懒,找到注册码了就懒得继续去跟了,也懒得去分析软件的算法,但必须给朋友一个在他机子上能正确使用的注册码,那怎么办,懒人有懒方法,我们用OD分析得到了注册码,那我们写一个注册机,模拟OD过程不就同样可以得到注册码。而且在不同的机子上都可以通用。 首先看我们用OD搜注册码的过程,我们只要让软件运行到0040FCE2   CALL HydroLab.00405430”此条指令后断下,取ecx的值,然后读其指向的内存,我们就能得到注册码了。 下面是代码 DebugProc proc local BPNum:DWORD mov BPNum, 0 invoke UH_FindProcess, addr szFindWndName mov hFindProcess, eax mov FindProcessID, edx .if eax != 0 invoke WriteProcessMemory, hFindProcess, BPAddr, addr WrinteBP, 1, NULL ;在“40FCEF”写入断点 invoke DebugActiveProcess, FindProcessID ;附加进程进入调试 .while TRUE invoke WaitForDebugEvent, addr strDebugEvent, INFINITE ;等待调试信息 .break .if strDebugEvent.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT .if strDebugEvent.dwDebugEventCode == CREATE_PROCESS_DEBUG_EVENT mov strContext.ContextFlags, CONTEXT_FULL mov eax, strDebugEvent.u.CreateProcessInfo.hThread ;保存调试线程的句柄 mov hDebugThread, eax .elseif strDebugEvent.dwDebugEventCode == EXCEPTION_DEBUG_EVENT .if strDebugEvent.u.Exception.pExceptionRecord.ExceptionCode == EXCEPTION_BREAKPOINT ;捕获调试进程的断点 .if BPNum > 0 ;被调试进程第一次进入调试时会自动产生一个断点信息,忽略 invoke GetThreadContext, hDebugThread, addr strContext ;获取调试进程的上下文信息 invoke ReadProcessMemory, hFindProcess, strContext.regEcx, addr EditBuffer, 18, NULL ;读取ecx地址说保存的注册码信息 invoke SetDlgItemText, hWinmain, IDC_EDT_OutPut, addr EditBuffer .endif inc BPNum invoke ContinueDebugEvent, strDebugEvent.dwProcessId, strDebugEvent.dwThreadId, DBG_CONTINUE .continue .endif .endif invoke ContinueDebugEvent, strDebugEvent.dwProcessId, strDebugEvent.dwThreadId, DBG_EXCEPTION_NOT_HANDLED .endw .else invoke MessageBox, NULL, addr szProcessFindfail, NULL, MB_OK .endif ret DebugProc endp 1、我们先把软件运行起来,然后“40FCEF”的位置(其他位置也可以)写入中断指令“CC”,这样软件点注册后会中断在这里 2、软件断下来了,那么我们如何获取他的ecx呢,方法有多种,前面说过我们用模拟OD的方法,那么就用“DebugActiveProcess”附加软件进程,然后用“WaitForDebugEvent”循环捕获软件的断点异常,由于我们第一次附加进程时调式软件会自动产生一个断点异常,这个断点不是我们要的,我们加入一个循环计数,判断是否是第一次产生的中断 3、当我们点击软件注册后,软件断下,被我们的注册机捕获断点异常,然后用“GetThreadContext”获取调试进程的上下文信息,这里包含了调试软件几乎所有的寄存器信息,我们取ecx后然后读取软件的注册码信息     代码写得比较简陋,有兴趣的朋友还可以加入自动打开软件然后发送一个注册消息,模拟软件注册过程,然后自动得到注册码,这里我就不多写了 软件注册码得到后的截图: 源代码: UnHydroLab.zip 注册软件: HydroLab.haozip01.zip HydroLab.haozip02.zip

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

上传的附件: 字符串搜索.jpg (75.22kb,1032次下载) ecx.jpg (50.71kb,23次下载) 注册码.jpg (7.07kb,1029次下载) UnHydroLab.zip (4.12kb,171次下载) HydroLab.haozip01.zip (3.00MB,212次下载) HydroLab.haozip02.zip (1.55MB,192次下载)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3