qzhsjz 发表于 2020-7-29 17:09

无花无壳可爆破!简单if比较密码是否正确的小CM

本帖最后由 qzhsjz 于 2020-7-31 08:54 编辑


一个简单验证密码是否正确的小程序,无花无壳,就是库比较大。VS直出,可以爆破。
唯一不好的地方大概就是没什么特征可以直接用了{:1_918:}

为了证明这个程序确实很简单,我将在近期把本程序的源代码(抹去密码)贴出来,这样或许也可降低难度,可以根据源代码得出可用的特征。
但是需要注意,在我贴出源代码以后,请完成任务的大哥们不要只贴截图,至少简述一下思路。
源代码:https://www.52pojie.cn/thread-1234859-1-1.html

wangyujie96 发表于 2020-7-31 12:37

本帖最后由 wangyujie96 于 2020-7-31 12:38 编辑





密码已出,SimpleCrackMe.exe+37C6下个断点,rcx即是密码。哈哈哈,感谢楼主没有给字符串加密

CE搜索编辑框内存然后单步跟踪得出的

wangyujie96 发表于 2020-7-31 12:41

ps:没有看源代码,只是从那个帖子过来的。既然说无花无壳而且是if简单判断,小白应该能解,CE大-法好呀

solly 发表于 2020-8-1 02:01

本帖最后由 solly 于 2020-8-1 02:06 编辑

通过在 DefWindowProcW 下断点,可以找到消息循环处理函数,WndProc :
000000014099EF60 | 40:53                  | push rbx                                    |
000000014099EF62 | 55                     | push rbp                                    |
000000014099EF63 | 56                     | push rsi                                    |
000000014099EF64 | 57                     | push rdi                                    |
000000014099EF65 | 48:83EC 48             | sub rsp,48                                    | 条件断点:rdx == WM_LBUTTONUP
000000014099EF69 | 48:8B05 A0E06900       | mov rax,qword ptr ds:            |
000000014099EF70 | 48:33C4                | xor rax,rsp                                 |
000000014099EF73 | 48:894424 38         | mov qword ptr ss:,rax               |
000000014099EF78 | 49:8BE9                | mov rbp,r9                                    |
000000014099EF7B | C74424 20 00000000   | mov dword ptr ss:,0                   |
000000014099EF83 | 49:8BF0                | mov rsi,r8                                    |
000000014099EF86 | 4C:8D0D 13D78200       | lea r9,qword ptr ds:               |
000000014099EF8D | 8BFA                   | mov edi,edx                                 |
000000014099EF8F | 4C:8D05 5AAD7400       | lea r8,qword ptr ds:               |
000000014099EF96 | 48:8BD9                | mov rbx,rcx                                 |
000000014099EF99 | 33D2                   | xor edx,edx                                 |
000000014099EF9B | 48:8B0D BE468700       | mov rcx,qword ptr ds:            |
000000014099EFA2 | E8 B1BF1200            | call simplecrackme.140ACAF58                  |
000000014099EFA7 | 48:85C0                | test rax,rax                                  | rax == 0 未处理
000000014099EFAA | 74 34                  | je simplecrackme.14099EFE0                  |
000000014099EFAC | 48:8D4C24 30         | lea rcx,qword ptr ss:               |
000000014099EFB1 | 48:C74424 30 00000000| mov qword ptr ss:,0                   |
000000014099EFBA | 48:894C24 28         | mov qword ptr ss:,rcx               |
000000014099EFBF | 4C:8BCE                | mov r9,rsi                                    |
000000014099EFC2 | 48:8BC8                | mov rcx,rax                                 |
000000014099EFC5 | 48:896C24 20         | mov qword ptr ss:,rbp               |
000000014099EFCA | 44:8BC7                | mov r8d,edi                                 |
000000014099EFCD | 48:8BD3                | mov rdx,rbx                                 |
000000014099EFD0 | E8 5BEBFFFF            | call simplecrackme.14099DB30                  |
000000014099EFD5 | 84C0                   | test al,al                                    | al == 0 未处理
000000014099EFD7 | 74 07                  | je simplecrackme.14099EFE0                  |
000000014099EFD9 | 48:8B4424 30         | mov rax,qword ptr ss:               |
000000014099EFDE | EB 11                  | jmp simplecrackme.14099EFF1                   |
000000014099EFE0 | 4C:8BCD                | mov r9,rbp                                    |
000000014099EFE3 | 4C:8BC6                | mov r8,rsi                                    |
000000014099EFE6 | 8BD7                   | mov edx,edi                                 |
000000014099EFE8 | 48:8BCB                | mov rcx,rbx                                 |
000000014099EFEB | FF15 A7D41B00          | call qword ptr ds:[<&NtdllDefWindowProc_W>]   |
000000014099EFF1 | 48:8B4C24 38         | mov rcx,qword ptr ss:               |
000000014099EFF6 | 48:33CC                | xor rcx,rsp                                 |
000000014099EFF9 | E8 621F1100            | call simplecrackme.140AB0F60                  |
000000014099EFFE | 48:83C4 48             | add rsp,48                                    |
000000014099F002 | 5F                     | pop rdi                                       |
000000014099F003 | 5E                     | pop rsi                                       |
000000014099F004 | 5D                     | pop rbp                                       |
000000014099F005 | 5B                     | pop rbx                                       |
000000014099F006 | C3                     | ret                                           |
如上所示,下一个 rdx == WM_LBUTTONUP 的条件断点,然后输入一长串字符,点按钮就会中断,然后切换到 x64dbg的内存布局界面,依次在显示信息为空,PRV 类型的内存段中搜索刚才输入的 Unicode 字符串,就会在某个内存段中找到两条保存该字符串的地址,对两个地址都下硬件断点,就可以找到操作字符串的代码(这里要有耐心,要搜好多个段才能搜到):
0000000140AB5D70 | 0F100411               | movups xmm0,xmmword ptr ds:          | rcx+rdx*1:L"234568889994545435999999998666"
0000000140AB5D74 | 48:83C1 10             | add rcx,10                                    |
0000000140AB5D78 | 49:83E8 10             | sub r8,10                                     |
0000000140AB5D7C | 4D:8BC8                | mov r9,r8                                     |
0000000140AB5D7F | 49:C1E9 04             | shr r9,4                                    |
0000000140AB5D83 | 74 1C                  | je simplecrackme.140AB5DA1                  |
0000000140AB5D85 | 666666:0F1F8400 000000 | nop word ptr ds:,ax                  |
0000000140AB5D90 | 0F1141 F0            | movups xmmword ptr ds:,xmm0         |
0000000140AB5D94 | 0F100411               | movups xmm0,xmmword ptr ds:          | rcx+rdx*1:L"234568889994545435999999998666"
这是在一个字符串复制函数内,然后几个ret返回就到了这里,可以看到密码了:
000000014000378D | 48:8B09                | mov rcx,qword ptr ds:          | rcx:L"AngeloTheCat-52Pojie-SimpleCrackMe"
0000000140003790 | 48:8B01                | mov rax,qword ptr ds:          | rcx:L"AngeloTheCat-52Pojie-SimpleCrackMe"
0000000140003793 | 48:8B80 B8000000       | mov rax,qword ptr ds:       |
000000014000379A | FF15 488FB500          | call qword ptr ds:       |
00000001400037A0 | 48:8D4D D7             | lea rcx,qword ptr ss:       |
00000001400037A4 | 4C:8B50 20             | mov r10,qword ptr ds:       |
00000001400037A8 | 4D:8BC2                | mov r8,r10                        |
00000001400037AB | 4D:85D2                | test r10,r10                        |
00000001400037AE | 74 31                  | je simplecrackme.1400037E1          |
00000001400037B0 | 48:8B50 18             | mov rdx,qword ptr ds:       |
00000001400037B4 | 48:8B40 08             | mov rax,qword ptr ds:      | :L"234568889994545435999999998666"
00000001400037B8 | 4C:8D0C50            | lea r9,qword ptr ds:   |
00000001400037BC | 48:8D45 D7             | lea rax,qword ptr ss:       |
00000001400037C0 | 4C:2BC8                | sub r9,rax                        |
00000001400037C3 | 49:FFC8                | dec r8                              |
00000001400037C6 | 0FB711               | movzx edx,word ptr ds:         | rcx:L"AngeloTheCat-52Pojie-SimpleCrackMe"
00000001400037C9 | 66:85D2                | test dx,dx                        |
00000001400037CC | 74 13                  | je simplecrackme.1400037E1          |



月六点年一倍 发表于 2020-7-30 17:49

谢谢楼主分享,学习了

llj5935 发表于 2020-7-29 22:35

解开了,挺有意思的

alicc 发表于 2020-7-29 19:16

这CM UI 不错 是DIY皮肤还是ec

qzhsjz 发表于 2020-7-29 19:18

本帖最后由 qzhsjz 于 2020-7-29 19:19 编辑

alicc 发表于 2020-7-29 19:16
这CM UI 不错 是DIY皮肤还是ec
是某知乎大V的看家作品:
http://www.gaclib.net/
C++写出WPF的感觉,可能也就仅此一家了:lol

lsword2000 发表于 2020-7-30 09:34

说的挺简单:lol,我这样的菜鸟也试一下!

qzhsjz 发表于 2020-7-30 13:05

llj5935 发表于 2020-7-29 22:35
解开了,挺有意思的

大神,目前为止只有您一个人做出来,能说明一下思路吗?

suchuan4562 发表于 2020-7-30 14:33

感谢楼主 学习到了

GUIJINLIN 发表于 2020-7-30 14:36

感谢分享

ashuolalala 发表于 2020-7-30 15:00


说的挺简单,我这样的菜鸟也试一下!
页: [1] 2
查看完整版本: 无花无壳可爆破!简单if比较密码是否正确的小CM