首页
社区
课程
招聘
[旧帖] [原创] 关于[易语言] 控件类 消息的拦截,Click,Show 等等,简单分析,破解 0.00雪花
发表于: 2013-7-22 11:34 2726

[旧帖] [原创] 关于[易语言] 控件类 消息的拦截,Click,Show 等等,简单分析,破解 0.00雪花

2013-7-22 11:34
2726
调试工具:olly dbg

面向人群:初级学员 (欠缺处请大神指点,勿喷....难以承受打击

内容比较老套,但是对于新手学习破解是个不错的文章...如果有错误的地方还望大神来指点!希望大神也不要排斥易语言

     现在【易语言】使用率已经非常广,对于一些新手难以接受 C\C++ .. 等语言,所以写一篇小文章还做一次知识记录吧!
     主要讲解易语言按钮,标签内容,控件隐藏等消息,网上的教程大部分是以 寻找Ascll的方法来定位关键位置,但是如果别人隐藏了文本内容,如果不使用MessageBox等函数,大部分新手就会迷茫,应该从那里下手呢(个人认为编程水平和拟向破解水平是成正比的),很多人现在使用显示标签或者是修改标签内容来提示用户,账户密码输入错误!
     
     易语言因为封装了大量的函数,所以自身操作是非常方便的,但是也导致了无法学习到核心,例如标签,可以使用  标签1.标题 = “xxxx”  标签1.左边 = 88888

学过C的都知道,其实就是一个类,
class label {
     void caption .......
     void left ...
}
//这样的形式

现在剖解原理,按钮(Button)为例,鼠标移动到按钮单击,首先系统接受到鼠标的左击消息,然后系统判断在位置,给进程发送消息... 简单的讲就是这么一个过程,接受到消息以后,再来调用过程,  下 拦截 TranslateMessage  其实就可以很详细的看到进程的处理,针对新手来讲,
这样考虑,执行完毕过程,是否需要返回到调用此过程的地方,有进有出,进程才会活着,一直进,那么系统就会Kill you,那我们随便找到一个过程结尾,ret处下断

首先OD 加载需要调试的程序,找到其中一个过程的结尾,自己编写一个即可,
1
2
3
4
5
6
7
8
9
00401004  /.  55            push    ebp
00401005  |.  8BEC          mov     ebp, esp
00401007  |.  6A 00         push    0x0
00401009  |.  68 F4784600   push    004678F4                         ;  ASCII "Test"
..... //省略点
0040103E  |.  83C4 18       add     esp, 0x18
00401041  |.  8BE5          mov     esp, ebp
00401043  |.  5D            pop     ebp
00401044  \.  C3            retn                      ////此处下端,然后单击按钮


F8 执行到下一步,到了此处

1
2
3
4
5
6
00417DF8  |.  FF75 F0       |push    dword ptr [ebp-0x10]
00417DFB  |.^ EB DF         \jmp     short 00417DDC
00417DFD  |>  FF55 FC       call    dword ptr [ebp-0x4]   //////  此处为关键
00417E00  |.  5F            pop     edi                              ;  //////到了此处,进call的时候,最后压入的为 call 下面的那个地址
00417E01  |.  5E            pop     esi
00417E02  |.  895D F4       mov     dword ptr [ebp-0xC], ebx


其实,特征寻找是个非常完美的方法,00417DFD  在此处下断,其余断电全部取消, 现在单击界面内的其他按钮,你会发现,他会直接跳到你按钮内的过程,记录附近特征,保存到Txt,易语言因为封装,所以这些东西都是死套路!在别人的程序内只要附加,然后Ctrl + S (在程序领空) 或者 ctrl + G 跳到 0x0401000 在进程领空必须,401000处 把以下代码复制进去 然后 Find
1
2
3
4
5
6
7
pop     edi
pop     esi
mov     dword ptr [ebp-0xC], ebx
mov     dword ptr [ebp-0x8], eax
mov     edx, dword ptr [ebp-0x18]
mov     dword ptr [edx+0x1F0], 0x0
cmp     dword ptr [ebp-0xC], 0x0


即可找到,在 pop edi 上面的call 处下段,在界面单击他的按钮即可得到他的过程地址 F7 进入即可!

按钮的大致就这样,标签方法也类似,标签等全部操作特征为
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
004180C0  /.  55            push    ebp
004180C1  |.  8BEC          mov     ebp, esp
004180C3  |.  8B45 1C       mov     eax, dword ptr [ebp+0x1C]
004180C6  |.  50            push    eax                                     ; /Arg6
004180C7  |.  8B4D 18       mov     ecx, dword ptr [ebp+0x18]               ; |
004180CA  |.  51            push    ecx                                     ; |Arg5
004180CB  |.  8B55 14       mov     edx, dword ptr [ebp+0x14]               ; |
004180CE  |.  52            push    edx                                     ; |Arg4
004180CF  |.  8B45 10       mov     eax, dword ptr [ebp+0x10]               ; |
004180D2  |.  50            push    eax                                     ; |Arg3
004180D3  |.  8B4D 0C       mov     ecx, dword ptr [ebp+0xC]                ; |
004180D6  |.  51            push    ecx                                     ; |Arg2
004180D7  |.  8B55 08       mov     edx, dword ptr [ebp+0x8]                ; |
004180DA  |.  52            push    edx                                     ; |Arg1
004180DB  |.  B9 28124900   mov     ecx, 00491228                           ; |
004180E0  |.  E8 3B9BFFFF   call    00411C20                                ; \Demo.00411C20
004180E5  |.  5D            pop     ebp
004180E6  \.  C3            retn


这个需要在结尾的Ret处下端,即可找到他执行过的过程, Ctrl + S 寻找特征为
1
2
3
4
5
6
7
8
9
push    ebp
mov     ebp, esp
mov     eax, dword ptr [ebp+0x1C]
push    eax
mov     ecx, dword ptr [ebp+0x18]
push    ecx
mov     edx, dword ptr [ebp+0x14]
push    edx
mov     eax, dword ptr [ebp+0x10]


寻找特征的时候,先跳转到 0x401000处

特征由来为下 bp ShowWindow   bp MoveWindow  返回得来

因为前天在吾爱论坛的破解大赛中,其中一人发出 我朋友叫我尝试下(因为他只会MessageBox和FindAscii),虽然MessageBox他有调用,但是下面有很多处理 Eidt.Text 的内容,是否。。 成功标签就会显示 登录Ok,我下 bp SetWindowTextA 寻找他一直在调用,但是修改的是 Form的caption,拿Spy++ 查看发现,里面有 2个控件标题为“登录失败”,其中一个标签为“登录成功”,那么可想而知,他是用ShowWindow(SW_SHOW | SW_HIDE) 来隐藏和显示标签,但是修改以后发现,标签看不到,拦截发现调用了 MoveWindow 来移动标签, 移动标签位置,爆破完成,仔细检查判断,发觉注册码用来移动标签等等判断,计算结果,注册码因此也得出!(没有不稳定的程序,只有不稳定的程序员...)

所以我觉得只要把 常调用的函数搞清楚,就可以很从容的破解

个人觉得以上方法比 Find Ascii 更好用!更通用(只针对易语言

不足和错误的地方还望大神指正.....

[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费
支持
分享
最新回复 (6)
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个易语言是中国发明的?
2013-7-22 14:13
0
雪    币: 19
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
嗯,中国制造!
2013-7-22 15:45
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
易语言的不好跟吧
2013-7-25 15:19
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
易语言是用中文编程的
2013-7-25 17:43
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
中国制造
2013-7-25 18:45
0
雪    币: 19
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我觉得易语言非常好跟,因为核心处理都是固定的,函数也是死的!
2013-7-25 20:15
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册