首页
社区
课程
招聘
[原创]易语言非常规破解思路秒杀(菜鸟写给菜鸟看,高手勿进)
2007-3-21 13:44 17384

[原创]易语言非常规破解思路秒杀(菜鸟写给菜鸟看,高手勿进)

2007-3-21 13:44
17384
【文章标题】: 易语言非常规破解思路秒杀
【文章作者】: BoXer[ICY]
【作者邮箱】: scship@163.com
【作者主页】: http://www.yumisu.cn
【作者QQ号】: **********
【软件名称】: MP4转换器 V3.8
【软件大小】: 8580 KB
【下载地址】: http://www.skycn.com/soft/28436.html
【加壳方式】: PECompact 2.x -> Jeremy Collake
【编写语言】: 易语言
【使用工具】: OD
【操作平台】: 盗版中的原装版xp sp2
【软件介绍】: 视频文件转换到MP4视频文件
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------

【详细过程】

  菜鸟写的垃圾文章,高手不要看,笑掉大牙本人绝不负责!
  
  ==============================================================================================
  
  1、脱壳
  
  下载,安装,查壳,发现是:PECompact 2.x -> Jeremy Collake
  
  熟悉 PECompact 2.x 的人都知道,这个壳的入口点就是程序的入口点,我们直接OD载入,
  
  看到EIP那里就是入口点1000
  
  在输入  he eip  回车,F9运行,直接飞到OEP ,删除硬件断点,dump!
  
  不知道是不是我OD的dump插件的问题,我用了几个OD怎么dump出来修复的都没用
  
  只好 LoadPE 来dump ,然后 修复 ImportREC 修复
  
  OEP输入00401000,自动找RVA,修复,ok!
  
  再查壳:E language *
  
  ==============================================================================================
  
  2、常规方法
  
  由于常规方法我只讲思路,就是EcE或者用bp MessageBoxA找找按钮事件,然后找到之好改跳转。
  
  但是随便输入注册码都能提示注册成功,而软件还是没有注册。经过冥想,我找到了以下方法。
  
  ==============================================================================================
  
  3、非常规方法
  
  细心的人会发现,od载入这个软件会发现提示有压缩代码,一般我们加载压缩壳都会有这样的提示。
  
  但是这个软件我们已经脱壳了,显示E language *
  
  我们这时候用我师兄(luocong师兄,比我高几届,我现在还没毕业)的查找字符串插件是找不到字符串的。
  
  这就是E语言封装的结果,我们来突破易语言的封装,找真正的“ OEP”吧。
  
  ==============================================================================================
  
  E语言的通用入口点
  
  00401000 >  E8 06000000     call    0040100B                         ; F7进入
  00401005    50              push    eax                              ; 这是退出代码
  00401006    E8 BB010000     call    <jmp.&kernel32.ExitProcess>      ; 退出释放进程
  
  。。。。。(华丽的省略号)。。。。。
  
  004010A2    50              push    eax                           ; 初始化,准备加载E语言支持库
  004010A3    E8 44010000     call    004011EC
  004010A8    68 19104000     push    00401019                      ; ASCII "krnln.fnr"
  004010AD    8D85 FCFEFFFF   lea     eax, dword ptr [ebp-104]
  004010B3    50              push    eax
  004010B4    E8 25010000     call    <jmp.&kernel32.lstrcat>       ; lstrcatA函数
  004010B9    50              push    eax                           ; 文件名
  004010BA    E8 19010000     call    <jmp.&kernel32.LoadLibraryA>  ; LoadLobraryA函数
  004010BF    85C0            test    eax, eax                      ; 测试支持库加载是否成功,成功就使下一句跳转
  004010C1    0F85 9E000000   jnz     00401165                      ; 不成功就从注册表中找E程序的安装目录
  
  。。。。。(又是菜鸟最喜欢的华丽的省略号)。。。。。
  
  00401191    FFD0            call    eax                           ; 加载E格式进行本地封装等操作,F7进去
  00401193    6A 00           push    0                             ; ExitCode=0
  00401195    E8 2C000000     call    <jmp.&kernel32.ExitProcess>   ; 退出释放进程
  
  。。。。。(还是无比华丽的省略号)。。。。。
  
  1002998A    55              push    ebp
  1002998B    8BEC            mov     ebp, esp
  1002998D    8B45 08         mov     eax, dword ptr [ebp+8]
  10029990    50              push    eax
  10029991    B9 10DB0E10     mov     ecx, 100EDB10
  10029996    E8 04F5FFFF     call    10028E9F                      ; F7进去
  1002999B    5D              pop     ebp
  1002999C    C2 0400         retn    4
  
  
  ==============================================================================================
  
  到了看krnln.fnr的领空了
  
  1002998A    55              push    ebp
  1002998B    8BEC            mov     ebp, esp
  1002998D    8B45 08         mov     eax, dword ptr [ebp+8]
  10029990    50              push    eax
  10029991    B9 10DB0E10     mov     ecx, 100EDB10
  10029996    E8 04F5FFFF     call    10028E9F                      ; F7进去
  1002999B    5D              pop     ebp
  1002999C    C2 0400         retn    4
  
  之后就到了这里:
  
  10028E9F    55              push    ebp                           ; 对E语言格式进行封装
  10028EA0    8BEC            mov     ebp, esp
  10028EA2    83EC 08         sub     esp, 8
  10028EA5    53              push    ebx
  10028EA6    56              push    esi
  10028EA7    57              push    edi
  10028EA8    894D F8         mov     dword ptr [ebp-8], ecx
  10028EAB    FF15 E0230C10   call    dword ptr [<&KERNEL32.GetProc>; kernel32.GetProcessHeap
  10028EB1    8B4D F8         mov     ecx, dword ptr [ebp-8]
  10028EB4    8981 50040000   mov     dword ptr [ecx+450], eax
  10028EBA    8B55 08         mov     edx, dword ptr [ebp+8]
  10028EBD    8B42 30         mov     eax, dword ptr [edx+30]
  10028EC0    83E0 01         and     eax, 1
  10028EC3    85C0            test    eax, eax
  10028EC5    75 10           jnz     short 10028ED7
  10028EC7    8B4D 08         mov     ecx, dword ptr [ebp+8]
  10028ECA    51              push    ecx
  10028ECB    8B4D F8         mov     ecx, dword ptr [ebp-8]
  10028ECE    E8 4DFB0200     call    10058A20                      ; 封装完成
  10028ED3    FFE0            jmp     eax                           ; 跳到程序真正的OEP
  
  
  ==============================================================================================
  
  0041E5EF    FC              cld                          ;程序真正的OEP,可以搜索字符串了
  0041E5F0    DBE3            finit
  0041E5F2    E8 F7FFFFFF     call    0041E5EE
  0041E5F7    68 A1E54100     push    0041E5A1
  0041E5FC    B8 03000000     mov     eax, 3
  0041E601    E8 36000000     call    0041E63C
  0041E606    83C4 04         add     esp, 4
  0041E609    E8 A2E1FFFF     call    0041C7B0
  0041E60E    68 CC000152     push    520100CC
  0041E613    E8 1E000000     call    0041E636
  0041E618    83C4 04         add     esp, 4
  0041E61B    6A 00           push    0
  0041E61D    E8 0E000000     call    0041E630
  0041E622    E8 03000000     call    0041E62A
  0041E627    83C4 04         add     esp, 4
  0041E62A  - FF25 F9B24100   jmp     dword ptr [41B2F9]            ; krnln.10029892
  0041E630  - FF25 FDB24100   jmp     dword ptr [41B2FD]            ; krnln.100297FD
  0041E636  - FF25 01B34100   jmp     dword ptr [41B301]            ; krnln.10029827
  0041E63C  - FF25 05B34100   jmp     dword ptr [41B305]            ; krnln.10028F95
  0041E642  - FF25 F5B24100   jmp     dword ptr [41B2F5]            ; krnln.1002995A
  0041E648  - FF25 E9B24100   jmp     dword ptr [41B2E9]            ; krnln.100297D6
  0041E64E  - FF25 DDB24100   jmp     dword ptr [41B2DD]            ; krnln.10028FBA
  0041E654  - FF25 E1B24100   jmp     dword ptr [41B2E1]            ; krnln.10029011
  0041E65A  - FF25 E5B24100   jmp     dword ptr [41B2E5]            ; krnln.100297B7
  0041E660  - FF25 EDB24100   jmp     dword ptr [41B2ED]            ; krnln.10029852
  0041E666  - FF25 D5B24100   jmp     dword ptr [41B2D5]            ; krnln.10029799
  
  。。。。。(最后一次华丽的省略抢风头)。。。。。。。。
  
  ==============================================================================================
  
  经过上面无聊的分析后发现:
  
  那么以后找E语言真正的OEP只要在脱壳后的程序“右键”-“查找”-“二进制字符串”
  
  输入 “ FC DB E3 ” 就可以到真正的易语言OEP了。
  
  
  ==============================================================================================
  
  找到真正的OEP后就非常方便了,我们可以搜索字符串,找到关键字就可以秒杀了。
  
  对真正的OEP按 F4 运行到所选,之后立刻“右键”-“超级字符串参考”-“查找ascii”
  
  就会发现很多关于注册的字样,那么究竟谁才是真正的关键字眼呢?
  
  一般都是找注册失败的提示啊,然后改跳转让它成功。
  
  最后我找啊找,终于下面这句才是关键语句:
  
   超级字串参考, 项目 30
   地址=0041C33D
   反汇编=PUSH dumped_.004032EF
   文本字串=未注册版本,您只能转换10次,请您注册此软件!
  
  
  双击来到这里:
  
  0041C33D   |68 EF324000     push    004032EF                         ; 未注册版本,您只能转换10次,请您注册此软件!
  
  往上看看有个je跳,是这样的:
  
  
  0041C330   /0F84 48000000   je      0041C37E                         ;这个跳,改jmp跳过就注册了
  0041C336   |68 04000080     push    80000004
  0041C33B   |6A 00           push    0
  0041C33D   |68 EF324000     push    004032EF                         ; 未注册版本,您只能转换10次,请您注册此软件!
  0041C342   |68 01030080     push    80000301
  0041C347   |6A 00           push    0
  0041C349   |68 02000000     push    2
  0041C34E   |68 02000400     push    40002
  0041C353   |68 EF000116     push    160100EF
  0041C358   |68 CC000152     push    520100CC
  0041C35D   |68 03000000     push    3
  0041C362   |BB 80000000     mov     ebx, 80
  0041C367   |B8 03000000     mov     eax, 3
  0041C36C   |E8 DD220000     call    0041E64E
  0041C371   |83C4 28         add     esp, 28
  0041C374   |C705 00229A00 0>mov     dword ptr [9A2200], 1
  0041C37E   \6A 00           push    0
  
  最后保存,运行,发现。。。已经注册了。。。连注册码都不用输入。。。
  
  给同学测试,成功!
  
--------------------------------------------------------------------------------
【经验总结】
  本文重点是讨论易语言的封装问题,突破易语言的封装去寻找用易语言编写的程序的字符串进行突破。经过这样做,才有上
  面的1字节秒杀效果。
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年03月21日 13:40:36

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

收藏
点赞0
打赏
分享
最新回复 (40)
雪    币: 108
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
闪电狼 2007-3-21 13:47
2
0
最好是在
0041C330   /0F84 48000000   je      0041C37E  
上一个call里赋值..
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
scship 2007-3-21 13:55
3
0
最初由 闪电狼 发布
最好是在
0041C330 /0F84 48000000 je 0041C37E
上一个call里赋值..


请问在上面那个call里赋值起什么作用的?

我是菜鸟,我大概知道标志位破解

0041C31A   /74 09           je      short 0041C325
0041C31C   |53              push    ebx
0041C31D   |E8 20230000     call    0041E642
0041C322   |83C4 04         add     esp, 4
0041C325   \8B45 B8         mov     eax, dword ptr [ebp-48]
0041C328    83E0 01         and     eax, 1
0041C32B    83F0 01         xor     eax, 1
0041C32E    85C0            test    eax, eax
0041C330    0F84 48000000   je      0041C37E
0041C336    68 04000080     push    80000004
0041C33B    6A 00           push    0
0041C33D    68 C0000000     push    0C0                              ; 未注册版本,您只能转换10次,请您注册此软件!
0041C342    68 01030080     push    80000301

这个跳转上一个call是

0041C31D   |E8 20230000     call    0041E642

如果用标志位方法改call返回的值就不用改je了。
雪    币: 383
活跃值: (41)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
小娃崽 13 2007-3-21 14:03
4
0
E语言的东西,怕怕
==============================================================================================

0041E5EF FC cld ;程序真正的OEP,可以搜索字符串了
0041E5F0 DBE3 finit
0041E5F2 E8 F7FFFFFF call 0041E5EE
0041E5F7 68 A1E54100 push 0041E5A1
0041E5FC B8 03000000 mov eax, 3
0041E601 E8 36000000 call 0041E63C
0041E606 83C4 04 add esp, 4
0041E609 E8 A2E1FFFF call 0041C7B0
0041E60E 68 CC000152 push 520100CC
0041E613 E8 1E000000 call 0041E636
0041E618 83C4 04 add esp, 4
0041E61B 6A 00 push 0
0041E61D E8 0E000000 call 0041E630
0041E622 E8 03000000 call 0041E62A
0041E627 83C4 04 add esp, 4
0041E62A - FF25 F9B24100 jmp dword ptr [41B2F9] ; krnln.10029892
0041E630 - FF25 FDB24100 jmp dword ptr [41B2FD] ; krnln.100297FD
0041E636 - FF25 01B34100 jmp dword ptr [41B301] ; krnln.10029827
0041E63C - FF25 05B34100 jmp dword ptr [41B305] ; krnln.10028F95
0041E642 - FF25 F5B24100 jmp dword ptr [41B2F5] ; krnln.1002995A
0041E648 - FF25 E9B24100 jmp dword ptr [41B2E9] ; krnln.100297D6
0041E64E - FF25 DDB24100 jmp dword ptr [41B2DD] ; krnln.10028FBA
0041E654 - FF25 E1B24100 jmp dword ptr [41B2E1] ; krnln.10029011
0041E65A - FF25 E5B24100 jmp dword ptr [41B2E5] ; krnln.100297B7
0041E660 - FF25 EDB24100 jmp dword ptr [41B2ED] ; krnln.10029852
0041E666 - FF25 D5B24100 jmp dword ptr [41B2D5] ; krnln.10029799

。。。。。(最后一次华丽的省略抢风头)。。。。。。。。

==============================================================================================

E语言的真正OEP都是这种结构吗?通用不?
雪    币: 811
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
KuNgBiM 66 2007-3-21 14:27
5
0
最初由 scship 发布


程序为非独立编译的?没有花指令?

最初由 小娃崽 发布


通用,不过“易语言・飞扬”不知是不是这样的。。。
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
scship 2007-3-21 14:38
6
0
最初由 KuNgBiM 发布
程序为非独立编译的?没有花指令?



通用,不过“易语言・飞扬”不知是不是这样的。。。


本菜鸟忘记说明了,是针对非独立编译的

谢谢KuNgBiM,谢谢。
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
笨笨雄 14 2007-3-21 15:21
7
0
这么有个性的入口。。真无敌
雪    币: 347
活跃值: (25)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
小子贼野 10 2007-3-21 15:56
8
0
好文章,真的不错,呵呵,支持下
雪    币: 146
活跃值: (72)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
playx 1 2007-3-21 16:02
9
0
没玩过易.学习.
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
scuCBJ 2007-3-21 17:03
10
0
好贴应该要顶
雪    币: 190
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
guanwc 2007-3-21 17:37
11
0
我想求助下!
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
scuCBJ 2007-3-21 18:16
12
0
FC DB E3强,哈哈,再次支持
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yygx 2007-3-21 18:48
13
0
顶一下,学习
雪    币: 144
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
卡秋莎 2007-3-21 20:06
14
0
支持....学习了....好象有个脚本直接运行到OEP的,针对非独立编译
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
foxabu 13 2007-3-21 22:22
15
0
和不说没有什么区别~
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
scship 2007-3-21 22:35
16
0
最初由 卡秋莎 发布
支持....学习了....好象有个脚本直接运行到OEP的,针对非独立编译


老大为何不在群公布,害我找的辛苦。。。

不过“FC DB E3”应该比脚本快吧!?
雪    币: 1221
活跃值: (464)
能力值: (RANK:460 )
在线值:
发帖
回帖
粉丝
monkeycz 11 2007-3-21 22:44
17
0
最初由 scship 发布
老大为何不在群公布,害我找的辛苦。。。

不过“FC DB E3”应该比脚本快吧!?

http://bbs.pediy.com/showthread.php?s=&threadid=7661
试试就知道了。

针对3.x以上版本任意模式有效。
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
scship 2007-3-22 01:26
18
0
最初由 monkeycz 发布
http://bbs.pediy.com/showthread.php?s=&threadid=7661
试试就知道了。

针对3.x以上版本任意模式有效。




菜鸟有眼不识泰山,大侠有礼了!
雪    币: 205
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
李东国 2007-3-22 09:24
19
0
看到现在最难懂的了
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zzpyu 2007-3-22 09:57
20
0
谢谢。。我真在找这类学习
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
冬雷 2007-3-22 11:25
21
0
真的是太感谢了!
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xxdoc 2007-3-23 11:32
22
0
黑客防线中介绍过,~~支持~~~~
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yjdly 2007-3-26 12:41
23
0
http://www.live-share.com/files/186943/__HTTP__.rar.html
我用易语言做的一个外网到本地的对比更新程序,
呵呵,让大家练手,
我不开IP,你是进不了软件界面的,
呵呵,看一下你能否破掉?
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Lancia 2007-3-26 16:18
24
0
我自己摸索一个不同的方法!!!
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
scship 2007-3-26 19:10
25
0
最初由 yjdly 发布
http://www.live-share.com/files/186943/__HTTP__.rar.html
我用易语言做的一个外网到本地的对比更新程序,
呵呵,让大家练手,
我不开IP,你是进不了软件界面的,
呵呵,看一下你能否破掉?


好厉害。。。有机会我试试。
游客
登录 | 注册 方可回帖
返回