首页
社区
课程
招聘
电脑维修与优化3.5找注册码及破解反调试
发表于: 2004-12-18 22:58 4633

电脑维修与优化3.5找注册码及破解反调试

2004-12-18 22:58
4633
用友益文书软件制作的电子书。
Delphi程序,用DeDe反编译无果,注册窗口类名为TPanel,DeDe反不出。
用h-point断点万能中断在系统进程,返回程序到CallWinProcA函数(取得输入字符)。
一直返回直到:
004C49EE   call 电脑维修.00431DC8
004C49F3   mov eax,dword ptr ss:[ebp-22C]                  --->输入码
004C49F9   mov ecx,4
004C49FE   mov edx,1
004C4A03   call 电脑维修.0040406C
004C4A08   mov eax,dword ptr ss:[ebp-228]
004C4A0E   mov edx,电脑维修.004C4CFC                       ;  ASCII "0000"
004C4A13   call 电脑维修.00403F74
004C4A18   jnz short 电脑维修.004C4A53
004C4A1A   lea ecx,dword ptr ss:[ebp-230]
004C4A20   mov edx,dword ptr ss:[ebp-4]
004C4A23   mov eax,ebx
004C4A25   call 电脑维修.004A7520
004C4A2A   mov edx,dword ptr ss:[ebp-230]
004C4A30   lea eax,dword ptr ss:[ebp-4]
004C4A33   call 电脑维修.00403C7C
004C4A38   lea eax,dword ptr ss:[ebp-C]
004C4A3B   push eax
004C4A3C   mov eax,dword ptr ss:[ebp-C]
004C4A3F   call 电脑维修.00403E64
004C4A44   mov ecx,eax
004C4A46   mov edx,6
004C4A4B   mov eax,dword ptr ss:[ebp-C]
004C4A4E   call 电脑维修.0040406C
004C4A53   mov eax,dword ptr ss:[ebp-C]                     --->输入码
004C4A56   mov edx,dword ptr ss:[ebp-4]                     --->正确码,0221,?"R
004C4A59   call 电脑维修.00403F74
004C4A5E   jnz 电脑维修.004C4B76
    以下还有防调试代码:
004C4B9E   call 电脑维修.004B3B14                           --->程序到此处停止响应。
    跟入:
004B3B14   push ebx
004B3B15   push esi
004B3B16   push edi
004B3B17   add esp,-10
004B3B1A   mov edi,ecx
004B3B1C   mov esi,edx
004B3B1E   mov ebx,eax
004B3B20   call 电脑维修.0040A464                      --->跟入发现获取时间
004B3B25   fstp qword ptr ss:[esp]
004B3B28   wait
004B3B29   push dword ptr ss:[esp+4]                   ; /Arg3
004B3B2D   push dword ptr ss:[esp+4]                   ; |Arg2
004B3B31   lea eax,dword ptr ss:[esp+16]               ; |
004B3B35   push eax                                    ; |Arg1
004B3B36   lea ecx,dword ptr ss:[esp+18]               ; |
004B3B3A   lea edx,dword ptr ss:[esp+16]               ; |
004B3B3E   lea eax,dword ptr ss:[esp+14]               ; |
004B3B42   call 电脑维修.0040A0D8                          ; \电脑维修.0040A0D8
004B3B47   mov ax,word ptr ss:[esp+C]
004B3B4C   sub ax,word ptr ds:[ebx+4FFCE]
004B3B53   test ax,ax
004B3B56   jnb short 电脑维修.004B3B5C
004B3B58   add ax,3C
004B3B5C   movzx eax,ax
004B3B5F   cmp esi,eax
004B3B61   jge short 电脑维修.004B3B85                  --->比较是否超时。改为JMP即可。
反调试是通过比较输入注册码后程序运行时间是否超过规定来实现的。
Delphi程序如果不能用DeDe反编译真是很难下断,还好这次用万能断点断下来了。谁有更好的方法推荐一下吗?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 280
活跃值: (281)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
2
自己找到了一个方法,用条件断点。好象适用于一些不断调用winproc发送消息的程序,如Borland C, Delphi等。
根据callwindowproc的参数:
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
知道[esp+4]为lpPrevWndFunc,[esp+8]为hwnd,[esp+c]为msg,故下条件断点:
bp CallWindowProcA,[esp+8]==xxxxxxxx && [esp+0C]=0D,其中xxxxxxxx为文本框的句柄,0D指wm_gettext
2004-12-19 12:48
0
游客
登录 | 注册 方可回帖
返回
//