-
-
[原创]谈[注册机]的失效及解决方案
-
发表于:
2007-7-16 00:09
8378
-
【文章标题】: 谈【注册机】的失效及解决方案
【文章作者】: 啊CR/FTSTT
【作者主页】: Viper.68ab.com
【软件名称】: 某keygen
【下载地址】: 自己搜索下载
【作者声明】: 偶是小鸟一只,希望大家照顾^_^
--------------------------------------------------------------------------------
【详细过程】
大家都知道注册机会失效,本文就此引出。
算法大牛、分析高手们就不要看了/lianh
注册机为什么会失效,原因有三点:
1,算法改变
2,常数改变
3,针对性的ban
我们不是 注册机 的作者,该怎么办呢?
如果是 算法改变 的话,失效的注册机就没什么用处了,如果有能力去修改大量的汇编代码不如去重写一个新的。
如果是 常数改变[通常是版本号] ,这个我们就有一定的发挥了,我们可以去修改常数,使其生成正确的注册码【例一】。
如果是 针对性的ban ,又分两种情况,
1注册机作者在注册码中保存了签名
2注册机作者使用了多组有效密匙中的一个,作者把这组密匙列入了黑名单
其中,对于保存签名被ban的情况,我们可以尝试修改这个签名,使目标程序无法识别注册机就可以注册成功【例二】。
另一种情况,如果我们有能力找到另一组密匙,我们就可以简单的替换密匙,是注册机有效。难度不小【例三】。
上面所说的都有例外,无法一一列举。
下面是三个例子。
【例一】
目标:
HWiNFO32 v1.72 Incl KeyfileMaker
失效原因:版本改变
解决方法:替换常数
下载了最新的1.75,发现没有注册的地方,仔细一看,原来是Keyfile 汗~!
复制KeyfileMaker 但程序目录注册后发现程序提示版本不正确,使用OD跟踪一下,看看是怎么判断版本的。
程序加未知壳,不管它,直接载入。
注册机生成
HWiNFO32.KEI 和HWiNFO32.KEY 两个文件
在OD中下断点 Bp CreateFileA
第一次断下就是检查HWiNFO32.KEY,Ctrl + F9 返回,一路F8,读取HWiNFO32.KEY
然后读取HWiNFO32.KEI 然后继续F8
直到
00423BA4 E8 80A10200 CALL HWiNFO32.0044DD29 黑名单
00423BA9 85C0 TEST EAX,EAX
00423BAB 74 11 JE SHORT HWiNFO32.00423BBE
00423BAD 6A 10 PUSH 10
这里改为 JMP,不知为什么不跳。
继续
00423BE2 56 PUSH ESI
00423BE3 E8 F63F0400 CALL HWiNFO32.00467BDE ; JMP 到 VERSION.GetFileVersionInfoA
00423BE8 85C0 TEST EAX,EAX
00423BEA 74 44 JE SHORT HWiNFO32.00423C30
00423BEC 8D45 E0 LEA EAX,DWORD PTR SS:[EBP-20]
00423BEF 50 PUSH EAX
00423BF0 8D45 D0 LEA EAX,DWORD PTR SS:[EBP-30]
00423BF3 50 PUSH EAX
00423BF4 68 BCD54C00 PUSH HWiNFO32.004CD5BC ; ASCII "\StringFileInfo\040904B0\FileVersion"
00423BF9 57 PUSH EDI
00423BFA E8 D93F0400 CALL HWiNFO32.00467BD8 ; JMP 到 VERSION.VerQueryValueA
00423BFF 85C0 TEST EAX,EAX
00423C01 74 2D JE SHORT HWiNFO32.00423C30
00423C03 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C]
获取版本号
00423C0B 8D45 D4 LEA EAX,DWORD PTR SS:[EBP-2C]
00423C0E 50 PUSH EAX
00423C0F 68 B0D54C00 PUSH HWiNFO32.004CD5B0 ; ASCII "%d,%d,%d"
00423C14 FF75 D0 PUSH DWORD PTR SS:[EBP-30]
版本号的 去 格式化。
00423C4F 8B0D 749A4F00 MOV ECX,DWORD PTR DS:[4F9A74]
00423C55 8BF8 MOV EDI,EAX
00423C57 E8 13A10200 CALL HWiNFO32.0044DD6F
00423C5C 3BFB CMP EDI,EBX
00423C5E 74 04 JE SHORT HWiNFO32.00423C64
00423C60 3BFE CMP EDI,ESI
00423C62 7F 08 JG SHORT HWiNFO32.00423C6C
00423C64 3BC3 CMP EAX,EBX
00423C66 74 16 JE SHORT HWiNFO32.00423C7E
00423C68 3BC6 CMP EAX,ESI
00423C6A 7D 12 JGE SHORT HWiNFO32.00423C7E
这里比较当前的版本号和注册文件中的版本号,要求注册文件的版本号范围包含当前版本。
重复前面的跟踪,发现注册文件版本从HWiNFO32.KEI中读出,是一个有效范围 1.7.2-1.7.2,这就是为什么注册文件在1.7.5中失效了。
关闭OD,修改HWiNFO32.KEI中1.7.2-1.7.2为0.0.0-9.9.9试一下,运行程序,显示为注册成功。
修改注册机。
FSG2.0 找个工具轻松脱之,106进制工具尝试搜索1.7.2-1.7.2,找到了替换为0.0.0-9.9.9,这样生成的注册文件就是有效的了。假如搜索不到,就要跟踪判断了。
///注册机中范围设为1.7.2-1.7.2,大概是注册机作者的策略,使软件作者在测试新版,注册机无效,免得作者更换算法,而升级注册机时更新常数即可。我是这样想的。
///此方法修改winhex注册机时失败了,winhex还要另外修改其他部分对抗程序的检测。
【例二】
目标:
WinZip.Professional.v10.0.6685.Kg(注册机在11.0中失效,本文不讨论此问题)
失效原因:没有失效
解决方法:仅修改签名
注册机有一个选项Signed by ZWT,很有意思,选中后生成的注册码
就是这样的
TT8K2-0AU98-R8824-2811A-G56XJ-ZWTKG
已-ZWTKG 结尾,就是-ZWT的注册机生成的意思,很有趣,尝试直接修改注册码中的标志,结果注册失败。
注册机加了壳
ASProtect 2.1x SKE -> Alexey Solodovnikov
你可以选择脱掉,但我没脱,直解OD跟踪,
载入OD后F9运行, Alt + M
二进制搜索 “ZWTKG” 不含引号。
找到
0045E21D 43 68 69 6E 61 00 00 01 26 DD AB 91 5F D1 CC 01 ZWTKG..&莴慱烟
替换为
0045E21D 43 68 69 6E 61 00 00 01 26 DD AB 91 5F D1 CC 01 China..&莴慱烟
在注册机中选中Signed by ZWT ,算个号码
China
FK2M8-X3JNM-2DNUU-1F7Y2-RP7P6-China
F52E0-U3NGP-N1W46-PV9L9-TZUMX-China
注册一下,不成功,如果要注册成功还要修改一些其他内容,本文只为说明说这种方法。
///不成功的案例,但很多时候是可以成功的
///其他内容是什么呢?不要问我,我也不知道:-)
【例三】
目标:
Flash2X Flash Hunter v1.2.0.100503's keygen ORiON
失效原因:密匙改变
解决方法:替换密匙
注册机和软件的版本号完全一致,却注册失败,这就是软件的所谓再版。
通常,我在遇到这情况是都是先跟一遍注册机的流程,这样再跟软件会节省不少时间。
注册机加壳
UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
UPX -d轻松脱去
载入OD,F9运行。
然后 右键 查找——所有参考文本字串,然后在每个命令上设置断点。(这样最方便)
点击任务栏的软件,把遇到的断点全部取消。
输入注册名,程序会自动算出注册码。
00401D0E |. BF C8CC4000 MOV EDI,Keygen-F.0040CCC8
这里停下,然后你可以F8,大致的看一下。你会发现注册机在调用40C0FC位置的一个字串表计算注册码,这就足够了,退出程序。
.0040C0FC ASCII "2jKc7FqMBy43IXstGJDPlaQVT6LWrAzS9Yd1vkUN0ORowxnfm5EZi8hCbHuepg"
用OD载入目标程序,不必跟踪,右键 查找——所有参考文本字串,慢慢上翻,
文本字串参考位于 Flash_Hu:CODE, 条目 4198
地址=00492EF4
反汇编=MOV EDX,Flash_Hu.004931A0
文本字串=ASCII "T1GECyYnpA6SPjxdmWVs2czoIUD8tOwJlKNXeBufrZH7Lgi0h3q4M59kbRvFQa"
文本字串参考位于 Flash_Hu:CODE, 条目 4202
地址=00492F66
反汇编=MOV EDX,Flash_Hu.004931F4
文本字串=ASCII "RegName"
00492EF4位置的字串和注册机中很像啊,下面还有字串RegName,替换一下试试。
用十六进制编辑器搜索注册机中的
2jKc7FqMBy43IXstGJDPlaQVT6LWrAzS9Yd1vkUN0ORowxnfm5EZi8hCbHuepg
替换为
程序中的
T1GECyYnpA6SPjxdmWVs2czoIUD8tOwJlKNXeBufrZH7Lgi0h3q4M59kbRvFQa
保存在运行注册机,算个注册码,打开目标程序,注册成功!
////这个例子比较特殊,也可以放到常数那类,由于程序是主观再版,索性发到密匙这类。
////此例说明某些情况下替换被ban的密匙是可以完成注册的。
--------------------------------------------------------------------------------
2007年07月15日 2:42:57
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)