【CTF解题】吾爱破解 Crackme 逆向破解
2022-10-21 / 0 评论 / 281 阅读 / 7 点赞

【CTF解题】吾爱破解 Crackme 逆向破解

发光的神
2022-10-21 / 0 评论 / 281 阅读 / 正在检测是否收录...

解题

l9iie9vn.png

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

l9ij4y3k.png

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

l9ij9jki.png

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

l9ijhncn.png

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

l9ijk0a1.png

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

l9ijlg8y.png

l9il79re.png

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 0x4

8.看不懂的话建议先学汇编基础,学起来不是很难的。

l9ikzp6d.png

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

l9il53vn.png
10.完工,比较简单的一道题。

7

评论 (0)

取消
0:00