lqiulu 发表于 2008-8-26 14:35

修改程序让软件自注册

许多软件是把注册信息放在注册表或ini文件里,我们可以利用程序本身的写入功能让其自己把真正的注册码写入注册表或ini文件从而实现软件的自注册。
举例:

XX网络电视自注册

【详细过程】

此程序采用asprotect高版本加壳,反调试、反内存补丁,有内存校验、CRC校验。但是该程序采用的是明码比较,我们可以利用制作loader实现软件自注册。该程序采用的是ini文件记录注册码,并在输入注册假码的时候也将其写入ini文件。从这我们可以利用其自身的系统API,WritePrivateProfileStringA 写入注册码。我们只要知道注册码的内存地址就可以实现这一功能了。

以下为写入ini的代码:运行程序及退出程序调用两次写入硬件码,注册过程调用一次写入注册码(假码)。

00431DD8/.55pushebp
00431DD9|.8BECmov ebp, esp
00431DDB|.83C4 F8 add esp, -8
00431DDE|.53pushebx
00431DDF|.56pushesi
00431DE0|.57pushedi
00431DE1|.8BF9mov edi, ecx
00431DE3|.8BF2mov esi, edx
00431DE5|.8BD8mov ebx, eax
00431DE7|.8B43 04 mov eax, dword ptr
00431DEA|.E8 7127FDFF call00404560
00431DEF|.50pusheax
00431DF0|.8B45 08 mov eax, dword ptr //这里是硬件码及注册码(假码)的地址
00431DF3|.E8 6827FDFF call00404560
00431DF8|.50pusheax
00431DF9|.8BC7mov eax, edi
00431DFB|.E8 6027FDFF call00404560
00431E00|.50pusheax
00431E01|.8BC6mov eax, esi
00431E03|.E8 5827FDFF call00404560
00431E08|.50pusheax; |Section
00431E09|.E8 4649FDFF call00406754 ; \WritePrivateProfileStringA,调用系统函数写文件
00431E0E|.85C0testeax, eax
00431E10|.75 27 jnz short 00431E39
00431E12|.8B43 04 mov eax, dword ptr
00431E15|.8945 F8 mov dword ptr , eax
00431E18|.C645 FC 0Bmov byte ptr , 0B
00431E1C|.8D45 F8 lea eax, dword ptr
00431E1F|.50pusheax
00431E20|.6A 00 push0
00431E22|.8B0D 80CA4C00 mov ecx, dword ptr ;FIRE_STA.00414550
00431E28|.B2 01 mov dl, 1
00431E2A|.A1 74124300 mov eax, dword ptr
00431E2F|.E8 88A1FDFF call0040BFBC
00431E34|.E8 A31CFDFF call00403ADC
00431E39|>5Fpop edi
00431E3A|.5Epop esi
00431E3B|.5Bpop ebx
00431E3C|.59pop ecx
00431E3D|.59pop ecx
00431E3E|.5Dpop ebp
00431E3F\.C2 0400 retn4
以上多次调用所以不能直接修改。我们找到注册调用的地方,在赋初的时候把假码替换成真码从而实现将真码写入ini文件,实现自注册。

以下代码是注册时调用代码

0049F49F8B45 FC mov eax,dword ptr ss:/ /这里是赋假码初值的,我们把这里换为真码的地址就可实现了。
0049F4A250push eax
0049F4A3B9 84F54900 mov ecx,49F584
0049F4A8BA 90F54900mov edx,49F590
0049F4ADA1 C02D4E00mov eax,dword ptr ds:
0049F4B28B30mov esi,dword ptr ds:
0049F4B4FF56 04 call dword ptr ds: //这里调用写入代码
0049F4B76A 00push 0
0049F4B98D45 EC lea eax,dword ptr ss:
0049F4BC50push eax
0049F4BDB9 84F54900mov ecx,49F584
0049F4C2BA 90F54900mov edx,49F590
0049F4C7A1 C02D4E00mov eax,dword ptr ds:
0049F4CC8B30 mov esi,dword ptr ds:


根据调试真码存放位置为

将以上代码改为
0049F49F /EB 26 jmp short 0049F4C7//跳到给写入内容赋真码处
0049F4A1 |FCcld
0049F4A2 |50 push eax //赋完真值后返回这里继续运行程序的写入过程
0049F4A3 |B9 84F54900mov ecx,49F584
0049F4A8 |BA 90F54900mov edx,49F590
0049F4AD |A1 C02D4E00 mov eax,dword ptr ds:
0049F4B2 |8B30 mov esi,dword ptr ds:
0049F4B4 |FF56 04call dword ptr ds: //这里执行写入过程
0049F4B7 |C3retn //这里改为retn,写完真码后程序就退出。
0049F4B8 |008D 45EC50B9add byte ptr ss:,cl
0049F4BE |84F5test ch,dh
0049F4C0 |49dec ecx
0049F4C1 |00BA 90F54900add byte ptr ds:,bh
0049F4C7 \A1 D02D4E00mov eax,dword ptr ds://这里给eax赋真码
0049F4CC^ EB D4 jmp short 0049F4A2//跳回程序原来的位置继续执行。



利用inline loader制作loader。(由于asprotect有内存校验,所以别的补丁程序制作的补丁会被检测到,还需要找CRC校验点,而inline loader则是对付它的好工具)

更改六处就ok了。
运行loader程序运行,出来主界面后,找到注册的地方,输入任意注册码后点确定程序退出。写真码的过程完成。再次运行主程序的你会发现你的软件已经注册了,是vip版的。

以上只是抛砖引玉,希望大家多多实践。写reg的软件也可以通过调用相关的API函来完成。只要有明码的软件都可以通过这种方法制作出loader注册机让程序成为注册机。

原点 发表于 2008-8-26 15:59

有难度??看不懂,还是谢谢分享

小糊涂虫 发表于 2008-8-26 18:44

看不懂,出个视频教程就好了..........

Hmily 发表于 2008-8-27 11:21

这种方法很不错,比内存注册鸡还省事~

5588 发表于 2008-8-27 12:44

看不懂,还要学习啊!

qq513701092 发表于 2008-8-27 12:48


方法不错
收藏下~~~~~~

pxf 发表于 2008-8-27 18:24

很不错谢谢分享不过如果爆破的话做补丁就不那么容易了呵呵!!!额给做了个内存补丁,软件会报错

sageyoung 发表于 2008-9-2 03:32

只有类似注册流程的软件才行得通!

原点 发表于 2008-9-2 14:51

弄个教程就更好了啊

285786141 发表于 2008-9-2 15:54

这好象是哪个教程里看过,做成教程吧,我们菜鸟看不懂
页: [1] 2 3 4 5 6 7
查看完整版本: 修改程序让软件自注册