如何瞎猫碰上死耗子之记录第一次CrackMe
## 第一次CrackMe,记录一下。原帖连接:https://www.52pojie.cn/thread-1594832-1-1.html
### 第一步:查壳
没有壳,可能是C++,有难度,芜湖起飞!
### 第二步:开搞
点E看看,明显易语言的
新手起步:智能查找字符串+套用按钮事件
出来溜,这两种方法都无效的~
那么,弹出错误后直接上按F12暂停大法,堆栈回看。
不出所料有情况,找到最后一次堆栈,回车键按起起飞!
跟进去发现有 一个大跳
```
0042B54B 85C0 test eax,eax
0042B54D 0F84 C2030000 je CM1.0042B915 ; 直接跳继续加油.
0042B553 E8 75F4FFFF call CM1.0042A9CD
```
1号小跳
```
0042B59A 8945 FC mov dword ptr ss:,eax
0042B59D 837D FC 01 cmp dword ptr ss:,0x1
0042B5A1 0F85 D4000000 jnz CM1.0042B67B ; 1
0042B5A7 C745 F8 0000000>mov dword ptr ss:,0x0
```
2号小跳
```
0042B67B 837D FC 02 cmp dword ptr ss:,0x2
0042B67F 0F85 D4000000 jnz CM1.0042B759 ; 2
0042B685 C745 F8 0000000>mov dword ptr ss:,0x0
```
3号小跳
```
0042B759 837D FC 03 cmp dword ptr ss:,0x3
0042B75D 0F85 D4000000 jnz CM1.0042B837 ; 3
0042B763 C745 F8 0000000>mov dword ptr ss:,0x0
```
4号小跳
```
0042B837 837D FC 04 cmp dword ptr ss:,0x4
0042B83B 0F85 D4000000 jnz CM1.0042B915 ; 4
0042B841 C745 F8 0000000>mov dword ptr ss:,0x0
0042B848 6A 00 push 0x0
```
---
#### 通过调试个小跳发现都是指向验证错误!但是直接jmp大跳仍是验证错误。
~~~
0042B915 E8 1A000000 call CM1.0042B934
0042B91A E8 3C1E0000 call CM1.0042D75B
~~~
进入 call CM1.0042B934 看看
#### 既然都是错,看看call CM1.0042B454 都是干啥。,还不如直接拉入IDA。
---
伪代码:在测试中也发现,偶尔是1 2 34.看了伪代码可以确认。如果是验证失败,会随机生成1-4,再去switch 这个值,但这4个值都是指向错误的。
弹窗call:
1. call sub_42B123
2. call sub_42B1CC
3. call sub_42B25E
4. call sub_42B2F5
在ida看看大跳call CM1.0042B934 即call sub_42B934 看看是什么
发现流程基本一致 ,那就好办了直接找call就可以了
大跳call
~~~~
loc_42BE27:
call sub_42BF5B
call sub_42D75B
~~~~
再看 sub_42BF5B
好家伙,学会换方向了。
大跳call
~~~
mov large dword ptr ds:28h, 1
call sub_42C489
jmp loc_42C35F
~~~
再看sub_42C489
大跳call
~~~~
loc_42C8B2:
pop eax
mov large ds:20h, eax
call sub_42C8C6
call sub_42D75B
~~~~
再看 sub_42C8C6
#### 这个call明显多了结果,极有可能在其中。
仔细观察,除了4小龙错误call不用管,两边均指向 call sub_42CDC5,看了这个call又是4小龙。那
~~~~
loc_42CD91:
mov eax,
mov large ds:28h, eax
call sub_42D13F
jmp loc_42CDC1
~~~~
call sub_42D13F 大概率指向成功call
进去sub_42D13F 看看
又看到了 sub_42CDC5,错误的。
再进sub_42D1CE 看看
妈耶~又是四小龙。这不兴搞啊~
稳住,转移到OD.
---
一路jmp到需要的call看看
1号大跳:
~~~~
0042B54D /0F84 C2030000 je CM1.0042B915 ; 直接跳继续加油.
~~~~
2号大跳:
~~~~
0042BA5F /0F84 C2030000 je CM1.0042BE27
~~~~
3号大跳:
~~~~
0042BFDA /0F85 14000000 jnz CM1.0042BFF4
~~~~
4号大跳:
~~~~
0042C505 /0F8D 66030000 jge CM1.0042C871
~~~~
4号大跳:
~~~~
0042C942 /0F84 0F000000 je CM1.0042C957
~~~~
5号大跳:
~~~~
0042C9B5 /0F84 66030000 je CM1.0042CD21
~~~~
6号大跳:
~~~~
0042CD28 /0F8E 7A000000 jle CM1.0042CDA8
~~~~
7号大跳:
~~~~
0042D14F /0F8E 0F000000 jle CM1.0042D164
~~~~
最终到了这里:
nop一下吧
---
## 总结:
好工具值得你拥有!此时就结束了我第一次CrackMe之旅。
借贴说一下 这种非静态编译的易语言程序怎么搜字符串
1. 在程序入口点利用搜索所有字符串
2. 找到Error,往上面回溯定位关键call
关键call为 call eax
3. F4运行到此处,F7单步进入这个call,
4. 进入上图箭头所指的call里, 继续定位关键call
关键call为 call eax
5. 单步进入这个call, 就会发现熟悉的易语言程序入口及各种初始化窗口循环信息的jmp
6. 在此入口下,右键搜索即可
很棒,感谢分享 值得学习,感谢分享思路和技巧! 值得学习,谢谢 很详细,感谢分享 来学习了 哦豁,666
很详细,感谢分享 十分详细,目前虽看不太懂,多学多问,总会明白 好文章,值得学习