首页
社区
课程
招聘
[旧帖] [原创]脚本带KEY脱asprotect SKE2.23加壳的DLL文件 0.00雪花
发表于: 2008-4-17 13:26 3265

[旧帖] [原创]脚本带KEY脱asprotect SKE2.23加壳的DLL文件 0.00雪花

2008-4-17 13:26
3265
所有问题都已经得到解决。。开一贴将过程记录下来吧
多谢各位大侠尤其是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宣告结束
收工。。。

第一次写破文。。很多地方解释不清楚。。望见谅。。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//