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

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

010editor 保持试用

软件介绍

010Editor是一款快速且强大的十六进制编辑器。用来编辑二进制文件。有一个友好易于使用的界面,无限次的
undo和redo操作。另外还可以打印十六进制的字节或者以书签的方式标出某些重要的字节。
支持二进制模板(binary template)系统。

保持试用

国外软件很多时候相当厚道了,试用基本是全功能,轻微延时和不能自动更新二进制模板,就日常使用来说基本
是完全够用了。

关键文件为 ~/.config/SweetScape/010 Editor.ini,无法使用的时侯可以把这个文件清空,将恢复30天试用状态,
或者简单粗暴的将文件设置为只读。

1
chmod 444 "010 Editor.ini"

用IDA逆向的时侯没有发现这个文件比较奇怪。这个文件是 是使用strace命令发现的,strace命令支持 -e 的过
滤参数将有效减少输出,一般来说看strace日志文件可以从最后往前看。

1
strace -e trace=file ./010editor

从代码上看有使用网络验证需要在hosts文件中屏敝两个网站, 可以减少一些不必要的麻烦。

1
2
127.0.0.1 www.sweetscape.com
127.0.0.1 www.010editor.com

我现在已经是注册用户了,在很长的一段时间内,这方法是管用的,做个备忘。

scz 补充:

之前github上的那个开源keygen还能用,或者就用

1
2
user    user
pass 3470D4AC7CEFACD9297A

只是hosts更改可能不够,windows上用wf.msc阻止010 Editor联网,Linux好像没有简单办法阻止特定进程联网,
只能变相利用uid、gid达成目的。

How to block internet access to certain programs on Linux
https://serverfault.com/questions/550276/how-to-block-internet-access-to-certain-programs-on-linux

https://unix.stackexchange.com/questions/104830/block-specific-application-with-iptables

破解软件时间限制的程序

1
2
3
4
5
6
7
8
9
10
11
Dim daytime
daytime = formatdatetime(now(), 2)
wscript.echo "Now is: " & daytime
wscript.echo "Change system data to 2010/12/18..."
Set os =WScript.CreateObject("WScript.Shell")
os.run "cmd /c date 2010/12/18", 0, True
wscript.sleep 3000
wscript.echo "Call some.exe"
os.run ".\some.exe", 1, True
wscript.echo "Restore system data to " & daytime
os.run "cmd /c date " & daytime, 0, True