飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 32623|回复: 75

[x64] EverEdit V3.x.x X86\X64 注册分析及通用补丁

    [复制链接]

该用户从未签到

发表于 2015-1-8 20:33:09 | 显示全部楼层 |阅读模式
官方下载:http://cn.everedit.net/download.html

软件32位和64位流程一样~  

64位用ida定位(我用的是Software\\EverEdit字符串定位),不管用什么能定位到都可以~

分析软件就可以发现程序验证流程都是
1.调用解码call      --把解码的内容给一个地址(buff)
2.调用sscanf函数  --把解码好的内容(buff)分解成5段再验证是否有效

如下:
000000013F78A5B3 | E8 28 63 1C 00                   | call everedit.13F9508E0                 | 解码call rcx参数buff 解码后存放在这里  
000000013F78A5B8 | 84 C0                            | test al,al                              |
000000013F78A5BA | 0F 84 ED 00 00 00                | je everedit.13F78A6AD                   | 解码不出来就跳了
000000013F78A5C0 | 33 D2                            | xor edx,edx                             |
000000013F78A5C2 | 48 8D 8C 24 D1 01 00 00          | lea rcx,qword ptr ss:[rsp+1D1]          |
000000013F78A5CA | C6 84 24 D0 01 00 00 00          | mov byte ptr ss:[rsp+1D0],0             |
000000013F78A5D2 | 44 8D 42 63                      | lea r8d,dword ptr ds:[rdx+63]           |
000000013F78A5D6 | E8 55 98 1C 00                   | call everedit.13F953E30                 | 给buff分解后的每段 申请空间
000000013F78A5DB | 33 D2                            | xor edx,edx                             |
……
000000013F78A631 | 4C 8D 8C 24 D0 01 00 00          | lea r9,qword ptr ss:[rsp+1D0]           |
000000013F78A639 | 48 8B D0                         | mov rdx,rax                             |
000000013F78A63C | 48 8D 84 24 60 01 00 00          | lea rax,qword ptr ss:[rsp+160]          |
000000013F78A644 | 4C 8D 44 24 40                   | lea r8,qword ptr ss:[rsp+40]            |
000000013F78A649 | 48 89 44 24 30                   | mov qword ptr ss:[rsp+30],rax           |
000000013F78A64E | 48 8D 84 24 F0 00 00 00          | lea rax,qword ptr ss:[rsp+F0]           |
000000013F78A656 | 48 8D 8C 24 40 02 00 00          | lea rcx,qword ptr ss:[rsp+240]          |
000000013F78A65E | 48 89 44 24 28                   | mov qword ptr ss:[rsp+28],rax           |
000000013F78A663 | 48 8D 84 24 80 00 00 00          | lea rax,qword ptr ss:[rsp+80]           |
000000013F78A66B | 48 89 44 24 20                   | mov qword ptr ss:[rsp+20],rax           |
000000013F78A670 | E8 0B A7 1C 00                   | call everedit.13F954D80                 | sscanf 把解码后的buff分成5段后面验证
000000013F78A675 | 83 F8 05                         | cmp eax,5                               |
000000013F78A678 | 75 33                            | jnz everedit.13F78A6AD                  |
……                                                                                                              | 后面验证各个段 跟下就知道了

会发现验证都是调用的这么一个解码call  改了就好了

构造解码好的值如下
0042C000 >32 09 63 68 69 6E 61 50 59 47 09 63 68 69 6E 61  2.chinaPYG.china
0042C010 >50 59 47 09 63 68 69 6E 61 50 59 47 09 67 6F 75  PYG.chinaPYG.gou
0042C020 >73 68 69 62 65 65 00                                        shibee.

第一个0x32是判断授权类型的(团队授权)
用0x09分隔 最后一段就是用户名~


//解码call中
000000013F9508E0 | 48 89 5C 24 18                   | mov qword ptr ss:[rsp+18],rbx           |
000000013F9508E5 | 55                               | push rbp                                |
000000013F9508E6 | 56                               | push rsi                                |
000000013F9508E7 | 57                               | push rdi                                |
000000013F9508E8 | 41 54                            | push r12                                |
000000013F9508EA | 41 56                            | push r14                                |
000000013F9508EC | 48 81 EC 80 06 00 00             | sub rsp,680                             |
000000013F9508F3 | 48 8B 05 E6 43 0C 00             | mov rax,qword ptr ds:[13FA14CE0]        |
000000013F9508FA | 48 33 C4                         | xor rax,rsp                             |
000000013F9508FD | 48 89 84 24 70 06 00 00          | mov qword ptr ss:[rsp+670],rax          |
000000013F950905 | 48 8B 05 9C 43 0C 00             | mov rax,qword ptr ds:[13FA14CA8]        |
000000013F95090C | 4C 8B F1                         | mov r14,rcx                             |
000000013F95090F | 48 8D 0D 92 43 0C 00             | lea rcx,qword ptr ds:[13FA14CA8]        |
000000013F950916 | C6 44 24 70 6C                   | mov byte ptr ss:[rsp+70],6C             | 这些就当特征码~~
000000013F95091B | C6 44 24 71 69                   | mov byte ptr ss:[rsp+71],69             |
000000013F950920 | C6 44 24 72 63                   | mov byte ptr ss:[rsp+72],63             |
000000013F950925 | C6 44 24 73 65                   | mov byte ptr ss:[rsp+73],65             |
000000013F95092A | C6 44 24 74 6E                   | mov byte ptr ss:[rsp+74],6E             |
000000013F95092F | C6 44 24 75 73                   | mov byte ptr ss:[rsp+75],73             |
000000013F950934 | C6 44 24 76 65                   | mov byte ptr ss:[rsp+76],65             |
000000013F950939 | C6 44 24 77 2E                   | mov byte ptr ss:[rsp+77],2E             |
000000013F95093E | C6 44 24 78 64                   | mov byte ptr ss:[rsp+78],64             |
000000013F950943 | C6 44 24 79 61                   | mov byte ptr ss:[rsp+79],61             |
000000013F950948 | C6 44 24 7A 74                   | mov byte ptr ss:[rsp+7A],74             |
000000013F95094D | C6 44 24 7B 00                   | mov byte ptr ss:[rsp+7B],0              | license.dat
000000013F950952 | FF 50 18                         | call qword ptr ds:[rax+18]              |


修改方案
1.根据特征码搜索关键位置(kmp算法参考lucky_789    https://www.chinapyg.com/thread-74648-1-1.html)
2.得到关键解码call位置后,修改构造的汇编代码中的关键地址
3.把构造的汇编代码写入目标位置

//----1 特征码  搜索解码call
0xC6, 0x44,
0x24, 0x70, 0x6C, 0xC6, 0x44, 0x24, 0x71, 0x69,
0xC6, 0x44, 0x24, 0x72, 0x63, 0xC6, 0x44, 0x24,
0x73, 0x65, 0xC6, 0x44, 0x24, 0x74, 0x6E, 0xC6,
0x44, 0x24, 0x75, 0x73, 0xC6, 0x44, 0x24, 0x76,
0x65, 0xC6, 0x44, 0x24, 0x77, 0x2E, 0xC6, 0x44,
0x24, 0x78, 0x64, 0xC6, 0x44, 0x24, 0x79, 0x61,
0xC6, 0x44, 0x24, 0x7A, 0x74, 0xC6, 0x44, 0x24,
0x7B, 0x00

//----2  改解码call
//改成这样   构造的汇编代码如下
000000013FCA08E0 | 48 89 CE                 | mov rsi,rcx                             | rcx值就是目标地址
000000013FCA08E3 | 48 BF 16 09 CA 3F 01 00  | mov rdi,everedit.13FCA0916              | ;13FCA0916:"2\tchinaPYG\tchinaPYG\tchinaPYG\tgoushibee" //构造的解码后的值

000000013FCA08ED | 48 C7 C1 26 00 00 00     | mov rcx,26                              | ;构造的解码值长度我知道~  cl就够了(字节少点,没改~)
000000013FCA08F4 | 8A 07                    | mov al,byte ptr ds:[rdi]                |
000000013FCA08F6 | 88 06                    | mov byte ptr ds:[rsi],al                |
000000013FCA08F8 | 48 83 E9 01              | sub rcx,1                               |
000000013FCA08FC | 48 83 C7 01              | add rdi,1                               |
000000013FCA0900 | 48 83 C6 01              | add rsi,1                               |
000000013FCA0904 | 48 83 F9 00              | cmp rcx,0                               | 自己写的汇编代码~ 比较烂  
000000013FCA0908 | 75 EA                    | jnz everedit.13FCA08F4                  | 循环直到构造的码全部写入目标地址
                                              mov rax,1                               | 完了之后返回1
                                              ret
写完后发现
有问题~  13FCA0916地址写死了 ~!!!!

在写入构造的汇编代码前
000000013FCA08E3 | 48 BF 16 09 CA 3F 01 00  | mov rdi,everedit.13FCA0916  
先把高亮的地址改成正确的
我用的是asm.obj中自带的PatchQWORD 直接修改该位置的64大小的值


//----3 写入
VirtualProtectEx
WriteProcessMemory

最后发现直接改了点about时候上面的一张图没有显示,只要处理好这个解码call里面的代码就可以了,这里偷懒了

vs2012
用FASMW.exe生成asm.obj  (所有汇编可以在asm.asm中添加,在代码中添加声明就可以用了---〉ALSTD PatchQWORD(INT64 addr, INT64 data);)
项目属性-〉链接器->输入->附加依赖项目asm.obj
项目属性-〉常规->字符集->使用多字节字符集

32位补丁当时修改方案如下:
1.固定启动时候调用的验证
2.修改解码call中的流程,让其正确执行并返回1
3.修改sscanf前的代码让其跳转到构造的把构造解码值写入目标地址函数(那个函数中恢复之前的代码,并修改返回地址,控制程序正常流程)
4.修改about处sscanf前代码 类似3
-------------------------------------
32位下也可以用上面的方案 比较简单~

最后感谢飘云阁,试试自己动手才知道自己什么会什么不会!

代码以及补丁
everedit.7z (16.86 KB, 下载次数: 396)

点评

在官网的3.4.3 X86便携版下,X86补丁后,运行直接崩溃!!  发表于 2015-6-30 11:11

评分

参与人数 14威望 +80 飘云币 +156 收起 理由
lucious + 4 楼主新版本这个方法还有效么?
mosagi + 4
chatter-x + 4 IDA定位到之后就不知道怎么办了、学习了~
pentium450 + 8 + 8 很给力!
iamok + 8 + 8 很给力!
Shareusc + 4 赞一个!
sndncel + 4 很给力!
左岸麦田 + 4 + 4 赞一个!
冷月孤心 + 40 赞一个!
Nisy + 10 赞一个!

查看全部评分

PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-11-20 21:29
  • 签到天数: 44 天

    [LV.5]常住居民I

    发表于 2015-1-8 21:14:30 | 显示全部楼层
    本帖最后由 13595485 于 2015-1-8 21:16 编辑

    点一次回复怎么自动回复2次{:soso_e126:}
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-11-20 21:29
  • 签到天数: 44 天

    [LV.5]常住居民I

    发表于 2015-1-8 21:14:31 | 显示全部楼层
    1.png

    {:soso_e127:}怎么又都在玩这个……今天又下载了一份,换了个思路爆破了下。

    点评

    好几个要x64的补丁,练习下~  详情 回复 发表于 2015-1-8 21:27
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-1-1 13:45
  • 签到天数: 217 天

    [LV.7]常住居民III

    发表于 2015-1-8 21:14:55 | 显示全部楼层
    牛擦  。。
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2015-1-8 21:27:04 | 显示全部楼层
    13595485 发表于 2015-1-8 21:14
    怎么又都在玩这个……今天又下载了一份,换了个思路爆破了下。

    好几个要x64的补丁,练习下~
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2021-7-17 13:00
  • 签到天数: 975 天

    [LV.10]以坛为家III

    发表于 2015-1-8 22:28:40 | 显示全部楼层
    赞一个了,感谢分享了
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2022-3-30 23:22
  • 签到天数: 480 天

    [LV.9]以坛为家II

    发表于 2015-1-9 00:22:44 | 显示全部楼层
    13595485 发表于 2015-1-8 21:14
    怎么又都在玩这个……今天又下载了一份,换了个思路爆破了下。

    重启后会再次读取授权文件或注册表验证是否注册。这一步具体是怎么解决。不知道能否解惑一下。

    点评

    论坛搜索:冷月孤心 查看冷大的主题帖,或许对你有所帮助。  详情 回复 发表于 2015-1-9 00:41
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-11-20 21:29
  • 签到天数: 44 天

    [LV.5]常住居民I

    发表于 2015-1-9 00:41:38 | 显示全部楼层
    pk196371 发表于 2015-1-9 00:22
    重启后会再次读取授权文件或注册表验证是否注册。这一步具体是怎么解决。不知道能否解惑一下。[/backcolo ...

    论坛搜索:冷月孤心 查看冷大的主题帖,或许对你有所帮助。
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    昨天 09:37
  • 签到天数: 1432 天

    [LV.10]以坛为家III

    发表于 2015-1-9 08:24:51 | 显示全部楼层
    感谢了,厉害
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-25 15:21
  • 签到天数: 487 天

    [LV.9]以坛为家II

    发表于 2015-1-9 09:23:00 | 显示全部楼层
    看来我来晚了,最后一个知道**
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表