ciker_li 发表于 2020-12-28 23:32

记一次老旧32位软件在win10 64位系统中注册表读取失败问题的解决

双十一把老机子升级了一下,系统也换成win10 64位系统,今天要恢复一张U盘的内容,拿出以前用的挺顺手的易我***恢复软件,竟然提示未注册。
在52上搜索了一下,还好有大神的帖子,https://www.52pojie.cn/thread-126396-1-1.html
照着调试了一遍,顺利找到注册码,填写后要求重启验证,竟然提示还是未注册!!!
重新调试一遍,在注册码的下面,看到:

00475D8C | 55                     | push ebp                                                |
00475D8D | 8BEC                     | mov ebp,esp                                             |
00475D8F | 83EC 08                  | sub esp,8                                                 |
00475D92 | C745 F8 00000000         | mov dword ptr ss:,0                              |
00475D99 | 837D 08 00               | cmp dword ptr ss:,0                              |
00475D9D | 74 06                  | je drw.475DA5                                             |
00475D9F | 837D 10 00               | cmp dword ptr ss:,0                               |
00475DA3 | 75 07                  | jne drw.475DAC                                          |
00475DA5 | 33C0                     | xor eax,eax                                             |
00475DA7 | E9 BE000000            | jmp drw.475E6A                                          |
00475DAC | 8D45 F8                  | lea eax,dword ptr ss:                              |
00475DAF | 50                     | push eax                                                |
00475DB0 | 68 142D4A00            | push drw.4A2D14                                           | 4A2D14:"SOFTWARE\\成都易我科技\\易我数据恢复向导V2.1.0\\2.10.000"
00475DB5 | 68 01000080            | push 80000002                                          |
00475DBA | FF15 10304800            | call dword ptr ds:[<&RegOpenKeyA>]                        |
00475DC0 | 85C0                     | test eax,eax                                              |
00475DC2 | 74 07                  | je drw.475DCB                                             |
00475DC4 | 33C0                     | xor eax,eax                                             |
00475DC6 | E9 9F000000            | jmp drw.475E6A                                          |
00475DCB | 8B4D 0C                  | mov ecx,dword ptr ss:                              |
00475DCE | 51                     | push ecx                                                |
00475DCF | 6A 00                  | push 0                                                    |
00475DD1 | 8B55 08                  | mov edx,dword ptr ss:                              |
00475DD4 | 52                     | push edx                                                |
00475DD5 | E8 F6620000            | call <JMP.&memset>                                        |
00475DDA | 83C4 0C                  | add esp,C                                                 |
00475DDD | 8B45 14                  | mov eax,dword ptr ss:                           |
00475DE0 | 50                     | push eax                                                |
00475DE1 | 6A 00                  | push 0                                                    |
00475DE3 | 8B4D 10                  | mov ecx,dword ptr ss:                           |
00475DE6 | 51                     | push ecx                                                |
00475DE7 | E8 E4620000            | call <JMP.&memset>                                        |
00475DEC | 83C4 0C                  | add esp,C                                                 |
00475DEF | C745 FC 01000000         | mov dword ptr ss:,1                              |
00475DF6 | 8D55 0C                  | lea edx,dword ptr ss:                              |
00475DF9 | 52                     | push edx                                                |
00475DFA | 8B45 08                  | mov eax,dword ptr ss:                              |
00475DFD | 50                     | push eax                                                |
00475DFE | 8D4D FC                  | lea ecx,dword ptr ss:                              |
00475E01 | 51                     | push ecx                                                |
00475E02 | 6A 00                  | push 0                                                    |
00475E04 | 68 4C2D4A00            | push drw.4A2D4C                                           | 4A2D4C:"UserName"
00475E09 | 8B55 F8                  | mov edx,dword ptr ss:                              |
00475E0C | 52                     | push edx                                                |
00475E0D | FF15 04304800            | call dword ptr ds:[<&RegQueryValueExA>]                   |
00475E13 | 85C0                     | test eax,eax                                              |
00475E15 | 74 0E                  | je drw.475E25                                             |
00475E17 | 8B45 F8                  | mov eax,dword ptr ss:                              |
00475E1A | 50                     | push eax                                                |
00475E1B | FF15 0C304800            | call dword ptr ds:[<&RegCloseKey>]                        |
00475E21 | 33C0                     | xor eax,eax                                             |
00475E23 | EB 45                  | jmp drw.475E6A                                          |
00475E25 | C745 FC 01000000         | mov dword ptr ss:,1                              |
00475E2C | 8D4D 14                  | lea ecx,dword ptr ss:                           |
00475E2F | 51                     | push ecx                                                |
00475E30 | 8B55 10                  | mov edx,dword ptr ss:                           |
00475E33 | 52                     | push edx                                                |
00475E34 | 8D45 FC                  | lea eax,dword ptr ss:                              |
00475E37 | 50                     | push eax                                                |
00475E38 | 6A 00                  | push 0                                                    |
00475E3A | 68 582D4A00            | push drw.4A2D58                                           | 4A2D58:"RegisterCode"
00475E3F | 8B4D F8                  | mov ecx,dword ptr ss:                              |
00475E42 | 51                     | push ecx                                                |
00475E43 | FF15 04304800            | call dword ptr ds:[<&RegQueryValueExA>]                   |
00475E49 | 85C0                     | test eax,eax                                              |
00475E4B | 74 0E                  | je drw.475E5B                                             |
00475E4D | 8B55 F8                  | mov edx,dword ptr ss:                              |
00475E50 | 52                     | push edx                                                |
00475E51 | FF15 0C304800            | call dword ptr ds:[<&RegCloseKey>]                        |
00475E57 | 33C0                     | xor eax,eax                                             |
00475E59 | EB 0F                  | jmp drw.475E6A                                          |
00475E5B | 8B45 F8                  | mov eax,dword ptr ss:                              |
00475E5E | 50                     | push eax                                                |
00475E5F | FF15 0C304800            | call dword ptr ds:[<&RegCloseKey>]                        |
00475E65 | F7D8                     | neg eax                                                   |
00475E67 | 1BC0                     | sbb eax,eax                                             |
00475E69 | 40                     | inc eax                                                   |
00475E6A | 8BE5                     | mov esp,ebp                                             |
00475E6C | 5D                     | pop ebp                                                   |
00475E6D | C2 1000                  | ret 10                                                    |

RegOpenKeyA,和SOFTWARE\\成都易我科技\\易我数据恢复向导V2.1.0\\2.10.000",4A2D4C:"UserName",4A2D58:"RegisterCode"
这说明程序是把注册码和用户名写到注册表了
于是在00475DBA下断点,再次运行的时候,发现RegOpenKeyA返回空,没有读取成功,这是什么情况?
查看RegOpenKeyA的参数说明,RegOpenKeyA(ByVal hKey As Long, ByVal lpszSubKey As String, phkResult As Long)
00475DAF | 50                     | push eax                                                |
00475DB0 | 68 142D4A00            | push drw.4A2D14                                           | 4A2D14:"SOFTWARE\\成都易我科技\\易我数据恢复向导V2.1.0\\2.10.000"
00475DB5 | 68 01000080            | push 80000002      
eax接受返回结果,第二个字符串是注册表项,80000002 是hKey
Key hKey(Key Handle)

HKEY_CLASSES_ROOT &H80000000

HKEY_CURRENT_USER &H80000001

HKEY_LOCAL_MACHINE &H80000002

HKEY_USERS &H80000003

HKEY_CURRENT_CONFIG &H80000005

HKEY_DYN_DATA &H80000006
打开注册表编辑器,在HKEY_LOCAL_MACHINE\SOFTWARE下真的没有“成都易我科技”项!奇怪了
于是先自己按要求把注册表写好
在HKEY_LOCAL_MACHINE\SOFTWARE\成都易我科技\易我数据恢复向导V2.1.0\2.10.000项里添加两个字符串变量"UserName","RegisterCode",写好自己的数据
再调试,竟然还是返回空!
继续百度,发现在win10 64位系统中,只有HKEY_CURRENT_USER 子项不受限制注册表可随意读写
原来如此!
赶紧把程序中调用RegOpenKeyA函数的参数80000002都改成80000001,也就2处,一处写,一处读取
填写好注册信息后完美注册!

换64位后,好多东西还是不熟悉,还得学习啊


ellvincent 发表于 2020-12-29 21:08

64位系统下32位的程序读写注册表的位置在HKEY_LOCAL_MACHINE\Software\Wow6432Node下

fsmode 发表于 2020-12-29 08:54

羡慕你们程序员,有个软件32位win7时用的,到了64位怎么也注册不上了,也不会自己算注册码,怎么也用不了,学习下思路试试。

PrincessSnow 发表于 2020-12-29 00:02

大佬牛逼

AsuraSong 发表于 2020-12-29 00:05

谢谢楼主分享,特别详细,值得学习

没头脑和温柚 发表于 2020-12-29 00:34

原来如此

Azad 发表于 2020-12-29 00:40

感谢分享,学习了

duduhao 发表于 2020-12-29 02:15

{:1_921:}点赞一个

kkklj 发表于 2020-12-29 03:14

win10把用户可操作权限下调了很多吧

mllaopang 发表于 2020-12-29 07:43

谢谢楼主分享,特别详细,值得学习

O678O 发表于 2020-12-29 08:11

特别详细,值得学习

hh716 发表于 2020-12-29 08:13

值得学习,大佬就是大佬
页: [1] 2 3 4 5
查看完整版本: 记一次老旧32位软件在win10 64位系统中注册表读取失败问题的解决