-
-
[旧帖] [原创]脚本带KEY脱asprotect SKE2.23加壳的DLL文件 0.00雪花
-
发表于: 2008-4-17 13:26 3252
-
所有问题都已经得到解决。。开一贴将过程记录下来吧
多谢各位大侠尤其是VOLX的帮助。。
目标文件为 asprotect SKE2.23加密壳的DLL文件。。
原文件第一次使用需要输入key,激活后每次要读取注册表中的注册数据。而不用再次输入用户名和激活码
用volx的unpacker脱壳后。。Import Rec修复输入表。。。。
OD里面运行加壳软件,到达OEP后,运行修改过的VOLX的game脚本。。详情请见下贴
http://www.unpack.cn/viewthread.php?tid=24092&extra=page%3D1
将三段解码的数据拷贝到脱壳后的文件里。。
DLL文件在本机OD里运行良好。。。
在主程序下面功能不能实现。。。
OD载入主程序。。在调用该DLL文件输出函数的地方下断,F9运行。。
直到DLL文件输出函数位置断下 ,F7进入,经跟踪分析,发现加壳的DLL文件有校验。。
校验的基本思路是 :
1、读取Asprotect加密模式
2、读取本DLL文件PE头某偏移位置的N个字节。。
3、读取注册用户名和注册码
4、读取硬件ID
5、用户名和硬件ID参与运算。。与文件PE头的N个字节进行校验。
(OD对所调试的文件保护,读取本身调试中的文件会出错。。 所以运行到步骤2可以将这部分代码跳过去。 然后手动复制N个字节过来)
因为主程序功能与硬件ID有关。。所以我修改VOLX提供的函数参数。。将VOLX换成自己的注册名、1111222233334444换成激活码
12345678-1234换成本机器的硬件ID。并在主程序内存里搜索与硬件ID有关的二进制数据。。记下找到的地址,Ctrl+F2重新启动,F9运行。。在找到的地址下DW硬件写断点。。程序被断下。。数据窗口中观察数据变换。。当出现硬件ID的16进制数据时,即为主程序解算硬件ID的位置,将运算结果修改为本机的硬件ID。。
在本机器上面做好所有工作后,直接运行主程序(不在OD里面)。。测试各项功能。。。 一切功能正常。。 OK,保存文件!!
别高兴得太早了,,将程序换一台机器。。。程序竟然报错
OD载入之。。 发现在原来的IAT位置 数据不正确 。。
但补区段的输入表数据正确。。
patch it。。
计算好前后的IAT地址差值。。
将调用函数表的地址修改为补区段里的相应位置。。
OD载入脱壳后的DLL文件,找到空白区域。。写入下面的代码
008D1B00 BA 00108700 mov edx, 871000 *******************文件代码段基址
008D1B05 66:813A FF25 cmp word ptr [edx], 25FF
008D1B0A 75 21 jnz short 008D1B2D
008D1B0C 8B42 02 mov eax, dword ptr [edx+2]
008D1B0F 3D 54D78D00 cmp eax, 8DD754 *******************原IAT开始地址
008D1B14 72 17 jb short 008D1B2D
008D1B16 3D 68DD8D00 cmp eax, 8DDD68 *******************原IAT结束地址
008D1B1B 77 10 ja short 008D1B2D
008D1B1D 05 AC680600 add eax, 668AC *******************2个IAT之间的地址差值
008D1B22 2D 00004700 sub eax, 470000 *******************镜像基址870000-原始基址40000 (此处修改为重定位需要)
008D1B27 8942 02 mov dword ptr [edx+2], eax
008D1B2A 83C2 06 add edx, 6
008D1B2D 42 inc edx
008D1B2E 81FA 00108D00 cmp edx, 8D1000 *******************数据段基址
008D1B34 ^ 72 CF jb short 008D1B05 ; 008D1B05
008D1B36 - EB FE jmp short 008D1B36 ; 008D1B36
BA 00 10 87 00 66 81 3A FF 25 75 21 8B 42 02 3D 54 D7 8D 00 72 17 3D 68 DD 8D 00 77 10 05 AC 68
06 00 2D 00 00 47 00 89 42 02 83 C2 06 42 81 FA 00 10 8D 00 72 CF EB FE 00 00 00 00 00 00 00 00
设置EIP为008D1B00,F9运行。。停在008D1B36处。。
将patch代码清除,保存文件。
运行之。。。 一切OK
再找台微机测试。。 功能完全。。
至此,crack宣告结束
收工。。。
第一次写破文。。很多地方解释不清楚。。望见谅。。
多谢各位大侠尤其是VOLX的帮助。。
目标文件为 asprotect SKE2.23加密壳的DLL文件。。
原文件第一次使用需要输入key,激活后每次要读取注册表中的注册数据。而不用再次输入用户名和激活码
用volx的unpacker脱壳后。。Import Rec修复输入表。。。。
OD里面运行加壳软件,到达OEP后,运行修改过的VOLX的game脚本。。详情请见下贴
http://www.unpack.cn/viewthread.php?tid=24092&extra=page%3D1
将三段解码的数据拷贝到脱壳后的文件里。。
DLL文件在本机OD里运行良好。。。
在主程序下面功能不能实现。。。
OD载入主程序。。在调用该DLL文件输出函数的地方下断,F9运行。。
直到DLL文件输出函数位置断下 ,F7进入,经跟踪分析,发现加壳的DLL文件有校验。。
校验的基本思路是 :
1、读取Asprotect加密模式
2、读取本DLL文件PE头某偏移位置的N个字节。。
3、读取注册用户名和注册码
4、读取硬件ID
5、用户名和硬件ID参与运算。。与文件PE头的N个字节进行校验。
(OD对所调试的文件保护,读取本身调试中的文件会出错。。 所以运行到步骤2可以将这部分代码跳过去。 然后手动复制N个字节过来)
因为主程序功能与硬件ID有关。。所以我修改VOLX提供的函数参数。。将VOLX换成自己的注册名、1111222233334444换成激活码
12345678-1234换成本机器的硬件ID。并在主程序内存里搜索与硬件ID有关的二进制数据。。记下找到的地址,Ctrl+F2重新启动,F9运行。。在找到的地址下DW硬件写断点。。程序被断下。。数据窗口中观察数据变换。。当出现硬件ID的16进制数据时,即为主程序解算硬件ID的位置,将运算结果修改为本机的硬件ID。。
在本机器上面做好所有工作后,直接运行主程序(不在OD里面)。。测试各项功能。。。 一切功能正常。。 OK,保存文件!!
别高兴得太早了,,将程序换一台机器。。。程序竟然报错
OD载入之。。 发现在原来的IAT位置 数据不正确 。。
但补区段的输入表数据正确。。
patch it。。
计算好前后的IAT地址差值。。
将调用函数表的地址修改为补区段里的相应位置。。
OD载入脱壳后的DLL文件,找到空白区域。。写入下面的代码
008D1B00 BA 00108700 mov edx, 871000 *******************文件代码段基址
008D1B05 66:813A FF25 cmp word ptr [edx], 25FF
008D1B0A 75 21 jnz short 008D1B2D
008D1B0C 8B42 02 mov eax, dword ptr [edx+2]
008D1B0F 3D 54D78D00 cmp eax, 8DD754 *******************原IAT开始地址
008D1B14 72 17 jb short 008D1B2D
008D1B16 3D 68DD8D00 cmp eax, 8DDD68 *******************原IAT结束地址
008D1B1B 77 10 ja short 008D1B2D
008D1B1D 05 AC680600 add eax, 668AC *******************2个IAT之间的地址差值
008D1B22 2D 00004700 sub eax, 470000 *******************镜像基址870000-原始基址40000 (此处修改为重定位需要)
008D1B27 8942 02 mov dword ptr [edx+2], eax
008D1B2A 83C2 06 add edx, 6
008D1B2D 42 inc edx
008D1B2E 81FA 00108D00 cmp edx, 8D1000 *******************数据段基址
008D1B34 ^ 72 CF jb short 008D1B05 ; 008D1B05
008D1B36 - EB FE jmp short 008D1B36 ; 008D1B36
BA 00 10 87 00 66 81 3A FF 25 75 21 8B 42 02 3D 54 D7 8D 00 72 17 3D 68 DD 8D 00 77 10 05 AC 68
06 00 2D 00 00 47 00 89 42 02 83 C2 06 42 81 FA 00 10 8D 00 72 CF EB FE 00 00 00 00 00 00 00 00
设置EIP为008D1B00,F9运行。。停在008D1B36处。。
将patch代码清除,保存文件。
运行之。。。 一切OK
再找台微机测试。。 功能完全。。
至此,crack宣告结束
收工。。。
第一次写破文。。很多地方解释不清楚。。望见谅。。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
看原图
赞赏
雪币:
留言: