解题

1.在吾爱上看到一篇新帖Crackme,既然还没人解题就让我来试下吧。

2.观察下要输入正确的账号密码,才会有成功的提示,注意这里有关键字 "登录失败",可以作为突破口。

3.先查软件看下有没有壳,可以看到没有壳,直接用OD打开看下。

4.题目说了是易语言写的,直接搜401000这个地址直接跳到程序代码初始头。

5.按我的思路肯定先搜索一遍字符串,看看有没有账号和密码。


6.我们观察一遍可以看到,有好几个账号密码错误,都可以进去看看,这里我就不卖关子了账号和密码都是 "1",是不是觉得很简单这么玩就没意思了,试着跟下错误的提示修改下输入错误的账号密码,也能执行正确的代码段。
破解分析
int MessageBox(
HWND hWnd, // 窗口句柄
LPCTSTR lpText, // 要显示的消息
LPCTSTR lpCaption, // 对话框标题
UINT uType
);
// 函数参数
hWnd
类型:HWND
要创建的消息框的所有者窗口的句柄。如果此参数为NULL,则消息框没有所有者窗口。
lpText
类型:LPCTSTR
要显示的消息。如果字符串由多行组成,则可以使用每行之间的回车符和/或换行符分隔行。
lpCaption
类型:LPCTSTR
对话框标题。如果此参数为NULL,则默认标题为“ 错误”。
uType
输入:UINT
对话框的内容和行为。此参数可以是来自以下标志组的标志的组合。
要指示消息框中显示的按钮,请指定以下值之一。7.MessageBox是kernel32.dll里的函数,他的作用是给我们显示一个窗口提示框,在我们做的任何操作在windows里都会有消息事件,而这些事件都是基于windows给我们提供的api,有这些东西我们就可以编写更强大的功能,也能够更好的驱动硬件。
突破点
- 系统api下断点调试 如:MessageBox GetWindowText
- 找关键字提示 如:正确或错误提示 办法还是有很多的
00402AB7 /0F84 41000000 je iwong.00402AFE // 这是突破的关键je 是反汇编的判断
00402ABD |. |6A 00 push 0x0
00402ABF |. |6A 00 push 0x0
00402AC1 |. |6A 00 push 0x0
00402AC3 |. |68 04000080 push 0x80000004 // push是往栈压入参数,会有些图标id
00402AC8 |. |6A 00 push 0x0
00402ACA |. |68 998A4900 push iwong.00498A99 ; 登录成功
00402ACF |. |68 01030080 push 0x80000301
00402AD4 |. |6A 00 push 0x0
00402AD6 |. |68 00000000 push 0x0
00402ADB |. |68 04000080 push 0x80000004
00402AE0 |. |6A 00 push 0x0
00402AE2 |. |68 998A4900 push iwong.00498A99 ; 登录成功
00402AE7 |. |68 04000000 push 0x4
00402AEC |. |BB F0324000 mov ebx,iwong.004032F0
00402AF1 |. |E8 1E010000 call iwong.00402C14 // 调用了登录成功提示
00402AF6 |. |83C4 34 add esp,0x34
00402AF9 |. |E9 3C000000 jmp iwong.00402B3A // 返回不执行下一行代码块
00402AFE |> \6A 00 push 0x0
00402B00 |. 6A 00 push 0x0
00402B02 |. 6A 00 push 0x0
00402B04 |. 68 04000080 push 0x80000004
00402B09 |. 6A 00 push 0x0
00402B0B |. 68 A28A4900 push iwong.00498AA2 ; 登录失败
00402B10 |. 68 01030080 push 0x80000301
00402B15 |. 6A 00 push 0x0
00402B17 |. 68 00000000 push 0x0
00402B1C |. 68 04000080 push 0x80000004
00402B21 |. 6A 00 push 0x0
00402B23 |. 68 A28A4900 push iwong.00498AA2 ; 登录失败
00402B28 |. 68 04000000 push 0x4
00402B2D |. BB F0324000 mov ebx,iwong.004032F0
00402B32 |. E8 DD000000 call iwong.00402C14 // 调用了登录失败提示
00402B37 |. 83C4 34 add esp,0x34
00402B3A |> 8BE5 mov esp,ebp
00402B3C |. 5D pop ebp
00402B3D \. C2 0400 retn 0x48.看不懂的话建议先学汇编基础,学起来不是很难的。

9.这里我OD运行不了我换了下x32dbg,将402AB7这个地址je给nop掉就行,jne、jmp都是可以的,这样代码就会从402AB7开始走到正确的提示,输入错误的账号密码也是一样的。

10.完工,比较简单的一道题。
评论 (0)