李朗8 发表于 2026-9-3 19:00

010 Editor(linux版)分析

```
学习linux下,010 Editor 的 PJ 思路,需要用到的工具如下:

010Editor_Linux64_15.0.2
ida(linux版)
```
```
1、010editor$ ./010editor                                                                                                                  // 先走遍安装流程,避免出现意外
2、启动ida,拖入 010editor                                                                                                                // 虚拟机中加载约10多秒,看左下角的显示
3、Debugger -> Select debugger... F9 -> Local Linux debugger -> 按 F9
4、Alt + B,搜索 "Evaluation Version",选第1个 .rodata:0000000000929025,双击进入
5、Ctrl + x,发现4处 "Evaluation Version\n",且都在 RRegister::GetLicenseStatusString(int,int *,int,int) 里
6、双击第1个,进入 .text:000000000054FB7E lea   rsi, aEvaluationVers            ; "Evaluation Version\n"
```
```
7、往上翻,发现如下代码

.text:000000000054FB00 ; __unwind { // __gxx_personality_v0                                                    // C++ 异常处理机制的标志
.text:000000000054FB00 push    r15
.text:000000000054FB02 push    r14
.text:000000000054FB04 push    r13
.text:000000000054FB06 push    r12
.text:000000000054FB08 push    rbp
.text:000000000054FB09 push    rbx
.text:000000000054FB0A mov   rbp, rcx
.text:000000000054FB0D mov   rbx, rdi
.text:000000000054FB10 sub   rsp, 198h
.text:000000000054FB17 mov   rax, fs:28h
.text:000000000054FB20 mov   , rax
.text:000000000054FB28 xor   eax, eax
.text:000000000054FB2A mov   rax, cs:_ZN10QArrayData11shared_nullE_ptr                                             // 初始化 Qt 容器
.text:000000000054FB31 cmp   edx, 0DBh                                                                                                      // 比较 edx 和 0DBh
.text:000000000054FB37 mov   , rax
.text:000000000054FB3A jz      loc_54FD90                                                                                                      // 跳转
.text:000000000054FB40 cmp   edx, 2Fh ; '/'                                                                                                    // 比较 edx 和 2Fh
.text:000000000054FB43 jz      loc_550160                                                                                                      // 跳转
.text:000000000054FB49 cmp   edx, 71h ; 'q'                                                                                                // 比较 edx 和 71h
.text:000000000054FB4C jz      loc_54FC48                                                                                                       // 跳转
.text:000000000054FB52 cmp   edx, 20Ch                                                                                                      // 比较 edx 和 20Ch
.text:000000000054FB58 jz      loc_54FC48                                                                                                       // 跳转
.text:000000000054FB5E cmp   edx, 0F9h                                                                                                      // 比较 edx 和 0F9h
.text:000000000054FB64 jz      loc_550400                                                                                                      // 跳转
.text:000000000054FB6A cmp   edx, 0EDh                                                                                                    // 比较 edx 和 0EDh
.text:000000000054FB70 jz      loc_54FFB8                                                                                                      // 跳转
.text:000000000054FB76 lea   rdi,           ; this
.text:000000000054FB7E lea   rsi, aEvaluationVers            ; "Evaluation Version\n"                                    // 从这儿往上翻
.text:000000000054FB85 mov   edx, 13h                        ; int
```
```
8、查看 比较 和 所有跳转,猜测 edx的值可能代表 注册的状态(标志)
```
```
9、loc_54FD90(可能是成功的跳转)

text:000000000054FB31 cmp   edx, 0DBh
.text:000000000054FB37 mov   , rax
.text:000000000054FB3A jz      loc_54FD90
```
```
10、进入 loc_54FD90

text:000000000054FD90 test    r8d, r8d
.text:000000000054FD93 mov   r12, rsi
.text:000000000054FD96 mov   r13d, r9d
.text:000000000054FD99 jz      short loc_54FDE0
.text:000000000054FD9B lea   rdi,          ; this
.text:000000000054FDA0 lea   rsi, aLicensedTo                ; "Licensed to:\n"                              // 注册成功的字符串,猜测 0DBh 为成功的标志
.text:000000000054FDA7 mov   edx, 0Dh                        ; int
```
```
11、验证猜想

a、动态调试,修改 edx 的值,看 010editor 的弹窗显示
b、在 .text:000000000054FB31               cmp   edx, 0DBh 处下断点
c、F9 -> 改 RDX 0000000000000071 'q' 的值                                                      // 选中,按 e ,将 71 改为 DB
d、重复 F9 -> 修改RDX,约改4次后,010editor启动完成
   About -> Licensed to:    0 User License 证明思路没错
```
```
12、查找 edx 的初始赋值点

a、在进入函数时,edx 的值已经是 71h,想办法找初始赋值点,
   尝试 函数引用 ,发现干扰太多,搜索 edx, 0DBh 或 edx, 71h 也没发现啥有价值的东西
b、又尝试只搜值(0DBh 或 71h),发现它俩都能搜出很多结果,瞬间灰心                                          // 非调试状态,Alt + t静态搜索更快
c、静下心来,认真看一下,发现,多数值是 .rodata,真正的 .text 其实并不多
   看几条就能找到 .text:000000000054FB31          _ZN9RRegister22GetLicenseStatusStringEiPiii         cmp   edx, 0DBh
   且它的上1条都是 .text:000000000054F1D7         _ZN9RRegister11CheckStatusEii
```
```
13、查看 RRegister::CheckStatus 函数

.text:000000000054F1A0 ; __int64 __fastcall RRegister::CheckStatus(RRegister *__hidden this, int, int)
.text:000000000054F1A0 public _ZN9RRegister11CheckStatusEii
.text:000000000054F1A0 _ZN9RRegister11CheckStatusEii proc near ; CODE XREF: main+434↑p
.text:000000000054F1A0                                       ; RRepository::BuildHttpUpdateRequest(void)+83↓p ...
.text:000000000054F1A0 ; __unwind {
.text:000000000054F1A0 mov   ecx,                                                                                                     // this->member_0x3C 读到 ecx
.text:000000000054F1A3 mov   eax, 113h                                                                                                            // eax = 0x113
.text:000000000054F1A8 test    ecx, ecx                                                                                                                // 判断 member_0x3C 是否为0
.text:000000000054F1AA jz      short loc_54F1B0                                                                                                // 0,跳到 54F1B0
.text:000000000054F1AC retn                                                                                                                              // !0,返回 0x113
.text:000000000054F1AC ; ---------------------------------------------------------------------------
.text:000000000054F1AD align 10h
.text:000000000054F1B0
.text:000000000054F1B0 loc_54F1B0:                           ; CODE XREF: RRegister::CheckStatus(int,int)+A↑j
.text:000000000054F1B0 push    rbp
.text:000000000054F1B1 push    rbx
.text:000000000054F1B2 mov   ebp, esi
.text:000000000054F1B4 mov   rbx, rdi
.text:000000000054F1B7 sub   rsp, 8
.text:000000000054F1BB call    _ZN9RRegister13CheckPasswordEii ; RRegister::CheckPassword(int,int)
.text:000000000054F1C0 cmp   eax, 4Eh ; 'N'
.text:000000000054F1C3 mov   edx, eax
.text:000000000054F1C5 jz      short loc_54F210
.text:000000000054F1C7 cmp   edx, 0E7h
.text:000000000054F1CD mov   eax, 177h
.text:000000000054F1D2 jz      short loc_54F204
.text:000000000054F1D4 cmp   edx, 2Dh ; '-'
.text:000000000054F1D7 mov   eax, 0DBh                                                                                                            // 从这儿往上翻
```
```
14、突破点

.text:000000000054F1A0 mov   ecx,
.text:000000000054F1A3 mov   eax, 113h                                                                              // mov   eax, 0DBh
.text:000000000054F1A8 test    ecx, ecx
.text:000000000054F1AA jz      short loc_54F1B0                                                                        // jz      short loc_54F1AC
.text:000000000054F1AC retn
```
```
参考:https://www.52pojie.cn/thread-1695625-1-1.html
```

675550115 发表于 2026-9-3 20:35

支持一下!!!!!

ccql5211314 发表于 2026-9-3 21:05

看不懂,大佬牛

teddy708 发表于 2026-9-4 08:34

大佬牛逼,膜拜一下

stbeta 发表于 2026-9-4 08:37

膜拜大佬,win版的这个软件我也在摸索使用中,想不到大佬已经pj了linux版本了

李朗8 发表于 2026-9-4 09:37

ccql5211314 发表于 2026-9-3 21:05
看不懂,大佬牛

太客气了,我都不好意思了

李朗8 发表于 2026-9-4 09:38

teddy708 发表于 2026-9-4 08:34
大佬牛逼,膜拜一下

太客气了,别这样,脸都红了

李朗8 发表于 2026-9-4 09:40

stbeta 发表于 2026-9-4 08:37
膜拜大佬,win版的这个软件我也在摸索使用中,想不到大佬已经pj了linux版本了

不用那么客气,你要是有兴趣的话,都可以相互学习的

李朗8 发表于 2026-9-4 09:41

675550115 发表于 2026-9-3 20:35
支持一下!!!!!

多谢支持

逍遥熙风 发表于 2026-9-5 11:08

牛逼啊!
页: [1] 2
查看完整版本: 010 Editor(linux版)分析