首页
社区
课程
招聘
[原创]FlexLM 11.16版的特点和Patch方法
发表于: 2020-8-13 16:57 18479

[原创]FlexLM 11.16版的特点和Patch方法

2020-8-13 16:57
18479

分析了几个11.16版的守护神,发现它比11.15及以前的版本做了部分改变 (当然直接通过找SIGN%s=的Patch方法仍然有效):


1、  函数l_pubkey_verify一定是位于.textidx段中。在x86版中,IDA分析得到的Arguments一定是24Locals会有变化,Lengths也在三个数字范围内。X64版中, IDA分析的Arguments一定是44Locals会有变化,Lengths也在三个数字范围内。




2、  分析发现11.16版本发现该函数的流程图与11.15及之前版本不一样,增加了某些判断。11.15及之前版本该函数是 .textidx段中Lengths是最大的,容易识别,但11.16.版本较少的样本分析发现无此规律。


3、  11.16版本函数l_pubkey_verify的流程图按照1的提示在.textidx段里查看,函数流程图如下图的准是它。(一共个没几个,很容易识别),找到后Patch最后一个call。另外需要强调的一点是,凡调用函数l_pubkey_verify的那个函数,直接通过F5就可以找到(过滤出)Pubkey在守护神文件中的RVA地址。



4、  11.16版本找不到“case 46”,可以找case 49,第一个就是:


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-8-13 17:17 被yangmyron编辑 ,原因: 改
收藏
免费 6
支持
分享
最新回复 (21)
雪    币: 4869
活跃值: (2300)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
收藏,谢谢分享。
2020-8-13 21:21
0
雪    币: 1251
活跃值: (4655)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢分享     
2020-8-14 09:40
0
雪    币: 13502
活跃值: (6188)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

图片没一张看的清的,不知道你们的是不是
2020-8-14 10:16
0
雪    币: 7127
活跃值: (7810)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
xie风腾 [em_5] 图片没一张看的清的,不知道你们的是不是
哈哈,不能怪我,原本是清晰的。不过图片不重要,文字是清晰的
2020-8-14 10:47
0
雪    币: 13502
活跃值: (6188)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6

楼主收弟子不,有偿学
2020-8-14 10:51
0
雪    币: 7127
活跃值: (7810)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
xie风腾 [em_41] 楼主收弟子不,有偿学
我连C++都不会,你要跟我学啥?谭浩强的BASIC你要学的话我也忘光了;)
2020-8-14 11:08
0
雪    币: 98
活跃值: (1704)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
高手,谢谢分享!能否把cvd的编译的详细过程写个教程?谢谢
2020-8-14 15:51
0
雪    币: 7127
活跃值: (7810)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
acekillerf 高手,谢谢分享[em_63][em_63]!能否把cvd的编译的详细过程写个教程?谢谢[em_1]
CVD的编译没有难度呀,makefile文件需要添加的链接库样本也发论坛里了。
2020-8-14 17:30
0
雪    币: 42
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
大佬牛逼,谢谢分享
2020-8-19 02:08
0
雪    币: 7127
活跃值: (7810)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11

第二个要Patch的函数实际函数名为:l_serv_msg,有更容易的方法来定位它,俗称“找死”法(cmp     eax, 0DEADh)。其后面没有附近没有demo的就是


2020-8-19 15:32
1
雪    币: 176
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
先收藏一下,谢谢楼主
2020-8-24 14:06
0
雪    币: 226
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13

请教贴主,找到根据case 49找到对应的函数:

然后应该如何修改?

2020-8-25 21:06
0
雪    币: 592
活跃值: (318)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
其实没这么复杂,以下方法,无论是X86,X64,还是windows,linux都适用。
l_pubkey_verify直接引用只在l_n36_buf中,即将其指针存到pubkeyinfo中,有类似下面的代码
pubkeyinfo[0].pubkey_fptr=l_pubkey_verify;
找到l_n36_buf即可以找到l_pubkey_verify.
l_n36_buf很好找,其特点1是函数长度超过0x3000,估计没有几个;
特点2是有大量直接赋值的代码(其实是垃圾代码,flexlm混淆用的).
2020-8-29 20:57
0
雪    币: 7127
活跃值: (7810)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
15
aprice 其实没这么复杂,以下方法,无论是X86,X64,还是windows,linux都适用。 l_pubkey_verify直接引用只在l_n36_buf中,即将其指针存到pubkeyinfo中,有类似下 ...

谢谢提供思路!我一般都是反过来,用l_pubkey_verify来定位l_n36_buf。因为有时l_n36_buf不能被IDA正确识别成一个函数,导致其长度变短(可能小于3000),导致无法通过反编译F5找到文件中Pubkey的位置。另外对于CVD模式的守护神,会有很多个不同的l_n36_buf,无法分辨哪一个是主l_n36_buf。某坛友就提供了一个例子(见 https://bbs.pediy.com/thread-248200.htm 的zwpcloudy坛友回复 )

2020-9-1 11:35
0
雪    币: 8902
活跃值: (4238)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
yangmyron 谢谢提供思路!我一般都是反过来,用l_pubkey_verify来定位l_n36_buf。因为有时l_n36_buf不能被IDA正确识别成一个函数,导致其长度变短(可能小于3000),导致无法通过反编 ...
已公匙替换后还需要对_libFNP.dll进行处理吗??
2020-9-1 16:50
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17

hello im trying patch 11.15 i followed the steps as much i could and i have find the 46 but there is not call on on 45 or 46 on the nlm im trying patch.(in case i find it on "daemon .exe" its the right or need search on lmtools.exe for that? thanks you e4bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3M7X3&6@1i4K6u0W2M7$3y4Q4x3V1j5I4K9U0p5&6M7i4j5#2

最后于 2021-8-4 21:55 被wx_WhiteDeath编辑 ,原因:
2021-8-4 21:52
0
雪    币: 2749
活跃值: (2464)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
很有用,感谢大神
2023-11-15 14:15
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
楼主接活吗?
2024-2-27 17:03
0
雪    币: 307
活跃值: (625)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
摊手,没看懂。怎么找的pubkey_verify
2024-11-18 12:00
0
游客
登录 | 注册 方可回帖
返回