AS3 Sorcerer 3.0

AS3 Sorcerer是一款flash action Script的商业反编译软件。 www.as3sorcerer.com

软件为Delphi编写,加了未知壳,使用PEID 0.94无法正确查出,使用核心扫描发现是
Delphi编写,这个软件有一个特点修改一个字节就报错。由于时间原因没有具体跟相关代码。

破解方法使用LPK.dll动态修改as3.exe内存达到破解目前,在Windows Xp下比较完美,
在Windows 7下已经无法通过LPK.dll进行DLL hijack,可以通过DLL注入达到同样的目的。

难点有几个,OD加载报错,attach 也报错。使用海风月影的StrongOD可以正常attach。
OD 1.1目前最大的问题是插件冲突严重,安装了OllyAdv后,无法成功加载as3.exe.
遇上强壳时可以使用phantom的protect DRx,可以解决一下问题,总之要尽量避免冲突。
接下来的难点就是如何找到破解的关键点,进行内存patch。

使用OD查找字符串参考Unicode,搜索trial

1
2
3
4
5
006974C2    E8 65ABFDFF     call    0067202C
006974C7 84C0 test al, al
006974C9 75 1C jnz short 006974E7
006974CB B9 E4756900 mov ecx, 006975E4 ; e
006974D0 BA 50766900 mov edx, 00697650 ;Sorry!

这里有个坑,在OD中看到的代码有可能不是最终运行的代码,只有真正在OD里断下,进
入程序领空后,看到的代码才是解密后的真正代码。这里在这里浪费了很多时间。换句
话说就是要先保证能调试起来,能调试能下断点基本就成功了一半。

上面的代码是非常经典的关键代码,主要处理了 0067202C让它返回1就OK了。F7跟进

1
2
3
4
5
6
7
8
0067202C  - E9 EE9D1900     jmp     0080BE1F
00672031 CC int3
00672032 CC int3
00672033 CC int3
00672034 CC int3
00672035 CC int3
00672036 CC int3
00672037 90 nop

进入就去一个jmp,后面的大段跳转非常多,跟踪困难。好在有很多int3,可以自己
写一段汇编代码解决。

1
2
3
4
5
6
7
8
0067202C    33C0            xor     eax, eax
0067202E 83C0 01 add eax, 0x1
00672031 90 nop
00672032 90 nop
00672033 90 nop
00672034 90 nop
00672035 90 nop
00672036 C3 retn

核心代码

1
2
3
4
5
6
7
8
9
10
HANDLE handle = GetModuleHandle(NULL);

int RVA = 0x67202C - 0x400000;
int VA = int(handle) + RVA;

unsigned char p405213[11] = {
0x33, 0xC0, 0x83, 0xC0, 0x01, 0x90, 0x90, 0x90, 0x90, 0x90, 0xC3
};
VirtualProtectEx(hProcess, (LPVOID)VA, 11, PAGE_EXECUTE_READWRITE, &Oldpp);
WriteProcessMemory(hProcess, (LPVOID)VA, p405213, 11, NULL);

GetModuleHandle用于动态获取进程加载基址。

LPK.dll

Windows 7 不能默认已经不能使用LPK.dll,必须导入下面注册表键值,重启电脑
才能使用。

1
2
3
4
5
Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]
"ExcludeFromKnownDlls"=hex(7):6c,00,70,00,6b,00,2e,00,64,00,6c,00,6c,00,00,00,\
00,00