好友
阅读权限10
听众
最后登录1970-1-1
|
1.用DNSPY打开dll
2.在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 参考
[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.Runtime]System.Nullable`1<uint32> '\u0006\u0018'::jumpTo
15 0029 initobj valuetype [System.Runtime]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.Runtime]System.Nullable`1<uint32> '\u0006\u0018'::jumpTo
36 005E call instance bool valuetype [System.Runtime]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.Runtime]System.Nullable`1<uint32> '\u0006\u0018'::jumpTo
41 006C call instance !0 valuetype [System.Runtime]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.Runtime]System.Nullable`1<uint32> '\u0006\u0018'::jumpTo
50 0089 initobj valuetype [System.Runtime]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
|
免费评分
-
参与人数 6 | 吾爱币 +12 |
热心值 +6 |
收起
理由
|
笙若
| + 1 |
+ 1 |
谢谢@Thanks! |
Hmily
| + 7 |
+ 1 |
欢迎分析讨论交流,吾爱破解论坛有你更精彩! |
zlxay
| + 1 |
+ 1 |
谢谢@Thanks! |
夜泉
| + 1 |
+ 1 |
用心讨论,共获提升! |
xieyulei
| + 1 |
+ 1 |
用心讨论,共获提升! |
3yu3
| + 1 |
+ 1 |
用心讨论,共获提升! |
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|