首页
社区
课程
招聘
[原创]也来分享运用od破解Sublime Text
发表于: 2014-4-15 21:59 7795

[原创]也来分享运用od破解Sublime Text

2014-4-15 21:59
7795
工具:windows xp 32位, sublime text3 32位, od。

此篇主要分享一下定位函数返回值汇编代码以后的工作,之前的分析详见这里,由于博客园不支持破解,我就把后面的分析在这分享了。

004C3CF2  |> \8D4D C8       LEA ECX,DWORD PTR SS:[EBP-38]
004C3CF5  |.  E8 55DEF3FF   CALL sublime_.00401B4F
004C3CFA  |.  8D4D B0       LEA ECX,DWORD PTR SS:[EBP-50]
004C3CFD  |.  E8 4DDEF3FF   CALL sublime_.00401B4F
004C3D02  |.  8D4D 80       LEA ECX,DWORD PTR SS:[EBP-80]
004C3D05  |.  E8 45DEF3FF   CALL sublime_.00401B4F
004C3D0A  |.  8D4D 98       LEA ECX,DWORD PTR SS:[EBP-68]
004C3D0D  |.  E8 3DDEF3FF   CALL sublime_.00401B4F
004C3D12  |.  33C0          XOR EAX,EAX
004C3D14  |.  E8 955F0300   CALL sublime_.004F9CAE
004C3D19  \.  C3            RETN
004C3D1A  /$  6A 00         PUSH 0
004C3D1C  |.  B8 A09F6800   MOV EAX,sublime_.00689FA0
004C3D21  |.  E8 A65F0300   CALL sublime_.004F9CCC
004C3D26  |.  A1 B08D7800   MOV EAX,DWORD PTR DS:[788DB0]
004C3D2B  |.  BF A48D7800   MOV EDI,sublime_.00788DA4
004C3D30  |.  A8 01         TEST AL,1
004C3D32  |.  75 31         JNZ SHORT sublime_.004C3D65
004C3D34  |.  83C8 01       OR EAX,1
004C3D37  |.  A3 B08D7800   MOV DWORD PTR DS:[788DB0],EAX
004C3D3C  |.  8365 FC 00    AND DWORD PTR SS:[EBP-4],0


将004c3d12处改为xor eax,eax后, 虽然可以通过注册,但是重启Sublime Text后却还是显示未注册。下面来分析:

在004c3d12处下断点,然后ctrl+f2重新运行,可以看到,多次在该处命中断点。说明上面的函数的返回值有其他用处。那么我们就要做一个判断,当该函数是作为验证作用时,我们就将返回值置零。首先来看一下注册时,寄存器的值,点击注册,在此处命中断点后,观察寄存器信息:

EAX 00000001
ECX 0792A170
EDX 00160608
EBX 0074DF74 sublime_.0074DF74
ESP 0012D118
EBP 0012D1B4
ESI 0012D228
EDI 00000001
EIP 004C3D12 sublime_.004C3D12


注意观察0012dxxx。再重新运行sublime,将多次命中断点时,寄存器的值记录下来。

第一次:

EAX 00000001
ECX 053A8678
EDX 00160608
EBX 0074DF74 sublime_.0074DF74
ESP 0012F908
EBP 0012F9A4
ESI 0012F9F8 ASCII "dfsda"
EDI 00000001
EIP 004C3D12 sublime_.004C3D12


第二次:

EAX 00000001
ECX 054D5938
EDX 00160608
EBX 0074DF74 sublime_.0074DF74
ESP 0012F90C
EBP 0012F9A8
ESI 0012FA10
EDI 00000001
EIP 004C3D12 sublime_.004C3D12


第三次:

EAX 00000001
ECX 056B9108
EDX 00160608
EBX 00000000
ESP 0012EE28
EBP 0012EEC4
ESI 0012EF4C
EDI 00000001
EIP 004C3D12 sublime_.004C3D12


从以上可以得到下面的结论:

1、重新运行,第一次命中断点时,ESI是存放的注册码的首地址,我们可以多运行几次验证。

2、第二、三次命中时,ESP的值是0012Fxxx、0012Exxx。

3、注册时,ESP的值是0012dxxx。

根据以上,我们针对性修改:直接在od中反汇编窗口,往下拉滚动条。在下面的大片空白处随意选一处,写如下代码:

006A141A   > \51            PUSH ECX                                 ;  判断是否是第一次运行时检测注册码
006A141B   .  B9 F8F91200   MOV ECX,12F9F8                           ;  ASCII "fdsafasdfsdfa"
006A1420   .  3BF1          CMP ESI,ECX
006A1422   .  59            POP ECX
006A1423   .  74 2E         JE SHORT sublime_.006A1453               ;  如果是,就跳转到下面,将eax清零
006A1425   .  90            NOP
006A1426   .  90            NOP
006A1427   .  90            NOP
006A1428   .  51            PUSH ECX                                 ;  走到这, 就检测是否是手动填入注册码
006A1429   .  53            PUSH EBX
006A142A   .  B9 00D01200   MOV ECX,12D000
006A142F   .  8BDC          MOV EBX,ESP
006A1431   .  81E3 00F0FFFF AND EBX,FFFFF000
006A1437   .  3BCB          CMP ECX,EBX
006A1439   .  5B            POP EBX
006A143A   .  59            POP ECX
006A143B   .  74 16         JE SHORT sublime_.006A1453               ;  如果是手动注册,就跳转到下面, 将eax清零
006A143D   .  90            NOP
006A143E   .  90            NOP
006A143F   .  90            NOP
006A1440   .  90            NOP
006A1441   .  E8 6888E5FF   CALL sublime_.004F9CAE                   ;  走到这, 表明不是检测注册码的调用,不用管eax的值
006A1446   .^ E9 CC28E2FF   JMP sublime_.004C3D17                    ;  跳回原来的流程
006A144B      00            DB 00
006A144C      00            DB 00
006A144D      00            DB 00
006A144E      00            DB 00
006A144F      00            DB 00
006A1450      00            DB 00
006A1451      00            DB 00
006A1452      00            DB 00
006A1453   >  E8 5688E5FF   CALL sublime_.004F9CAE
006A1458   .  33C0          XOR EAX,EAX                              ;  将eax清零
006A145A   .^ E9 B828E2FF   JMP sublime_.004C3D17                    ;  跳回原来的流程


在这里,我选择的是在006a141A处写这些代码,所以在原来的004C3D12处,要将其汇编代码改为jmp 006a141a。

004C3D12   . /E9 03D71D00   JMP sublime_.006A141A
004C3D17   > |90            NOP
004C3D18   . |90            NOP
004C3D19   . |C3            RETN


由于改为jmp后,将后面的call代码覆盖掉了, 所以在上面的代码中,我在返回之前都会call 004f9cae。

至此, 运行Sublime Text,可以看到, 打开后不用输入注册码,就显示以注册了。


以上。

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好文章,解决了困扰多时问题,扩宽了我的思路,谢谢!
2014-4-15 23:12
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
乐于分享,共同进步
2014-4-15 23:19
0
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
受教了!~
2014-4-15 23:59
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
乐于分享,共同进步 ,学习了。
2014-4-18 12:12
0
雪    币: 6483
活跃值: (3452)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
好文
2017-4-28 09:36
0
游客
登录 | 注册 方可回帖
返回