最近看驱动程序教程,对IRP的理解有点模糊,书中介绍到IRP跟踪利器irptrace工具,于是下载之,发现还得注册,于是想破解之。点开程序发现弹出已对话框(见下图)
上面说如果购买本产品就会得到一个序列号,如果不购买本产品就只能试用15天,这就说明程序功能上没有限制,只是有时间限制,而且每次出现都会弹出这个对话框并且在桌面上停留30秒。只要软件功能上没有限制就有破解的意义,一般来说软件的限制类型有以下两种:一、时间限制;二、功能限制。功能限制又可分为功能不全的体验版软件和功能齐全但是不让使用的软件。功能不全的软件是不用破解的,就是能破解也没有意义,因为软件本身就没有附带额外的功能。
先猜测一下这个软件的流程:很有可能就是从注册表里或文件里读取一个标志,看是否已注册,如果未注册就弹出这个窗口,已注册就直接进入主程序。于是我段在了RegQueryValueExA函数,跟了好久没有找到读取注册码的地方,最终迷失在了代码的海洋里 ,既然这个方法不行那就想第二个方法,不达目的誓不罢休。既然它要显示刚开始那个窗口,总得注册窗口类创建窗口类吧,把断点下载RegisterClassA然后继续往下走,总能找到显示这个窗口的入口代码。果断下段,F9运行后,程序停在:
77D2EA5E > 8BFF mov edi, edi ; USER32.LoadIconA
77D2EA60 55 push ebp
77D2EA61 8BEC mov ebp, esp
77D2EA63 83EC 30 sub esp, 30
77D2EA66 8B45 08 mov eax, dword ptr [ebp+8]
77D2EA69 56 push esi
77D2EA6A 57 push edi
77D2EA6B 6A 09 push 9
77D2EA6D 59 pop ecx
77D2EA6E 8D70 04 lea esi, dword ptr [eax+4]
77D2EA71 8B00 mov eax, dword ptr [eax]
77D2EA73 8D7D D8 lea edi, dword ptr [ebp-28]
77D2EA76 F3:A5 rep movs dword ptr es:[edi], dword p>
77D2EA78 8945 D4 mov dword ptr [ebp-2C], eax
77D2EA7B 33C0 xor eax, eax
77D2EA7D 68 00010000 push 100
77D2EA82 50 push eax
77D2EA83 50 push eax
77D2EA84 8945 FC mov dword ptr [ebp-4], eax
77D2EA87 8D45 D0 lea eax, dword ptr [ebp-30]
77D2EA8A 50 push eax
77D2EA8B C745 D0 3000000>mov dword ptr [ebp-30], 30
77D2EA92 E8 6AB9FEFF call 77D1A401
77D2EA97 5F pop edi
77D2EA98 5E pop esi
77D2EA99 C9 leave
77D2EA9A C2 0400 retn 4
执行到返回后一路运行,经过CreateWindowExA,这时候那个对话框还未出现,继续运行最后返回到
0044F101 |. 834D FC FF or dword ptr [ebp-4], FFFFFFFF
0044F105 |. 8D8D 38FFFFFF lea ecx, dword ptr [ebp-C8]
0044F10B |. E8 347D0600 call 004B6E44
0044F110 |> F683 CC000000>test byte ptr [ebx+CC ], 20
0044F117 |. 5F pop edi
0044F118 |. 5B pop ebx
0044F119 |. 75 13 jnz short 0044F12E
0044F11B |. 6A 00 push 0
0044F11D |. 6A 00 push 0
0044F11F |. FF75 0C push dword ptr [ebp+C]
0044F122 |. 68 18AB4F00 push 004FAB18
0044F127 |. E8 96810400 call <jmp.&TSCUST.TSC_ShowSplashScree>
0044F12C |. EB 0E jmp short 0044F13C
0044F12E |> 68 18AB4F00 push 004FAB18
0044F133 |. E8 84810400 call <jmp.&TSCUST.TSC_SetParameters>
那个jnz就是关键跳转了,call 就是跳转到非注册的地方了,把jnz改成je就可以了,最后复制到可执行文件,执行后果然没有那个小对话框了。 call 004B6E44就是验证是否注册的过程,ebp+CC应该就是保存序列号的地方,在程序的开始阶段这个地方就被保存进去了一个值,对这个地址内存写入断点发现是经过两次写入的,由于本人是菜鸟,对这个过程没看太明白,哪位高人深入探索了希望能告诉我细节。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)