aspose.cell 23.10 有过期注册码或无注册码绕过,去暗桩
1.用DNSPY打开dll2.在aspose里找到类 \u0006\u0018 然后查找;; 到虚拟机的核心位置
3.点击跳转值的那个变量,到定义的地方,他下面的是他的返回值存储的变量.
这4个变量是需要观察的关键点.
4.可以把这几个关键变量改个名字方便看 ,分别是totalLength,jumpto,currentPos,returnValue;
5.在while的地方下断,按F5运行, 会看见totalLength发生改变
6.如果你有过期的注册码, 当totallength==0x4db时,是在检验注册码
如果你点击this.\u000E();到方法的最后处下断,然后一直F5,你会看见currentpos和returnvalue一直在改变
当currentpos==0x39c时,他开始取注册信息中的过期时间
当currentpos==0x431时,他开始年月日逐一比较
当currentpos==0x3DF时,如果过期他会跳0x46b, 没过期跳0x484
于是关键就是在这个位置让他跳484
有过期码的时候,就这样了.
7.当totallength==0x18C时,是在判断是否正版
当currentpos==0x17C时,他开始判断正版.是正版jumpto==null,不是的时候跳0x184
于是关键就是这里不能让它跳.
没注册码时就这样了
8.暗桩
当totallength==0xE5时说明进入到暗桩判断.
不一定每次都进,随机进入的
当currentpos==0xd9时,观察returnValue,如果是1,则暗桩生效,生成的文件错误.,0则不生效
于是关键就是在此处把 retuelValue的1改成0
9,更改后这段代码是这样的
10,更改后的IL 参考
0 0000 ldarg.0
1 0001 ldfld uint32 '\u0006\u0018'::totalLength
2 0006 stloc.0
3 0007 nop
4 0008 br 58 (00A0) ldarg.0
5 000D nop
6 000E ldloc.0
7 000F ldc.i4 0x18C
8 0014 bne.un.s 18 (0032) ldloc.0
9 0016 ldarg.0
10 0017 ldfld uint32 '\u0006\u0018'::currentPos
11 001C ldc.i4 0x17C
12 0021 bne.un.s 18 (0032) ldloc.0
13 0023 ldarg.0
14 0024 ldflda valuetype System.Nullable`1<uint32> '\u0006\u0018'::jumpTo
15 0029 initobj valuetype System.Nullable`1<uint32>
16 002F br.s 34 (0058) ldarg.0
17 0031 nop
18 0032 ldloc.0
19 0033 ldc.i4 0xE5
20 0038 bne.un.s 34 (0058) ldarg.0
21 003A ldarg.0
22 003B ldfld uint32 '\u0006\u0018'::currentPos
23 0040 ldc.i4 0xD9
24 0045 bne.un.s 34 (0058) ldarg.0
25 0047 nop
26 0048 ldc.i4.0
27 0049 newobj instance void '\b\u0010'::.ctor(int32)
28 004E stloc.2
29 004F ldarg.0
30 0050 ldloc.2
31 0051 stfld class '\u000e\u0003' '\u0006\u0018'::returnValue
32 0056 nop
33 0057 nop
34 0058 ldarg.0
35 0059 ldflda valuetype System.Nullable`1<uint32> '\u0006\u0018'::jumpTo
36 005E call instance bool valuetype System.Nullable`1<uint32>::get_HasValue()
37 0063 brfalse.s 52 (0091) ldarg.0
38 0065 ldarg.0
39 0066 ldarg.0
40 0067 ldflda valuetype System.Nullable`1<uint32> '\u0006\u0018'::jumpTo
41 006C call instance !0 valuetype System.Nullable`1<uint32>::get_Value()
42 0071 stfld uint32 '\u0006\u0018'::currentPos
43 0076 ldarg.0
44 0077 ldarg.0
45 0078 ldfld uint32 '\u0006\u0018'::currentPos
46 007D conv.u8
47 007E call instance void '\u0006\u0018'::'\u0002'(int64)
48 0083 ldarg.0
49 0084 ldflda valuetype System.Nullable`1<uint32> '\u0006\u0018'::jumpTo
50 0089 initobj valuetype System.Nullable`1<uint32>
51 008F br.s 56 (009A) ldarg.0
52 0091 ldarg.0
53 0092 ldfld uint32 '\u0006\u0018'::currentPos
54 0097 ldloc.0
55 0098 bge.un.s 61 (00AB) leave.s 74 (00CA)
56 009A ldarg.0
57 009B call instance void '\u0006\u0018'::'\u000e'()
58 00A0 ldarg.0
59 00A1 ldfld bool '\u0006\u0018'::'\u0002\u000f'
60 00A6 brfalse 5 (000D) nop
61 00AB leave.s 74 (00CA) ret
62 00AD stloc.1
63 00AE ldarg.0
64 00AF ldloc.1
65 00B0 ldc.i4.0
66 00B1 call instance void '\u0006\u0018'::'\u0002'(object, uint32)
67 00B6 ldarg.1
68 00B7 brtrue.s 73 (00C5) leave 3 (0007)
69 00B9 ldarg.0
70 00BA ldc.i4.1
71 00BB call instance void '\u0006\u0018'::'\b\u0002'(bool)
72 00C0 leave 74 (00CA) ret
73 00C5 leave 3 (0007) nop
74 00CA ret
夜泉 发表于 2023-11-4 12:19
可否也把 aspose.word分析下?
有过期注册码 totallength==0x14b currentPos=0x72不要跳
无注册码 totallength==0x18e ,currentPos=0x4 直接跳到0x142 这是个EAZ的虚拟化壳? 有点深奥,谢谢分享。 能讲下如何定位的就更好了{:1_918:} 谢谢分享,有用 谢谢分享。! 可否也把 aspose.word分析下? 能不能讲通俗一下呢? 能不能讲通俗一下呢?