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加载报错,attack也报错。使用海风月影的StrongOD可以正常attach。
OD 1.1目前最大的问题是插件冲突严重,安装了OllyAdv后,无法成功加载as3.exe.
遇上强壳时可以使用phantom的protect DRx,可以解决一下问题,总之要尽量避免冲突。
接下来的难点就是如何找到破解的关键点,进行内存patch。
使用OD查找字符串参考Unicode,搜索trial
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跟进
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,可以自己
写一段汇编代码解决。
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
核心代码
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,必须导入下面注册表键值,重启电脑
才能使用。
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