as614001 发表于 2022-2-28 20:55

如何瞎猫碰上死耗子之记录第一次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之旅。




云在天 发表于 2022-3-1 11:20

借贴说一下 这种非静态编译的易语言程序怎么搜字符串
1. 在程序入口点利用搜索所有字符串


2. 找到Error,往上面回溯定位关键call
关键call为 call eax

3. F4运行到此处,F7单步进入这个call,

4. 进入上图箭头所指的call里, 继续定位关键call
关键call为 call eax

5. 单步进入这个call, 就会发现熟悉的易语言程序入口及各种初始化窗口循环信息的jmp

6. 在此入口下,右键搜索即可

Panel 发表于 2022-2-28 22:24

很棒,感谢分享

赵日天666 发表于 2022-2-28 22:26

值得学习,感谢分享思路和技巧!

trombe108 发表于 2022-2-28 22:51

值得学习,谢谢

yyb414 发表于 2022-3-1 08:23

很详细,感谢分享

sky2021 发表于 2022-3-1 08:36

来学习了

luvlive 发表于 2022-3-1 08:55

哦豁,666

iloveasdl 发表于 2022-3-1 08:57


很详细,感谢分享

抱薪风雪雾 发表于 2022-3-1 10:22

十分详细,目前虽看不太懂,多学多问,总会明白

xiangxianjie 发表于 2022-3-1 11:12

好文章,值得学习
页: [1] 2 3 4
查看完整版本: 如何瞎猫碰上死耗子之记录第一次CrackMe