目标程序:看过视频就知道了,呵呵!
这个视频主要是讲解如何打SMC补丁,让程序把真实的注册自行保存下来,适用于程序中出现明码而没有进行明码比较的情况!
[color=#FF0000]迎新年,贺新春,完全开放![/color]
密码:[size=5][color=#0000FF]SA8wf4t0vJivYcTT[/color][/size]
下面的说明为视频配套说明:
视频截图:
一、首先通过常规方法找到程序出现真实注册码的地方与保存注册码的地方:
1、保存注册码的地方:
当然我们注册时,程序是通过调用:
004ED4BC . 8B4D FC mov ecx, dword ptr [ebp-4] ; ECX指向经过加密的注册码,将写入注册表
004ED4BF . BA A4D54E00 mov edx, 004ED5A4 ; ASCII "code"
004ED4C4 . 8B45 F0 mov eax, dword ptr [ebp-10]
004ED4C7 . E8 C406F4FF call 0042DB90
来实现保存注册的!
2、程序重启运行后,读取保存到注册表的信息进行比较是在:
004FBA72 |. 8B55 DC mov edx, dword ptr [ebp-24]
004FBA75 |. 8B45 F0 mov eax, dword ptr [ebp-10]
004FBA78 |. E8 43A0F0FF call 00405AC0
004FBA7D |. 75 04 jnz short 004FBA83
二、找一个打SMC补丁的地方与保存数据的地方:
打SMC补丁代码是在代码段寻找,这里找的是:
[color=#FF0000]004FDC30[/color]
保存数据的地方是在数据段找的(需要注册段的权限设置,一定要有可写可读的权限):
00501FC0 0000 add byte ptr ds:[eax],al
00501FC2 0000 add byte ptr ds:[eax],al
三、然后就是写SMC补丁代码了:
先在出现真码时,通过一个跳转jmp 004FDC30,跳转到SMC补丁处:
mov edx, dword ptr [ebp-24]
mov eax, dword ptr [ebp-10] ========补上代码
======================此时EAX指向了真实注册码
pushad===========保存寄存器的值
mov esi,eax=============将esi指向源字符,此处即真码
mov ecx,dword ptr [esi-4]====保存字符长度到ECX,为什么是esi-4处是长度,是由Delphi程序特性决定的
push 00501FC0=============将要保存数据的地址压入堆栈
pop edi==================然后再弹出到EDI,为什么不是直接赋值,是为了避免重定位
mov dword ptr [edi-4],ecx==========同样道理,将字符长度保存到地址前一DWORD 处
rep movs dword ptr [edi],dword ptr [esi]====开始拷贝
popad===========完成工作,恢复寄存器的值
push 004FBA78
retn=============此处不是直接JMP回去,也是为了尽量避免重定位
在保存注册码的地方,同样通过一个跳转:JMP 004FDC51,来到SMC补丁处,这里较简单:
push 00501FC0
pop ecx==================将ECX指向保存真码的位置,通过堆栈完成,依然是为了避免重定位
mov edx, 004ED5A4
mov eax, dword ptr [ebp-10]
push 004ED4C7
retn===================补上代码,然后返回就OK了!
四、完成以上步骤后,运行找补丁的程序,随意注意,即可将真码自行写入到注册表,完成注册了,呵呵!
[url=http://softs.7softs.com/iawen/通过SMC补丁实现程序自注册.rar][color=#FF0000]视频下载[/color][/url]
可惜不是七彩SCS学员