首页
社区
课程
招聘
[分享] 别人肩膀之上的渔术
2022-9-13 23:50 6186

[分享] 别人肩膀之上的渔术

2022-9-13 23:50
6186

此文也许能让道友随时用上官方发布的新版本,仅用于技术测试目的,渔非鱼。

 

要装UltraEdit,各种搜索,论坛也陆续提供有更新资源,但总感觉少了些什么。
经历过才晓得其中尬尴,本想重新造个轮子,来个包丁解牛,闲余时间有限,于是站在前人的肩膀上看看风景。

 

装了28.0.xx,奈何Patcher机里提示只有27.x,存在即合理,于是试着Patch,完美,能用。

 

Patcher会提示备份原来模块(就是它ProtectionPlusDLL.dll.BAK),还会修改防火墙设置(我以为是drivers\etc\hosts墙,不过没发现有动静,有知道动了哪里的道友可以跟下贴)

 

测试环境,IDA 7.6 Pro SP1 with bindiff7
测试对象,64位UltraEdit(32位同理,需要改下对应机器码)
(1)加载原模块ProtectionPlusDLL.dll.BAK,保存idb;
(2)加载已经Patch的模块ProtectionPlusDLL.dll,启动bindiff对比
结果如下图

 

图片描述

 

可见,其Pather了ProtectionPlushDLL.dll的七个导出函数,
其中一个返回1,另外六个返回0,于是有

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  mov al,1
  ret
  测试的64位,对应上述汇编字节码为:\xB0\x01\xC3
 
  mov al,0
  ret
  \xB0\x00\xC3
 测试的64位,对应上述汇编字节码为:\xB0\x01\xC3
 
1、返回1
IsActivatedSoftwareKey
  \xB0\x01\xC3
2、返回0
SetCheckStatusCallbackSoftwareKey
PromptAndActivateSoftwareKey
PromptAndDeactivateSoftwareKey
CheckStatusAsyncSoftwareKey
GetExpirationDateSoftwareKey
GetUsageStatus
  \xB0\x00\xC3

然后可以根据需要,下载新版,用一百种方式进行修改,如pefile方式,
按理,可以推广到任意系统、任意版本、任意系列产品,未测试,
道友们若测试通过其他系列产品,不妨告知一声

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#for python3.x with pefile install
import pefile,os,time
def patch_ProtectionPlusDLL(ProtectionPlusDLL_path):
 
    if os.path.exists(ProtectionPlusDLL_path) and os.path.isdir(ProtectionPlusDLL_path):
      ProtectionPlusDLL_path = os.path.join(ProtectionPlusDLL_path,'ProtectionPlusDLL.dll')
    if not (os.path.exists(ProtectionPlusDLL_path) and os.path.isfile(ProtectionPlusDLL_path)):
        print(f'{ProtectionPlusDLL_path} is not exists or is invalid file')
    ProtectionPlusDLL_path = os.path.abspath(ProtectionPlusDLL_path)
    pe = pefile.PE(ProtectionPlusDLL_path)
    bak = ProtectionPlusDLL_path+time.strftime(".%Y%m%d_%H%M%S.BAK")
    if not os.path.exists(bak):
      pe.write(bak)
      print(f'backup to {bak}')
    for sym in pe.DIRECTORY_ENTRY_EXPORT.symbols:
        if sym.name==b'IsActivatedSoftwareKey':
            pe.set_bytes_at_rva(sym.address,b'\xB0\x01\xC3') # mov al,1;ret;
        elif sym.name in [b'CheckStatusAsyncSoftwareKey',b'GetExpirationDateSoftwareKey',b'GetUsageStatus',
            b'PromptAndActivateSoftwareKey',b'PromptAndDeactivateSoftwareKey',b'SetCheckStatusCallbackSoftwareKey']:
            pe.set_bytes_at_rva(sym.address,b'\xB0\x00\xC3') # mov al,0;ret;
    pe.close()
    pe.write(ProtectionPlusDLL_path)
 
 
#patch_ProtectionPlusDLL(r'D:\UltraEdit\ProtectionPlusDLL.dll')

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 780
活跃值: (2365)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
考拉 2023-5-12 09:13
2
0
IsActivated  IsEnterprise 一般会patch这2处(第二处非必要)
游客
登录 | 注册 方可回帖
返回