吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2119|回复: 6
收起左侧

[原创] 异常类Crackerme分析

[复制链接]
Nattevak 发表于 2021-12-8 11:55
Crackerme资源(包含原版以及修改访问权限版) Crackerme.zip (49.84 KB, 下载次数: 10)

1.CRACKME 界面 及OD分析

1.1

1.1


初次尝试,使用OD打开,直接冲字符串

1.2

1.2

1.3

1.3

1.4

1.4

我????给我上IDA

2.使用IDA打开CRACKME程序

2.1

2.1


按空格切换为Graph模式便于我们分析

2.2

2.2



3.分析思路
①先将比较明显的数据变更为便于我们分析的名称
来源于百度百科:MSG是Windows程序中的结构体。在Windows程序中,消息是由MSG结构体来表示的。成员变量含义:第一个成员变量hwnd表示消息所属的窗口;第二个成员变量message指定了消息的标识符。第三、第四个成员变量wParam和lParam,用于指定消息的附加信息。最后两个变量分别表示消息投递到消息队列中的时间和鼠标的当前位置。

3.1.1

3.1.1


按下M,选择枚举

3.1.2

3.1.2

3.1.3

3.1.3


arg_8应该就是我们的wParam

3.1.4

3.1.4

3.1.5

3.1.5


②在mov ds:dword_401113, eax 的位置触发异常
.text的访问属性为可读可执行,这里执行写入操作会触发异常

3.2.1

3.2.1

3.2.2

3.2.2


③继续分析,双击进入TopLevelExceptionFilter,查看SetUnhandledExceptionFilter设置的异常处理函数

3.3.1

3.3.1

3.3.2

3.3.2

3.3.3

3.3.3


④添加结构体

3.4.1

3.4.1


添加CONTEXT、FLOATING_SAVE_AREA、EXCEPTION_RECORD、EXCEPTION_POINTERS四个结构体,双击CONTEXT,便于一会儿我们查看数据

3.4.2

3.4.2


⑤分析步骤

3.5.1

3.5.1


按F5转换为伪代码
[C] 纯文本查看 复制代码
signed int __stdcall sub_40334A(struct _EXCEPTION_POINTERS *ExceptionInfo)
{
  DWORD v1; // eax@1
  DWORD v2; // ebx@1
  PCONTEXT v3; // esi@1

  v1 = 32 * (ExceptionInfo->ExceptionRecord->ExceptionCode & 0xDEADFF);
  v2 = v1;
  v1 += 4206510;
  v3 = ExceptionInfo->ContextRecord;
  v3->Edi = v1;
  *(DWORD *)((char *)&v3->ContextFlags + v2) = v1 + 732;
  v3->Eip = v2 + 4198367;
  return -1;
}

故密码由fubar变更为了magic
⑥测试密码

3.6.1

3.6.1

3.6.2

3.6.2


⑦将.text段的访问属性变更为可写入的状态

3.7.1

3.7.1


详细操作见②
此时因为不会触发异常,所以输入密码fubar即可成功

3.7.2

3.7.2

免费评分

参与人数 2威望 +1 吾爱币 +22 热心值 +2 收起 理由
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
小朋友呢 + 2 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

liuchen98 发表于 2021-12-8 17:53
完全看不懂
 楼主| Nattevak 发表于 2021-12-8 18:04
本帖最后由 Nattevak 于 2021-12-8 18:06 编辑

有受伤到
这里因为.text段只有可读可执行的访问属性,但是程序执行了写入操作,所以调用SetUnhandledExceptionFilter设置异常处理函数;当然也可以对.text段添加可写的访问属性避免异常
q510 发表于 2021-12-8 18:16
Nattevak 发表于 2021-12-8 18:04
有受伤到
这里因为.text段只有可读可执行的访问属性,但是程序执行了写入操作,所以调用Set ...

请教,不用IDA,还能成功逆向吗
 楼主| Nattevak 发表于 2021-12-8 19:00
q510 发表于 2021-12-8 18:16
请教,不用IDA,还能成功逆向吗

其实在OD中在00401084 REPE CMPS 的位置下断点是可以观察到正确的字符串的

1

1


但是跟随数据窗口可以看到作者写的一段话,后面的大意就是OD会比较难解决这一类的问题

2

2


主要是OD在中运行至 0040106 A3 13114000 MOV DWORD PTR DS:[0x401113],EAX 时会跳转到下图中776B7009 8B4C24 04 MOV ECX,DWORD PTR SS:[ESP+0x4] 的位置继续执行,期间很难观察到程序产生了异常,更无法观察到异常处理的情况,所以更建议用IDA去观察异常情况

3

3
yang1 发表于 2021-12-8 20:00
嗯嗯们,迷糊了
海天绯红 发表于 2021-12-8 21:21
确实牛叉叉!!!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-25 13:11

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表