首页
论坛
课程
招聘
[原创]FlexLM 11.16版的特点和Patch方法
2020-8-13 16:57 4000

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

2020-8-13 16:57
4000

分析了几个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,第一个就是:


5、  双击后在IDA-View窗口里以图形方式查看,顺着“case 49”的红线流程找到第二个call函数(x64版如果没有红线流程就直接跟着蓝线走),该函数就是要直接Patch的函数:


 如果你觉得这样找太费神,可以直接按F5后,在伪代码中找到“case 48”及“case 49”,这两个分支紧挨着。“case 48”里面的第一个return函数,也就是“case 49”里的第二个return函数,就是要直接Patch的函数。



该函数流程图的大概样子:

6、  双击该函数,到该函数的头部。直接从头部开始修改为”xor eax, eax”“retn“




[培训] 优秀毕业生寄语:恭喜id:一颗金柚子获得阿里offer《安卓高级研修班》火热招生!!!

最后于 2020-8-13 17:17 被yangmyron编辑 ,原因: 改
收藏
点赞4
打赏
分享
最新回复 (15)
雪    币: 1576
活跃值: 活跃值 (625)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lionnnn 活跃值 2020-8-13 21:21
2
0
收藏,谢谢分享。
雪    币: 107
活跃值: 活跃值 (388)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
考拉 活跃值 2020-8-14 09:40
3
0
谢谢分享     
雪    币: 6193
活跃值: 活跃值 (706)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xie风腾 活跃值 2020-8-14 10:16
4
0

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

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

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


雪    币: 176
活跃值: 活跃值 (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
LiamLi 活跃值 2020-8-24 14:06
12
0
先收藏一下,谢谢楼主
雪    币: 222
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_ray_724 活跃值 2020-8-25 21:06
13
0

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

然后应该如何修改?

雪    币: 322
活跃值: 活跃值 (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
aprice 活跃值 2020-8-29 20:57
14
0
其实没这么复杂,以下方法,无论是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混淆用的).
雪    币: 1294
活跃值: 活跃值 (1436)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yangmyron 活跃值 2020-9-1 11:35
15
0
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坛友回复 )

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