-
-
[旧帖]
[原创] 关于[易语言] 控件类 消息的拦截,Click,Show 等等,简单分析,破解
0.00雪花
-
发表于:
2013-7-22 11:34
2726
-
[旧帖] [原创] 关于[易语言] 控件类 消息的拦截,Click,Show 等等,简单分析,破解
0.00雪花
调试工具: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 更好用!更通用(只针对易语言

)
不足和错误的地方还望大神指正.....
[注意]看雪招聘,专注安全领域的专业人才平台!